контейнеры Docker


Экосистема Docker

Контейнеризация - это процесс развёртывания приложений в изолированных средах-контейнерах (докерах). При этом достигается полная изоляция программных компонентов и их зависимостей от хостовой операционной системы, как это происходит в обычных виртуальных машинах. Но в отличии от виртуальных машин контейнеры занимают намного меньше места и работают быстрее. Также намного быстрее создать контейнер и развернуть в нём программное обеспечение, чем возиться с виртуальной машиной. Контейнеры Docker можно запускать в любых количествах, при этом обеспечить их взаимодействие.
Образы docker можно создавать как собственные, так и загружать их из Docker Hub - публичного реестра. Он содержит образы которые можно скачать и использовать для создания контейнеров. Чтобы создать контейнер и взаимодействовать с ним существуют команды Linux. Самые популярные из них приводятся ниже:

apt update # обновляем существующий перечень пакетов
apt-get install apt*
apt-get install software-properties-common
apt-get install vsftpd
apt-get install net-tools
apt-get install ssh
apt-get install iptables
apt-get install nano
apt-get install ifconfig
apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common #устанавливаем необходимые пакеты, которые позволяют apt использовать пакеты по HTTPS

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # добавляем в свою систему ключ GPG официального репозитория Docker

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" # Добавляем репозиторий Docker в список источников пакетов APT (если эта команда не выполняется, надо зайти nano /etc/apt/sources.list и сначала удалить последнюю (или несколько последних)строк, и вставить в самый конец: deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable

apt update # обновим базу данных пакетов информацией о пакетах Docker из вновь добавленного репозитория

apt-get install docker-ce docker-ce-cli containerd.io # Установите последнюю версию Docker Engine - Community и containerd

Теперь Docker установлен, демон запущен, и процесс будет запускаться при загрузке системы. Убедимся, что процесс запущен:

systemctl status docker # сервис должен быть запущен и активен

При установке Docker мы получаем не только сервис (демон) Docker, но и утилиту командной строки docker или клиент Docker.

sudo docker search lemp # найти LAMP стек образы в Докер

docker pull nickistre/ubuntu-lamp # скачаете Докер образ, все загруженные образы будут сохранены локально в файле /var/lib/docker/

docker run -it --restart=always -p 192.168.0.100:8080:80 ubuntu-nginx # (создание нового контейнера. Открывается браузером на 8080 порту)

команда 'docker run' находит образ, создает контейнер поверх него и запускает контейнер. Это сделано для удобства и скрывает детали двух команд. 'docker run' объединяет две команды, которые могут использоваться и независимо.

docker search ubuntu # поиска образа в Docker Hub

docker pull ubuntu # загрузить официальный образ ubuntu

docker run -it ubuntu # запустим контейнер с помощью последней версии образа Ubuntu. Комбинация параметров -i и -t обеспечивает интерактивный доступ к командному процессору контейнера

docker exec -it (container-id) bash # Войдите в Docker-контейнер по имени или ID контейнера и запустите интерактивную оболочку bash

docker ps # выводит список запущенных контейнеров на вашей хост-машине

docker ps -a # список всех контейнеров

docker container ls -a -s # Ключ -s — это сокращение для --size. Он позволяет вывести размеры контейнеров

docker image ls # вывод списка образов

docker images # выводит список образов верхнего уровня (top-level images)

docker images -a # выводит все образы на хост-машине. Это фактически список всех слоев для чтения в системе.

docker history # Если вы хотите увидеть все слои одного образа

docker stop (container-id) # мягко останавливает все процессы в пространстве процессов контейнера. В результате мы получаем не запущенный контейнер.

docker kill (container-id) # немедленно завершает все процессы в текущем контейнере.

docker container kill $(docker ps -q) # позволяет быстро остановить все работающие контейнеры

docker pause (container-id) # возможность cgroups для заморозки запущенного пространства процессов.

docker rm (container-id) # удаляет слой для записи, который определяет контейнер на хост-системе. Должна быть запущена на остановленном контейнере.

docker container rm # удаление остановленного контейнера

docker rmi (image-id) # Удаляет образ верхнего уровня

docker rmi -f (image-id) # для удаления промежуточных слоев

docker commit (container-id) # Команда 'docker commit' берет верхний уровень контейнера, тот, что для записи и превращает его в слой для чтения. Это фактически превращает контейнер (вне зависимости от того, запущен ли он) в неизменяемый образ.

docker commit -m "added apache2" -a "alex" 0e9065b8875b alex/ubuntu-zm-apache2 # Параметр -m позволяет задать сообщение подтверждения, чтобы облегчить вам и другим пользователям образа понимание того, какие изменения были внесены, а параметр -a позволяет указать автора.

docker container create # создание контейнера из образа

docker start (container-id) # запуск существующего контейнера.

docker container run # создание контейнера и его запуск.

docker build # 1)запускает контейнер (create и start)

2) изменяет слой для записи

3) делает commit

На каждой итерации создается новый слой. При исполнении 'docker build' может создаваться множество слоев.

docker image build # сборка образа

docker container # вывод списка работающих контейнеров.

docker container logs # вывод логов

docker pull # получение образа из репозитория

docker exec (running-container-id) # 'docker exec' применяется к запущенному контейнеру, запускает новый процесс внутри пространства процессов контейнера.

docker inspect (container-id) | (image-id) # Команда 'docker inspect' получает метаданные верхнего слоя контейнера или образа

docker container inspect (container-id) # выводит подробные сведения о контейнере

docker inspect (image) # вывод подробной информации об образе, в том числе — сведений о слоях

docker save (image-id) # создает один файл, который может быть использован для импорта образа на другую хост-систему. В отличие от команды 'export', она сохраняет все слои и их метаданные. Может быть применена только к образам

docker export (container-id) # создает tar архив с содержимым файлов контейнера, в результате получается папка, пригодная для использования вне docker. Команда убирает слои и их метаданные. Может быть применена только для контейнеров.

docker history (image-id) # принимает (image-id) и рекурсивно выводит список всех слоев-родителей образа (которые тоже могут быть образами)

docker version # вывод сведений о версиях клиента и сервера Docker

docker login # вход в реестр Docker

docker system prune — удаление неиспользуемых контейнеров, сетей и образов, которым не назначено имя и тег

docker network ls # какие сети имеются

docker network create bridge-network # создадим сеть

docker network connect YOUR_NETWORK YOUR_CONTAINER # законектить контейнер к сети

docker network disconnect YOUR_NETWORK YOUR_CONTAINER # отключение от сети

docker network rm YOUR_NETWORK # удаления сети

docker network prune # удалить все созданные сети которые не используются

docker info # получить инфу

docker cp 0e9065b8875b:/home/alex/. /var/www/html # копировать из докера папку alex

docker cp /var/www/html/. 0e9065b8875b:/home/alex # копировать в докер папку html

systemctl restart docker

Если у вас возникли трудности с настройкой можете обратиться к нампо этой ссылке

мои контактные данные здесь или здесь