W ramach uzupełniania wiedzy przeczytałem książkę „Docker. Praktyczne zastosowania” (polskie tłumaczenie „Docker: Up & Running” Karl Matthias, Sean Kane, O’Reilly Media) z 2015 roku. Moja motywacja wynikła z fakt że mimo zaliczenia wewnętrznego szkolenia dla developerow w firmie e-point około 2 lat temu moja wiedza bardzo szybko „wyparowała” i konieczne było jej uporządkowanie.
Książka ma charakter kompendium wiedzy i opisuje ogólne założenia konteneryzacji, pracę z obrazami i konkretnymi kontenerami. Jest dobrze przetłumaczona na polski, ma przykłady gotowe do uruchomienia i generalnie bardzo dobrze się czyta.
Czytając książkę zrobiłem sobie szereg notatek które po uporządkowaniu stały się ściągawką z poleceń dockera która przyda mi się w przyszłości, więc może także przydać się innym użytkownikom.
Praca z obrazami:
- Dockerfile – plik konfiguracyjny
- budowanie obrazu:
$ docker build -t example/docker-node-hello:latest . - uruchamianie zbudowanego obrazu:
$ docker run -d -p 8080:8080 example/docker-node-hello:latest - lista obrazów:
$ docker images - kasowanie obrazu
$ docker rmi id_obrazu - sprawdzanie zawartości (składu) obrazu:
$ docker history id_obrazu
Kontenery:
- lista działających kontenerów
$ docker ps -a - zatrzymanie kontenera:
$ docker stop id_kontenera - publiczne rejestry: https://hub.docker.com/explore/
- logowanie do rejestru + wylogowywanie:
$ docker login
$ docker logout - tagowanie własnych obrazów:
$ docker tag example/docker-node-hello:latest mberkan/docker-node-hello:latest - lista obrazów na serwerze:
$ docker images - wypchnięcie obrazu do repozytorium:
$ docker push mberkan/docker-node-hello:latest - pobranie obrazu z repozytorium
$ docker pull mberkan/docker-node-hello:latest - polecenie „run” = „crate” + „start”
- tworzenie kontenera:
$ docker create --name="awesome-service" ubuntu:latest - ustawianie nazwy hosta w czasie startu:
$ docker run --rm -ti --hostname="mojkontener.przyklad.com" ubuntu:latest /bin/bash - ustawienie magazynu danych
$ docker run --rm -ti -v /mnet/session_data:/data ubuntu:latest /bin/bash - mapowanie portów
$ docker run --rm -p 6379:6379 redis:latest - ograniczenia zasobów procesora (2), io (1) i allokacji pamięci (2):
$ docker run --rm -ti progrium/stress --cpu 2 --io 1 --vm 2 --vm-bytes 128M --timeout 120s - kilka prób jeżeli kontener nie chce wstać:
--restart=on-failure:3 - zatrzymywanie kontenera:
$ docker stop id_kontenera - żeby zakillować po 25 sekundach można zrobić
$ docker stop -t 25 id_kontenera - zakillowanie:
$ docker kill id_kontenera - zapauzowanie / wznowienie
$ docker pause id_kontenera
$ docker unpause id_kontenera - „wejście” do działającego kontenera:
$ docker exec -t -i id_kontenera /bin/bash - sprawdzenie zmian w plikach w lokalnym kontenerze względem obrazu:
$ docker diff id_kontenera - usunięcie kontenera:
$ docker rm id_kontenera
Monitoring kontenerów:
- sprawdzanie szczegółów kontenera
$ docker inspect id_kontenera - sprawdzenie używanych wolumenów:
$ docker volume ls
$ docker volume inspect id_wolumenu - przeglądanie logów z kontenera
$ docker logs -f id_kontenera - statystyki kontenera
$ docker stats id_kontenera - lista procesów w kontenerze
$ docker top id_kontenera - wyświetlanie eventów
$ docker events - wyświetlenie intefejsów sieciowych używanych przez kontenery:
$ docker network ls
$ docker network inspect id_interfejsu_sieciowego - inne (nieprzetesowane)
$ docker cp # kopiowanie
$ docker export # zapisywanie systemu plików jako tar
$ docker save # zapisywanie obrazu jako tar
$ docker import # wczytywanie obrazu z tar
Inne polecenia dockera:
- sprawdzanie wersji komponentów:
$ docker version - sprawdzanie wersji serwera:
$ docker info
Do zarządzania zależnościami pomiędzy kontenerami służy docker-compose.
Inne użyteczne polecenia „niedockerowe”
- wyświetlanie drzewa procesów w linuxie:
$ ps axlfww
$ ps -ejH
$ pstree
$ pstree `pidof dockerd` - przeglądanie zdarzeń w procesie:
$ sudo strace -p `pidof dockerd` - lista otwartych plików przez proces:
$ sudo lsof -p `pidof dockerd` - wyświetlenie aktywnych połączeń sieciowych:
$ sudo netstat -an
$ sudo netstat -anp - wypisywanie n-tej (2) kolumny outputu:
$ ps -ef | awk '{print $2}' - wyświetlanie listy interejsów sieciowych
$ ip addr show
Narzędzia do koordynacji:
- Helios od Spotify
- narzędzia do Dockera z Ansible
Narzędzia do planowania przetwarzania rozproszonego:
- Kubernetes od Google
- Apache Mesos
Kolejna książka szerzej opisująca Dockera i przetwarzanie rozproszone: „Docker Cookbook” Sebastian Goasguen (2015) – niestety na razie brak polskiego tłumaczenia.

