Laboratorium Komputerowe Progmar
Marcin Załęczny

Na stronie używamy cookies. Korzystając z witryny wyrażasz zgodę na ich wykorzystywanie.      Zamknij

Przykłady użycia Dockera

Instalacja Dockera w Ubuntu: sudo apt install docker.io

Przyznanie użytkownikowi username uprawnień do obsługi Dockera: sudo usermod -a -G docker username

Wylistowanie obrazów (zainstalowanych programów) Dockera: docker images

Pobranie obrazu (programu, tutaj. busybox) do dostępnego lokalnie repozytorium Dockera: docker pull busybox

Uruchomienie zainstalowanego programu z przekazaniem mu opcji w linii poleceń: docker run busybox echo "Hello world!"

Wylistowanie uruchomionych kontenerów: docker ps

Wylistowanie wszystkich uruchomionych dotąd kontenerów: docker ps -a

Usunięcie kontenera, który zakończył już swoje działanie (należy to robić dla każdego pojemnika o statusie EXITED, gdyż zajmuje on przestrzeń dyskową): docker rm 85e291ad47ec

Automatyczne usunięcie wszystkich kontenerów o statusie EXITED: docker rm $(docker ps -a -q -f status=exited)

To samo co komenda wyżej tylko, że na nowszych wersjach Dockera: docker container prune

Usunięcie wszystkich kontenerów: docker rm $(docker ps -a -q)

Usunięcie wszystkich obrazów: docker rmi $(docker images -q -)

Automatyczne usunięcie wszystkich kontenerów, które zakończyły działanie ze statusem różnym od 0: docker rm $(docker ps -a -q --filter 'exited!=0')

Usunięcie wszystkich nietagowanych obrazów: docker rmi $(docker images -q -f "dangling=true")

Usunięcie obrazu/repozytorium zainstalowanego programu (tu busybox): docker rmi busybox

Zbudowanie obrazu Dockera zgodnie z instrukcjami w pliku Dockerfile znajdującym się w bieżącym katalogu: docker build -t example/docker-node-hello:latest .

Uruchomienie obrazu example/docker-node-hello:latest w tle (opcja -d) wraz ze zmapowaniem portu 8080 w pojemniku na port 8080 maszyny, na której działa Docker: docker run -d -p 8080:8080 example/docker-node-hello:latest

Polecenie działa jak wyżej, ale dodatkowo przekazuje do środowiska pojemnika zmienną środowiskową WHO: docker run -d -p 8080:8080 -e WHO="Marcin Zaleczny" example/docker-node-hello:latest

Zatrzymanie pojemnika o podanym ID: docker stop CONTAINER_ID

Zalogowanie się do rejestru Docker Hub (tworzony jest plik ~/.docker/config.json z tokenem uwierzytelnienia): docker login

Wylogowanie się z rejestru Docker Hub (czyszczony jest token uwierzytelnienia w pliku ~/.docker/config.json): docker logout

Zalogowanie się do podanego, alternatywnego rejestru Dockera: docker login alternatywny.rejestr.com

Wypisanie pobranych obrazów zgodnie z podanym formatem: docker images --format="table {{.ID}}\t {{.Repository}}"

Wysłanie obrazu do repozytorium Dockera: docker push progmar/program-name

Utworzenie kontenera o podanej nazwie z podanego obrazu: docker create --name="mycontainer-customname" ubuntu:latest

Uruchomienie kontenera z podanego obrazu wraz z przypisaniem mu etykiety deployer o wartości mzaleczny: docker run -d -l deployer=mzaleczny -p 8080:8080 -t example/docker-node-hello:latest

Wyszukiwanie kontenerów posiadających etykietę deployer o wartości mzaleczny: docker ps -a -f label=deployer=mzaleczny

Wyświetlenie wszystkich etykiet i parametrów zdefiniowanych w kontenerze o podanym id: docker inspect CONTAINER_ID

Uruchomienie kontenera z podanego obrazu i poinstruowanie dockera, że po zatrzymaniu kontenera ma on zostać skasowany (opcja --rm): docker run -d --rm -p 8080:8080 -t example/docker-node-hello:latest

[1] Uruchomienie kontenera i przygotowanie pseudo-TTY (opcja -t) oraz rozpoczęcie sesji interaktywnej (opcja -i): docker run --rm -ti ubuntu:latest /bin/bash

Działa jak [1] z tą różnicą, że dodatkowo ustawia nazwę hosta w pojemniku: docker run --rm -ti --hostname="progmar.net.pl" ubuntu:latest /bin/bash

Działa jak [1] z tą różnicą, że ustawia podane dnsy: docker run --rm -ti --dns=4.4.4.4 --dns=2.2.2.2 --dns-search=progmar1.net --dns-search=progmar2.net ubuntu:latest /bin/bash

