Skip to content

Docker

Теория

Архитектура docker:

Docker daemon - работающий на фоне сервис, отвечающий за всё взаимодействие с контейнерами.
Images - образы
Containers - уже развернутое из образа и работающее приложение
Docker Registry - репозитории с docker образами, расширениями и плагинами
[[Dockerfile]] - файл с инструкцией для сборки образов


Установка

Соус: https://docs.docker.com/engine/install/debian/

Зависимости:

Bash
sudo apt update && sudo apt install ca-certificates curl gnupg -y 

GPG keys:

Bash
sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg

Репозиторий:

Bash
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Установка docker и включение служб:

Bash
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo systemctl start docker
sudo systemctl restart docker
systemctl status docker
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
# чтобы не возникало проблем: иногда при первом запуске контейнера могут быть ошибки, поэтому стоит включить службы (или рестартнуть)

Тест:

Bash
sudo docker run hello-world

Post-install

Если хочется юзать docker без root, то:

Bash
sudo groupadd docker
sudo usermod -aG docker $USER

sudo reboot

Тест:

Bash
docker run hello-world


Удаление

Отключение служб:

Bash
sudo systemctl disable docker.service
sudo systemctl disable containerd.service

Удаление ранних пакетов, которые могут конфликтовать:

Bash
sudo apt purge docker.io docker-doc docker-compose podman-docker containerd runc

Если хочется совсем всё удалить от прежнего docker, то:
Bash
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd


Краткий экскурс

Скачивание образов:

Bash
docker pull busybox

List образов:

Bash
docker images

Пример запуска контейнеров:

Bash
docker run busybox
docker run busybox echo "test"
docker run -it busybox sh
# -it интерактивно

List запущенных контейнеров:

Bash
docker ps
# -a - Show all containers (default shows just running)

Удаление контейнеров:

Bash
docker rm <image-ID>
# можно несколько <image-ID>


Удалить/очистить все данные docker

Очистка

Имеются в виду контейнеры, образы, тома (volumes) и сети.

Остановка всех контейнеров:

Bash
docker stop $(docker ps -qa)

Удаление всех контейнеров:

Bash
docker rm $(docker ps -qa)

Удаление всех образов:

Bash
docker rmi -f $(docker images -qa)

Удаление всех томов:

Bash
docker volume rm $(docker volume ls -q)

Удаление всех сетей:

Bash
docker network rm $(docker network ls -q)

Удалить неиспользуемые образы:

Bash
docker system prune

Либо всё это в одну команду:

Bash
docker stop $(docker ps -qa) && docker rm $(docker ps -qa) && docker rmi -f $(docker images -qa) && docker volume rm $(docker volume ls -q) && docker network rm $(docker network ls -q) && docker system prune

Тест

Эти команды не должны выводить ничего:

Bash
docker ps -a
docker images -a 
docker volume ls

Эта команда должна показать только сети по умолчанию:

Bash
docker network ls


[[Как разрешить трафик из контейнера наружу]]
[[Dockerfile]]

docker #container #tool