Docker (Докер) для чайников
Вступление от автора руководства — Dmytro Yakovenko 2022/04/23: Дорогие мои читатели, я сам чайник в докерах, но куда деваться нужно изучить предметную область. Начнем помолясь:) Как всегда я стараюсь осветить терминологию, второй шаг установку, а дальше какой-нибудь интересную задачу решим с использованием доккера и какую-нибудь распространённую.
Docker (Докер) — программное обеспечение для автоматизации развёртывания и управления приложениями в средах с поддержкой контейнеризации, контейнеризатор приложений. Docker — это инструмент, позволяющий запустить почти любое приложение со всеми его зависимостями в изолированной среде.
- Docker Image (образы) - собственно, шаблон готового к запуску приложения со всем нужным для работы окружением. Является основой для контейнеров. Команда docker pull используется, чтобы скачать образ.
- Контейнер (Containers) - это уже выполняющийся, запущенный образ (командой docker run), готовый к дальнейшему использованию. Список запущенных контейнеров можно увидеть с помощью команды docker ps.
- Docker Hub (докер хаб) - сервис с реестром образов, где можно брать и загружать свои образы. Грубо говоря, архив всех доступных образов.
- Docker Daemon (демон Докера) - Фоновый сервис, запущенный на хост-машине, который отвечает за создание, запуск и уничтожение Докер-контейнеров. Демон — это процесс, который запущен на операционной системе, с которой взаимодействует клиент.
- Docker Client (клиент Докера) - Утилита командной строки, которая позволяет пользователю взаимодействовать с демоном. Существуют другие формы клиента, например, Kitematic, с графическим интерфейсом.
Отличия Docker от виртуальной машины
Есть два способа упаковки и переноса приложений со всеми его библиотеками между различными системами: использовать виртуальную машину или Docker-контейнер. Если выбрать виртуальную машину:
- это ещё одна полноценная операционная система, в которой живут десятки процессов;
- долгий старт приложения;
- минимальный образ ОС весит более 100 МБ;
- виртуальная машина потребляет много ресурсов, таких как процессор и оперативная память.
Из плюсов — у виртуальной машины удобные способы управления.
Если выбрать Docker-контейнер:
- это будет облегченная операционная система с единственным процессом — вашим приложением;
- быстрый старт приложения;
- маленький размер контейнера.
Из минусов — у Docker сложная система управления контейнерами, которой можно управлять как локально на сервере, так и по протоколу HTTP.
Главное отличие технологий в том, что виртуальная машина виртуализирует аппаратные ресурсы, такие как процессор, память, системы input и output, а docker контейнеры виртуализируют только ОС.
Читайте также
Примеры запуска приложений в Docker
Шаг 1: Установка Docker
Шаг 2: Как пользоваться командами, ключами Docker
С помощью команды docker можно пользоваться различными опциями, а также командами с аргументами. Ниже показан ее синтаксис. Запуск команды docker без ключей выведет весь список возможных ключей запуска.
docker [option] [command] [arguments]
- Можно получить информацию о ключах, просто запустить команду docker. Для получения справки по использованию выбранной команды введите:
docker subcommand --help
- Для получения полной информации по Docker потребуется ввести следующее или для краткой используйте ключ v, как показано ниже:
docker info docker -v Docker version 20.10.14, build a224086
Шаг 2.1: Управление контейнерами
Шаг 2.2: Как выполнить команду внутри контейнер exec (3 режима)
1. Базовый режим exec
2. Демон (фоновый режим)
3. Интерактивный режим
Шаг 2.3: Удаление образов, контейнеров и томов Docker
Шаг 2.4: Просмотр логов контейнера (docker logs)
Шаг 2.4.1: Docker logs, писать/читать в console output (STDOUT)
Шаг 2.5: Проброс портов или маппинг портов
FAQ: в чем разница между Docker Run, Start и Create в Docker
Шаг 3: Docker Hub - где скачать и как работать с образами Docker
Изначально Docker берет образы в хабах Docker Hub (докер хаб). Docker Hub является реестром образов, поддерживаемых разработчиком. Любой имеет возможность создавать и загружать собственные образы. Для большей части дистрибутивов и программ уже имеются необходимые образы в Docker Hub. Для подключения к Docker Hub используйте команду:
docker login
Докер хранит файлы (контейнеры) в виде папок и файлов в директории /var/lib/docker/containers.
- Представленные в хабе образы можно найти при помощи команд docker и search. К примеру, найти образ MariaDB можно следующим образом:
docker search mariadb
Строчка OK в столбце OFFICIAL говорит о том, что образ создан и его поддержка осуществляется компанией, ответственной за этот проект.
- Выбрав требуемый образ, например PhpMyAdmin, его можно скачать на компьютер (свое локальное хранилище), используя подкоманду pull.
docker pull phpmyadmin
- Чтобы посмотреть, какие образы были загружены на компьютер, используется команда:
docker images
- Запуск контейнера docker run
docker run hello-world
Добавление опций -i (видеть, что происходит в контейнере) и -t (взаимодействовать, то есть пересылать в контейнер наши команды) предоставляет доступ в интерактивном режиме к командному процессору.
docker run -it ubuntu
- Чтобы запустить остановленный контейнер, необходимо ввести docker start и далее указать идентификатор или имя контейнера. Так выглядит запуск контейнера 98ed79500b2d:
docker start 98ed79500b2d
- Чтобы выключить активный контейнер, используется команда docker stop с указанием его идентификатора или имени.
- Для перезапуска контейнер, не отключая его используйте ключ restart.
docker restart имя/id контейнера
- Удалить можно только остановленный контейнер. Для удаления используйте rm, указав имя или идентификатор контейнера:
docker container rm имя_контейнера или docker rm [OPTIONS] CONTAINER [CONTAINER...]
Шаг 4: Как сохранить локально изменения в новый образ Docker
Во время запуска контейнера из существующего образа у пользователя есть возможность создавать или удалять файлы, аналогично работе на виртуальной машине. При этом изменения будут распространяться только в определенном контейнере. Доступна и возможность запуска с последующей остановкой контейнера, но после его удаления с помощью docker rm будут утеряны внесенные изменения.
Соответственно, следует ознакомиться со способом сохранения текущего контейнера как нового образа.
Сохраните результаты в текущем образе командой:
docker commit -m "Что вы сделали с образом" -a "Имя автора" container_id repository/new_image_name
Добавление опции -m дает возможность указать сообщение подтверждения. Это позволит будущим пользователям образа понять, что именно было изменено. Что касается параметра -a — с его помощью можно указать, кто его создатель. container_id является тем же идентификатором, который был использован ранее, во время запуска интерактивной сессии в Docker.
Если вы не занимались до этого созданием новых репозиториев в Docker Hub, имя создаваемого репозитория по умолчанию будет названо именем вашего пользователя в Docker Hub.
Пример: Docker MySQL / MariaDB установка и настройка
Рассмотрим как правильно установить и настроить СУБД MySQL MariaDB в виде приложения Docker, при этом все постоянные данные будут храниться в файловой системе хоста.
Зачем использовать Docker для установки MariaDB? Использование Docker-контейнера позволяет не только обеспечивает чистое развертывание, не зависящее от программного обеспечения сервера, но и позволяет поддерживать несколько СУБД MySQL разных версий и различного назначения в рамках одной операционной системы.
При установке MariaDB будет использован внешний конфигурационный файл и внешний каталог хранения данных для того, чтобы при перезапуске контейнера вся информация оставалась в сохранности. Сначала создадим необходимые каталоги, в которых будут храниться настройки, журналы и базы данных MySQL:
mkdir -p /opt/mariadb/{data,etc,logs}
Создадим конфигурационный файл /opt/mariadb/etc/config.cnf, который будет уточнять настройки, применяемые контейнером по умолчанию. В этом файле вы можете переопределять переменные MySQL для задания нужного поведения. Мы определим 3 переменных для демонстрации возможностей:
[mysqld] log_error=/var/lib/mysql/logs/errorlog slow_query_log=on slow_query_log_file=/var/lib/mysql/logs/slowlog
Теперь можно запустить сам сервер MySQL:
sudo docker run -d --restart=always --name mariadb_1 \ -v /opt/mariadb/data:/var/lib/mysql \ -v /opt/mariadb/etc:/etc/mysql/conf.d \ -v /opt/mariadb/logs:/var/lib/mysql/logs \ -e MYSQL_ROOT_PASSWORD=secret \ -p 127.0.0.1:3306:3306 mariadb:10.3
Где ключи
- name задает собственное (удобное нам) имя для контейнера
- -d, –detach указывает запуск в фоновом режиме
- -v, –volume list несколько ключей v указывают монтирование директории из хостовой машины
- -e, –env list Обратите внимание на пароль пользователя root, который задается с помощью переменной окружения MYSQL_ROOT_PASSWORD. Этот пароль будет записан в системную БД mysql, если вы после остановите контейнер и поменяете его, это не окажет влияние на пароль в БД.
- -p, –publish list публикация портов контейнера на хосте
Для проверки работоспособности сервера используйте консольный клиент MySQL:
sudo docker run -it --rm --link mariadb_1:mysql mariadb:10.3 \ mysql -hmysql -uroot -psecret
Выгрузка данных БД для резервных копий в самом простом случае может выполняться стандартным
sudo docker run -it --rm --link mariadb_1:mysql mariadb:10.3 \ mysqldump --all-databases -hmysql -uroot -psecret > all-databases.sql
Всё, сервер MariaDB развернут, при этом файлы располагаются в каталогах хоста, что позволяет изменять настройки сервера, получать доступ к записям журналов и сами данным баз данных.
Пример: Redis
Установка хранилища Redis в Докер одной командой:
docker run --rm -d -p 6379:6379 --name redis -v redis_vol:/var/lib/redis/ redis redis-server --appendonly yes
Проверим что контейнер с Rdis работает и данные сохраняются в Docker Volumes:
docker exec -it redis redis-cli 127.0.0.1:6379> SET test "Hi" OK 127.0.0.1:6379> GET test "Hi" 127.0.0.1:6379> exit
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах