Что такое Docker и зачем он нужен? Думаю можно найти огромное количество статей на эту тему. Причин использовать Docker можно условно обозначить несколько:
Существуем масса сервисов (микросервисов) на разворачивание которых может потребоваться много времени. А у Docker есть огромная библиотека готовых контейнеров (Docker Hub);
Вы подготовили некий продукт (проект) который требует определенного взаимодействия внутренних служб и сервисов внутри проекта и каждое разворачивание требует усилий. Docker позволит развернуть проект из готового шаблона контейнера;
Вы не хотите зависеть от настроек провайдера или поставщика внешних услуг при реализации вашего проекта и внутреннего взаимодействия. Docker позволит достаточно легко переехать на другую площадку поставщика услуг.
Можно приводить еще множество примеров, но перейдем к Docker.
Установка Docker на Debian
Обновим apt индекс:
apt-get update
Установим пакеты, чтобы apt мог использовать репозиторий поверх HTTPS:
apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
Добавим официальный GPG ключ Docker:
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
Еще раз обновим индексы apt:
apt-get update
Установим Docker:
apt-get install docker-ce docker-ce-cli containerd.io
Проверим работу Docker Engine:
docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
Наш Docker хост готов.
Подробнее — https://docs.docker.com/install/linux/docker-ce/debian
Пользователя группы Docker
Добавить текущего пользователя:
usermod -aG docker ${USER}
Чтобы активировать это изменение, выйдите из системы и войдите снова.
su - ${USER}
будет запрошен пароль вашего пользователя.
Убедиться, что пользователь добавлен в группу:
id -nG
Чтобы добавить в группу docker пользователя, который не является текущим:
usermod -aG docker username
Минимальный набор команд для работы с контейнерами
Поиск готовых образов (ubuntu):
docker search ubuntu
Запуск контейнера Docker
docker run -it ubuntu
Запуск контейнера Docker и запуска bash
docker run -it ubuntu bash
Чтобы выйти из контейнера:
exit
Управление контейнерами Docker:
список активных контейнеров:
docker ps
список всех контейнеров:
docker ps -a
Запуск контейнера по имени или ID:
docker start practical_khorana
docker start af362c878f00
Остановка контейнера по имени или ID:
docker stop practical_khorana
docker stop af362c878f00
Информация о контейнере:
docker inspect {ContainerName}
Задание имени контейнера:
docker stop practical_khorana
docker run --name Meno -it ubuntu bash
Список измененных файлов в контейнере:
docker diff {ContainerName}
Логи событий в контейнере:
docker logs {ContainerName}
Удаление контейнера:
docker rm {ContainerName}
Удаление остановленных:
docker ps -aq -f status=exited
docker rm -v $(docker ps -aq -f status=exited)
Список существующих образов полученных на хост:
docker images
Удаление существующих образов полученных на хост:
docker rmi name
docker rmi $(docker images -q) --force
Остановка и удаление всех контейнеров:
docker stop $(docker ps -aq) && docker rm $(docker ps -aq)
Сети Docker
Список сетей:
docker network ls
Получение информации о сети:
docker network inspect NETWORK_ID
Подключение работающего контейнера к сети:
docker network connect NETWORK_ID NAME
Подключение контейнера к сети при его запуске:
docker run -it -d --network=NETWORK_ID NAME
Отключение контейнера от сети:
docker network disconnect NETWORK_ID NAME