Docker
Теория
Архитектура docker:
Docker daemon - работающий на фоне сервис, отвечающий за всё взаимодействие с контейнерами.
Images - образы
Containers - уже развернутое из образа и работающее приложение
Docker Registry - репозитории с docker образами, расширениями и плагинами
[[Dockerfile]] - файл с инструкцией для сборки образов
Установка
Соус: https://docs.docker.com/engine/install/debian/
Зависимости:
sudo apt update && sudo apt install ca-certificates curl gnupg -y
GPG keys:
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
Репозиторий:
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 и включение служб:
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
# чтобы не возникало проблем: иногда при первом запуске контейнера могут быть ошибки, поэтому стоит включить службы (или рестартнуть)
Тест:
sudo docker run hello-world
Post-install
Если хочется юзать docker без root, то:
sudo groupadd docker
sudo usermod -aG docker $USER
sudo reboot
Тест:
docker run hello-world
Удаление
Отключение служб:
sudo systemctl disable docker.service
sudo systemctl disable containerd.service
Удаление ранних пакетов, которые могут конфликтовать:
sudo apt purge docker.io docker-doc docker-compose podman-docker containerd runc
Если хочется совсем всё удалить от прежнего docker, то:
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
Краткий экскурс
Скачивание образов:
docker pull busybox
List образов:
docker images
Пример запуска контейнеров:
docker run busybox
docker run busybox echo "test"
docker run -it busybox sh
# -it интерактивно
List запущенных контейнеров:
docker ps
# -a - Show all containers (default shows just running)
Удаление контейнеров:
docker rm <image-ID>
# можно несколько <image-ID>
Удалить/очистить все данные docker
Очистка
Имеются в виду контейнеры, образы, тома (volumes) и сети.
Остановка всех контейнеров:
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
Либо всё это в одну команду:
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
Тест
Эти команды не должны выводить ничего:
docker ps -a
docker images -a
docker volume ls
Эта команда должна показать только сети по умолчанию:
docker network ls
[[Как разрешить трафик из контейнера наружу]]
[[Dockerfile]]