Пример развертывание образов Docker

Материал из Wikibebra
Версия от 19:28, 19 мая 2025; Mayorovv (обсуждение | вклад) (Новая страница: «Содержимое файла Docker, известного как Dockerfile, представляет собой текстовый файл, содержащий последовательность инструкций, которые 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: