Docker – ściągawka z podstawowymi komendami

pudełko z żarówką

Lubię tworzyć sobie różnego rodzaju ściągawki, kiedy uczę się jakiegoś narzędzia. Docelowo przestaję do nich później zaglądać, kiedy już uda mi się owych komend kilka razy użyć i zapamiętać. Skoro już są, to czemu by się nimi nie podzielić. Raczej nie znajdziecie tu nic więcej, niż w samej dokumentacji Dockera. Większość materiałów na swoim blogu traktuję w formie notatek. Ten również. Jeśli komuś poza mną dodatkowo może się przydać to świetnie.

Docker

Teoria

Obraz (image) to szablon (tylko do odczytu) z instrukcjami tworzenia kontenera.
Nieużywany obraz (unused image) to taki, który nie jest przypisany, ani używany w aktualnie uruchomionym kontenerze.
Wiszący obraz (dangling image) to taki, który nie ma nazwy i jest starą wersją obrazu (jego usunięcie jest zawsze bezpieczne).

Kontener (container) jest uruchamialną instancją obrazu.

Sieć (network) służy do nawiązywania komunikacji między kontenerami.
Nieużywana sieć (unused network) to taka, która nie jest wykorzystywana przez aktualnie uruchomione kontenery.

Wolumen (volume) to mechanizm utrwalania danych generowanych przez kontenery lub przez nie używanych.
Nieużywany wolumen (unused volume) to taki, który nie jest wykorzystywany przez aktualnie uruchomione kontenery.

Obrazy, kontenery, sieci i wolumeny – są to możliwe rodzaje obiektów (objects).

Cykl życia kontenerów:

  • Utworzony (created) – został utworzony, ale nie został uruchomiony,
  • Uruchomiony (running) – działający wraz ze wszystkimi swoimi procesami,
  • Wyłączony (stopped) – wyłączony wraz ze wszystkimi swoimi procesami,
  • Wstrzymany (paused) – wstrzymany wraz ze wszystkimi swoimi procesami,
  • Usunięty (deleted) – martwy, w trakcie jego całkowitego usuwania.

Praktyka

Zmienne

  • $COMMAND – Komenda.
  • $OBJECT – Rodzaj obiektu (kontener, obraz, sieć, wolumen).
  • $ID – Konkretny obiekt (identyfikator lub nazwa).
  • $IMAGE – Obraz (identyfikator lub nazwa).
  • $CONTAINER Kontener (identyfikator lub nazwa).
  • $NETWORK – Sieć (identyfikator lub nazwa).
  • $VOLUME – Wolumen (identyfikator lub nazwa).
  • $DOCKERFILE – Plik z instrukcjami tworzenia obrazu.
  • $PATH – Ścieżka do pliku/folderu.

Komendy

Zużycie dysku:

docker system df

Zużycie dysku z podziałem na obiekty:

docker system df -v

Zużycie zasobów przez kontenery (wyświetlane w czasie rzeczywistym):

docker stats

Porównanie plików kontenera z obrazem:

docker diff $CONTAINER

Log wszystkich odnotowanych zdarzeń (wyświetlane w czasie rzeczywistym):

docker events

Pobranie obrazu z rejestru:

docker pull $IMAGE

Stworzenie nowego obrazu z pliku:

docker build $DOCKERFILE

Uruchomienie polecenia w nowym kontenerze stworzonym z obrazu:

docker run $IMAGE $COMMAND

Uruchomienie polecenia w trybie interaktywnym (wejście do kontenera) w nowym kontenerze stworzonym z obrazu:

docker run -it $IMAGE $COMMAND

Wyłączenie działającego kontenera:

docker stop $CONTAINER

Uruchomienie polecenia w istniejącym kontenerze:

docker exec $CONTAINER $COMMAND

Uruchomienie polecenia w trybie interaktywnym (wejście do kontenera) w istniejącym kontenerze:

docker exec -it $CONTAINER $COMMAND

Lista dla konkretnego typu obiektów:

docker $OBJECT ls

Usunięcie konkretnego obiektu:

docker $OBJECT rm $ID

Szczegółowe informacje o konkretnym obiekcie:

docker inspect $ID

Usunięcie wszystkich zatrzymanych kontenerów:

docker container prune

Usunięcie wiszących obrazów:

docker image prune

Usunięcie nieużywanych sieci:

docker network prune

Usunięcie nieużywanych wolumenów:

docker volume prune

Usunięcie nieużywanych obiektów:

docker system prune

Kopiowanie pliku z lokalnego środowiska do kontenera:

docker cp $PATH $CONTAINER:$PATH 

Kopiowanie pliku z kontenera do lokalnego środowiska:

docker cp $CONTAINER:$PATH $PATH

Wyłączenie wszystkich aktualnie działających kontenerów:

docker stop $(docker container ls -a -q)

Usunięcie wszystkich istniejących obiektów danego typu:

docker $OBJECT rm $(docker $OBJECT ls -a -q)
Krystian Żądło
Programista PHP i właściciel marki Koddlo. Pasjonat czystego kodu i dobrych praktyk programowania obiektowego. Prywatnie fan angielskiej piłki nożnej, dobrego humoru oraz podcastów.