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