Książka "Docker. Praktyczne rozwiązania"

Recenzja książki „Docker. Praktyczne zastosowania” + ściągawka z poleceń

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:

Narzędzia do planowania przetwarzania rozproszonego:

Kolejna książka szerzej opisująca Dockera i przetwarzanie rozproszone: „Docker Cookbook” Sebastian Goasguen (2015) – niestety na razie brak polskiego tłumaczenia.

O autorze

Marek Berkan Marek Berkan: programista, entuzjasta tworzenia oprogramowania, zarządzania zespołami technicznymi. Prywatnie motocyklista, kolarz MTB, biegacz, żeglarz, rekreacyjny wspinacz, zamiłowany turysta. Witryny: , , .

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *