Клиент Docker:
Содержит интерфейсы взаимодействия с демоном Docker
Образ Docker:
Файл шаблонов, который можно перемещать и передавать
В отличие от виртуальных машин, можно хранить в системах управления версиями
docker diff - покажет различия между двумя указанными образами
Каждый образ состоит из нескольких уровней \ слоев
Слои могут совместно использоваться несколькими образами
Контейнер Docker:
Автономная виртуальная система
Содержит выполняющийся процесс, зависимости, адресное пространство процесса, сетевые порты
Dockerfile:
Текстовый файл, содержащий команды сборки образа
Реестр Docker:
Репозиторий для хранения и распространения образов
Docker Compose (компоновщик):
С помощью компоновщика возможно запустить приложение в нескольких контейнерах
Возможно определить окружение приложения в общем файле Dockerfile
Определить список служб в файле docker-compose.yml
После Docker автоматически будет создавать и запускать контейнеры, определенные в этих файлах
Docker Machine:
Дает возможность развертывать узлы Docker на локальной машине или внутри облака (Amazon, Azure)
Управляет узлами посредством команд start, stop... и т.п.
Docker Swarm:
Механизм кластеризации, позволяет объединить несколько узлов Docker в один хост Docker
Устанавливается с помощью Docker Machine или вручную (образ Swarm)
Запуск образа:
docker run [options] image_name(image_id):tag [command, args]
Пример:
docker run -it mysql:latest bash
docker run -d --name my_db_server -e MYSQL_ROOT_PASSWORD=my_sec_pass -p 3306:3306 mysql:latest
Где частые опции:
i - интерактивный режим
t - псевдотерминал tty
d - запуск в фоновом режиме
p - проброс указанных портов
e - ключ определения переменной окружения пароля доступа к базе данных
Создадим файлы для логов nginx:
touch /data/web/logs/nginx-error.log
touch /data/web/logs/nginx-access.log
Создадим тестовый файл php:
docker-compose.yml:
Собираем:
cd /data/web/
docker-compose up -d
!!!Если в хостовой системе ранее был mysql!!! Если не стартанул mysql, возможно ранее в каталоге иже была инициализация:
rm -rf /var/lib/mysql/*
docker start web_mysql_1
Если все 3 контейнера стартанули, идем дальше
Проверяем:
curl http://127.0.0.1:80/index.php
Подключимся и создадим тестовые данные в MySQL:
docker exec -it web_mysql_1 bash
Пароль вводим указанный в файле docker-compose.yml:
mysql -u root -p
Выбираем базу данных из файла docker-compose.yml:
Приводим файл к такому виду:
Сетевая подсистема:
Сетевая подсистема Docker является подключаемой с использованием драйверов.
Несколько драйверов существуют по умолчанию и предоставляют основные сетевые функции:
bridge: сетевой драйвер по умолчанию.
Если вы не указываете драйвер, это тип сети, которую вы создаете.
Мостовые сети обычно используются, когда ваши приложения работают в автономных контейнерах, которые должны взаимодействовать.
host: для автономных контейнеров, удаляет сетевую изоляцию между контейнером и Docker-хостом.
Хост доступен только для служб swarm в Docker версии 17.06 и выше.
overlay: overlay сети соединяют несколько демонов Docker вместе и позволяют сервисам Swarm связываться друг с другом.
Вы также можете использовать overlay сети для облегчения связи между сервисом Swarm и автономным контейнером.
Или между двумя автономными контейнерами на разных демонах Docker.
Эта стратегия устраняет необходимость выполнять маршрутизацию на уровне ОС между этими контейнерами.
macvlan: сети Macvlan позволяют назначать MAC-адрес контейнеру, делая его физическим устройством в вашей сети.
Демон Docker направляет трафик в контейнеры по их MAC-адресам.
Использование драйвера macvlan иногда является лучшим выбором при работе с устаревшими приложениями.
Приложениям, которые ожидают прямого подключения к физической сети, а не маршрутизации через сетевой стек хоста Docker.
none: для этого контейнера отключит все сети.
Обычно используется в сочетании с пользовательским сетевым драйвером. Ни один не доступен для swarm услуг.
Сетевые плагины: вы можете устанавливать и использовать сторонние сетевые плагины с Docker.
Эти плагины доступны в Docker Hub или у сторонних поставщиков.
Обзор сетевого драйвера
bridge подходят, когда вам нужно несколько контейнеров для связи на одном хосте Docker.
host подходят, когда сетевой стек не должен быть изолирован от хоста Docker, но вы хотите, чтобы другие аспекты контейнера были изолированы.
overlay подходят, когда вам нужны контейнеры, работающие на разных хостах Docker, или нескольких приложений, работающих вместе с сервисами Swarm.
macvlan подходят, когда вам нужны контейнеры, чтобы они выглядели как физические хосты в вашей сети, каждый из которых имеет уникальный mac адрес.
Сторонние сетевые плагины позволяют интегрировать Docker со специализированными сетевыми стеками.
Вывести список сетей:
docker network ls
Где:
NETWORK ID - Уникальный идентификатор сети.
NAME - Имя сети.
DRIVER - Драйвер сети.
SCOPE - Область использования.
Создание сетей(справка):
docker network create --help
Показать, статус службы, количество экземпляров:
docker service ls
Проверяем наличие файла в контейнере:
docker exec -it 0ee33b25777e cat /nginx_vhosts
Положить конфиг в каталог nginx с помощью src и target:
docker service update --config-add src=nginx_vhosts,target="/etc/nginx/conf.d/docker_swarm.local.conf" NginxService
Увеличивайть и уменьшать количество экземпляров сервиса можно так, соответственно и воркеров понабится более:
docker service scale NginxService=3
docker service scale NginxService=4
docker service scale NginxService=3
docker service scale NginxService=2
Вы будете наблюдать, как они появляются и исчезают в docker ps
Удалить сервис по id:
docker service rm <ServiceId>