Какие настройки docker-compose необходимо удалить для производства?

Я пытаюсь создать отдельный docker-compose для производства, в настоящее время у меня есть только один compose-файл, который я использую для локальной разработки, но чтобы сделать его для производства, я не знаю, какие атрибуты удалить в сторону volumes а также ports

мой текущий составной файл dev выглядит так:

version: '3'

services:
    db:
      container_name: mariadb
      build:
        context: ./mariadb
      volumes:
          - ./mariadb/scripts:/docker-entrypoint-initdb.d
          - ./.data/db:/var/lib/mysql
          - ./logs/mariadb:/var/log/mysql
      environment:
          MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
          MYSQL_DATABASE: ${MYSQL_DATABASE}
          MYSQL_USER: ${MYSQL_USER}
          MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      ports:
          - '${MYSQL_PORT:-3306}:3306'
      command:
          'mysqld --innodb-flush-method=fsync'
      networks:
        - default
      restart: always
    php-fpm:
      container_name: php
      build:
          context: ./php7-fpm
          args:
              TIMEZONE: ${TIMEZONE}
      volumes:
          - ${APP_PATH}:/var/www/app
          - ./php7-fpm/config/php.ini:/usr/local/etc/php/php.ini
      environment:
          DB_HOST: db
          DB_PORT: 3306
          DB_DATABASE: ${MYSQL_DATABASE}
          DB_USERNAME: ${MYSQL_USER}
          DB_PASSWORD: ${MYSQL_PASSWORD}
      depends_on:
        - db
      networks:
        - default
      restart: always
    nginx:
      container_name: nginx
      build:
        context: ./nginx
        args:
          - 'php-fpm'
          - '9000'
      volumes:
        - ${APP_PATH}:/var/www/app
        - ./logs/nginx/:/var/log/nginx
      ports:
        - "80:80"
        - "443:443"
      depends_on:
        - php-fpm
      networks:
        - default
      restart: always
networks:
  default:
    driver: bridge

2 ответа

Точный список будет зависеть от требований вашей среды / рабочей группы, но это то, что кажется полезным помимо портов / существующих томов:

сети

Сеть по умолчанию может не работать в вашей среде. Например, ваша ops команда может решить разместить nginx / php-fpm / mariadb в разных сетях, как в следующем примере ( https://docs.docker.com/compose/networking/) или даже использовать уже существующую сеть

Mysql конфиги

Они обычно находятся в отдельном каталоге, т.е. /etc/my.cnf а также /etc/my.cnf.d, Эти конфиги могут быть разными в prod / dev. Не вижу его в ваших путях томов

Php-fpm7

Не работал с php-fpm7, но в php-fpm5 у этого также была другая папка с файлами конфигурации (/etc/php-fpm.conf а также /etc/php-fpm.d), что отсутствует в ваших томах. Эти файлы также могут отличаться, как только вы справитесь даже с умеренной нагрузкой (вам нужно будет настроить количество рабочих / тайм-аутов и т. Д.)

Nginx

То же, что и для php-fpm, настройки ssl / имена хостов / конфигурации доменов могут отличаться

логирование

Подумайте о том, какой драйвер регистрации может удовлетворить ваши потребности. Отсюда:

Docker включает несколько механизмов ведения журналов, которые помогут вам получать информацию от работающих контейнеров и сервисов. Эти механизмы называются драйверами регистрации.

Вы можете легко настроить его в docker-compose, вот пример fluentd Контейнер для регистрации:

version: "3"

services:
  randolog:
    image: golang
    command: go run /usr/src/randolog/main.go
    volumes:
      - ./randolog/:/usr/src/randolog/
    logging:
      driver: fluentd
      options:
        fluentd-address: "localhost:24224"
        tag: "docker.{{.ID}}"

  fluentd:
    build:
      context: ./fluentd/
    ports:
      - "24224:24224"
      - "24224:24224/udp"

Вы должны следовать использованию Compose в производственной документации:

Вам, вероятно, нужно внести изменения в конфигурацию вашего приложения, чтобы подготовить его к работе. Эти изменения могут включать в себя:

  • Удаление любых привязок тома для кода приложения, чтобы код оставался внутри контейнера и не мог быть изменен извне
  • Привязка к разным портам на хосте
  • Установка переменных среды по-разному, например, когда вам нужно уменьшить детализацию ведения журнала или включить отправку электронной почты)
  • Указание политики перезапуска, например restart: always чтобы избежать простоев

  • Добавление дополнительных сервисов, таких как агрегатор журналов

Другие вопросы по тегам