Пример развертывание образов Docker
Содержимое файла Docker, известного как Dockerfile, представляет собой текстовый файл, содержащий последовательность инструкций, которые Docker использует для создания образа. Эти инструкции описывают, как должен быть собран образ, включая базовую операционную систему, код приложения, необходимые библиотеки и зависимости. Dockerfile служит своего рода «рецептом» для создания Docker-образа, который можно использовать для запуска контейнеров . Инструкции в Dockerfile могут включать установку программного обеспечения, копирование файлов, задание переменных окружения и другие действия, необходимые для настройки среды выполнения приложения.
Для создания Docker-образа, который разворачивает одновременно MySQL и SQLite, можно использовать Docker Compose. Docker Compose позволяет описать и запускать многоконтейнерные Docker-приложения. Ниже приведен пример файла docker-compose.yml
, который настраивает два контейнера: один для MySQL и другой для SQLite.
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql_container
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: example_db
MYSQL_USER: example_user
MYSQL_PASSWORD: example_password
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
networks:
- app-network
sqlite:
image: tianon/true:latest
container_name: sqlite_container
volumes:
- ./sqlite_data:/data
command: tail -f /dev/null
networks:
- app-network
volumes:
mysql_data:
sqlite_data:
networks:
app-network:
driver: bridge
Файл начинается с указания версии формата docker-compose.yml
. В данном случае используется версия 3.8, которая обеспечивает совместимость с современными функциями Docker Compose. Далее идет секция services
, в которой описываются службы (контейнеры), которые будут запущены. Каждая служба представляет собой отдельный контейнер.
Для MySQL создается служба с именем mysql
. Используется официальный образ MySQL версии 8.0. Указывается имя контейнера mysql_container
для удобства идентификации. Переменные окружения настраиваются для MySQL, включая пароль root, имя базы данных, пользователя и пароль. Порт 3306 контейнера пробрасывается на порт 3306 хоста, чтобы обеспечить доступ к базе данных извне. Объем mysql_data
монтируется в директорию /var/lib/mysql
внутри контейнера для сохранения данных базы данных. Контейнер подключается к сети app-network
для взаимодействия с другими контейнерами.
Для SQLite создается служба с именем sqlite
. Используется минимальный образ tianon/true:latest
, который не содержит никакого приложения, но поддерживает работу контейнера. Указывается имя контейнера sqlite_container
. Директория ./sqlite_data
на хосте монтируется в директорию /data
внутри контейнера для хранения SQLite-файлов. Команда tail -f /dev/null
поддерживает работу контейнера, предотвращая его завершение. Контейнер также подключается к сети app-network
.
Далее идут секции volumes
и networks
, где определяются объемы и сети. Объемы mysql_data
и sqlite_data
используются для хранения данных. Сеть app-network
создается с использованием драйвера bridge
, что создает изолированную сеть для контейнеров, позволяя им общаться друг с другом.
Таким образом, каждая строка файла docker-compose.yml
имеет свое конкретное назначение и вкладывает в себя определенные настройки и параметры, необходимые для корректной работы контейнеров.
Приведем еще пример готового файла docker-compose.yml.
version: '3.7'
services:mariadb:
image: mariadb:latest
container_name: mariadb
environment:
MYSQL_ROOT_PASSWORD: P@ss123 # Замените на ваш пароль
MYSQL_DATABASE: mediawiki_db
MYSQL_USER: mediawiki_user
MYSQL_PASSWORD: P@ss123 # Замените на ваш пароль
volumes:
- db_data:/var/lib/mysql
networks:
- mediawiki_network
mediawiki:image: mediawiki:latest
container_name: mediawiki
ports:
- "8080:80"
depends_on:
- mariadb
environment:
MEDIAWIKI_DB_TYPE: mariadb
MEDIAWIKI_DB_HOST: mariadb
MEDIAWIKI_DB_NAME: mediawiki_db
MEDIAWIKI_DB_USER: mediawiki_user
MEDIAWIKI_DB_PASSWORD: P@ss123 # Должно совпадать с паролем, указанным выше
volumes:
- mediawiki_images:/var/www/html/images
networks:
- mediawiki_network
networks:mediawiki_network:
driver: bridge
volumes:db_data:
mediawiki_images: