Przygoda z Dockerem

Lista przydatnych komend i instrukcji, które warto mieć pod ręką pracując z dockerem.

PRZYDATNE KOMENDY

• OGÓLNE

# docker version informacje o wersji
# docker info podsumowanie pracy dockera

• WYKONYWANIE

# docker exec -i -t CONTAINER_NAME /bin/bash wykonanie komendy (w przykładzie „/bin/bash”) w uruchomionym kontenerze o nazwie CONTAINER_NAME

• PROCESY

# docker ps -a lista kontenerów (procesów aktualnie działających)
# docker rm CONTAINER_NAME usuwanie kontenera o nazwie CONTAINER_NAME (wymagane przed usunięciem obrazu)

• OBRAZY

# docker images lista obrazów
# docker rmi IMAGE_ID usuwanie obrazu z listy o ID IMAGE_ID

• COMPOSER – komendy (pracując w katalogu, w którym znajduje się plik „docker-compose.yml”)

# docker-compose up -d uruchamia „docker-compose.yml” w tle (jako daemon)
# docker-compose stop zatrzymuje kontenery
# docker-compose ps lista kontenerów (procesów aktualnie działających)

• REANIMACJA – zdarza się, że coś się poważnie sypnie

Opis zdarzenia, które miało miejsce po aktualizacji i restarcie serwera. Docker odmawia uruchomienia obrazów.:
Recreating docker_mysql-srv_1 ... error

ERROR: for docker_mysql-srv_1 sandbox af827f11c0(…)e45ba073 not found

ERROR: for mysql-srv sandbox af827f11c0(…)e45ba073 not found
ERROR: Encountered errors while bringing up the project.

Komendy które można wykonać:
# docker rm -f $(docker ps -aq)
# docker network rm $(docker network ls -q) – problem z wykonaniem
# docker run --rm -v /var/lib/docker/network/files:/network busybox rm /network/local-kv.db – problem z wykonaniem

Próba ponownego uruchomienia i kolejny błąd:
or: desc = "transport: Error while dialing dial unix /run/containerd/containerd.sock: connect: permission denied": unavailable

Ostatecznie wykonanie poniższych komend oraz restart serwera i wszystko wraca do normy.
# sudo apt-get purge docker-ce
# sudo apt autoremove
# sudo rm -rf /var/lib/docker
# sudo truncate -s 0 /var/log/syslog

• SERWIS – uruchamianie dockera z własną konfiguracją

W pierwszej kolejności należy utworzyć odpowiedni plik z konfiguracją serwisu gdzie „docker-compose-jacek” to nazwa serwisu a „WorkingDirectory=/home/jacek/docker” to katalog roboczy, w który powinien znajdować się plik „docker-compose.yml”. Te opcje trzeba ustawić pod siebie. Lokalizacja pliku to /etc/systemd/system/docker-compose-jacek.service a jego zawartość poniżej.

[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/home/jacek/docker
ExecStart=/usr/bin/docker-compose up -d
ExecStop=/usr/bin/docker-compose down
TimeoutStartSec=0
[Install]
WantedBy=multi-user.target

Komenda aktywująca serwis w systemie:
systemctl enable docker-compose-jacek.

• Konfiguracja sieciowa dostępu do serwisów

Szybka konfiguracja iptables opisana w artykule DOCKER I IPTABLES NA UBUNTU.

• Własne repozytorium obrazów

DOCKER REGISTRY – przydane gdy Docker Hub już nie wystarcza.