Działa jak [1] z tą różnicą, że ustawia mac adres karty sieciowej: docker run --rm -ti --mac-address="aa:bb:cc:dd:11:22" ubuntu:latest /bin/bash

[2] Działa jak [1] z tą różnicą, że montuje (opcja -v) katalog ~ w systemie plików hosta w katalogu /data/home kontenera (katalog /data/home w pojemniku nie musi istnieć - zostanie on automatycznie utworzony, natomiast podany katalog na hoście rodzicu musi istnieć): docker run --rm -ti -v ~:/data/home ubuntu:latest /bin/bash

[3] Działa jak [2] z tą różnicą, że główny system plików jest zamontowany jako tylko do odczytu (zapisywać można jedynie w zamonotwanym katalogu /data/home): docker run --rm -ti --read-only=true -v ~:/data/home ubuntu:latest /bin/bash

Działa jak [3], ale dodatkowo montuje do odczytu/zapisu katalog /tmp jako tmpfs w kontenerze. W katalogu tym można zapisywać pliki, ale zostaną one automatycznie usunięte po zatrzymaniu kontenera: docker run --rm -ti --read-only=true --tmpfs /tmp:rw,noexec,nodev,nosuid,size=256M -v ~:/data/home ubuntu:latest /bin/bash

Wyświetlenie informacji o ustawieniach Dockera: docker info

Ograniczenie dostępnej pamięci dla kontenera do 512MB (-m) oraz ograniczenie dostępnej pamięci wymiany do 256MB (--memory-swap -> 512MB+256MB=768MB, -1 wyłączy całkowicie dostęp do przestrzeni wymiany): docker run --rm -ti -m 512m --memory-swap 768m progrium/stress

Ograniczenie kontenera tylko do pierwszego rdzenia procesora (--cpuset) oraz do 512 udziałów tego procesora (--cpu-shares) (1024 udziałów to jest 100%): docker run --rm -ti --cpu-shares 512 --cpuset=0 progrium/stress

Zatrzymuje podany kontener sygnałem SIGTERM. Jeśli mimo to kontener nie zostanie zatrzymany, to po 25 sekundach zostanie wysłany sygnał SIGKILL, który go unicestwi: docker stop -t 25 CONTAINER_ID

Ubija podany kontener: docker kill CONTAINER_ID

Wysyła do podanego kontenera sygnał USR1: docker kill --signal=USR1 CONTAINER_ID

Pauzuje/Wznawia działanie kontenera o podanym ID: docker pasue CONTAINER_ID
docker unpause CONTAINER_ID

Wypisanie wersji dockera: docker --version

Wypisanie wersji dockera (zarówno klienta jak i serwera) oraz używanych przez niego bibliotek, API i programów: docker version

Wypisanie szczegółowych informacji na temat dockera oraz komputera, na którym on działa: docker info

Dostanie się do linii poleceń działającej we wnętrzu pojemnika o podanym ID: docker exec -t -i CONTAINER_ID /bin/bash

Pobranie PID-u procesu uruchomionego w pojemniku: docker inspect --format \{{.State.Pid\}} 7ee7bc570efd

Dostanie się przy pomocy komendy nsenter do powłoki o podanym PID (8166) działającej wewnątrz uruchomionego pojemnika: sudo nsenter --target 8166 --mount --uts --ipc --net --pid

Wylistowanie wolumenów zainstalowanych w katalogu głównym Dockera: docker volume ls

Wypisanie informacji o wolumenie o podanej nazwie (hashu): docker volume inspect VOLUME_NAME

Wyświetlanie na bieżąco (aka tail -f) logów pochodzących z pojemnika o podanym ID: docker logs -f CONTAINER_ID

Wyświetla statystyki podanych kontenerów: docker stats CONTAINER_1_ID CONTAINER_2_ID ...

Wyświetla w sposób ciągły zdarzenia, które miały miejsce w dockerze (np. wystartowanie kontenera, zatrzymanie itp.): docker events

Wyświetlenie listy procesów działających w kontenerze: docker top CONTAINER_ID

Ustawienie sterownika magazynów w Dockerze na devicemapper: docker daemon --storage-driver=devicemapper

Wyświetlenie wszystkich kontenerów z pełnym ID kontenera (nie obciętym): docker ps -a --no-trunc

Zbudowanie dwóch różnych obrazów Dockera hello1 i hello2 (z tego samego pliku Dockerfile): docker build -t hello1 .
docker build -t hello2 .

Uruchomienie kontenera Dockera z uprawnieniem do zmiany adresu MAC karty sieciowej: docker run -ti --rm --cap-add=NET_ADMIN ubuntu /bin/bash

Za usunięcie wybranego uprawnienia dla uruchamianego kontenera odpowiada opcja --cap-drop polecenia docker run