Docker Настройка для различных сред разработки - PullRequest
0 голосов
/ 04 марта 2020

Я искал ответы на следующий список вопросов. Я начал исследовать и PO C на docker на прошлой неделе, поэтому я не знаю ни одной из лучших практик или рабочих процессов. Но здесь идут мои варианты использования и кое-что, над чем я работал.

Я добавлю свои запросы в blockquote, чтобы было легче ориентироваться.

У меня и моей команды в настоящее время есть настройка (без Docker) для Development Фаза, UAT Фаза и Production Фаза.

Я использовал docker-compose, чтобы настроить окружение так, как мне нужно.

У меня есть структура папок, подобная этой:

deploy
  |-----.env
  |-----docker-compose-dev.yaml
  |-----docker-compose-prod.yaml
  |-----docker-compose-uat.yaml
src
  |-----Dockerfile
  1. Полагаю, это правильный путь к go. наличие docker-compose файлов для каждой фазы / среды. Я прав?

  2. Следует ли игнорировать Dockerfile в .gitignore и .dockerignore?

Вот мой шаблон для docker-compose-dev.yaml

#filename - docker-compose-dev.yaml
version: "3"
services:
  dev:
    container_name: ${DEV_DOCKER_CONTAINER_NAME}
    restart: ${DEV_DOCKER_RESTART_SERVER}
    build:
      context: ${DEV_DOCKER_BUILD_FOLDER}
      args:
        PORT: ${DEV_DOCKER_PORT}
    ports:
      - "${DEV_DOCKER_PORT}:${DEV_NODE_SERVER_PORT}"
    environment:
      - MYSQL_HOST=${DEV_MYSQL_HOST}
      - MYSQL_USERNAME=${DEV_MYSQL_USERNAME}
      - MYSQL_PASSWORD=${DEV_MYSQL_PASSWORD}
      - MYSQL_DBNAME=${DEV_MYSQL_DBNAME}
      - MYSQL_PORT=${DEV_MYSQL_PORT}
      - PORT=${DEV_NODE_SERVER_PORT}

#filename - docker-compose-prod.yaml
version: "3"
services:
  prod:
    container_name: ${PROD_DOCKER_CONTAINER_NAME}
    restart: ${PROD_DOCKER_RESTART_SERVER}
    build:
      context: ${PROD_DOCKER_BUILD_FOLDER}
      args:
        PORT: ${PROD_DOCKER_PORT}
    ports:
      - "${PROD_DOCKER_PORT}:${PROD_NODE_SERVER_PORT}"
    environment:
      - MYSQL_HOST=${PROD_MYSQL_HOST}
      - MYSQL_USERNAME=${PROD_MYSQL_USERNAME}
      - MYSQL_PASSWORD=${PROD_MYSQL_PASSWORD}
      - MYSQL_DBNAME=${PROD_MYSQL_DBNAME}
      - MYSQL_PORT=${PROD_MYSQL_PORT}
      - PORT=${PROD_NODE_SERVER_PORT}

Я пытался сделать все настраиваемым, чтобы все контролировалось файлом .env.

Моя первая мысль была создать .env.prod, .env.uat, .env.dev. но я не уверен, как заставить docker-compose использовать пользовательский файл среды. Я cannot use, что TAG env_file, так как у меня есть переменные для самого файла docker-compose.

Как заставить пользовательский .env.<> использоваться в docker -compose?

Сначала я подумал, что если код одинаков для фаз I должно иметь 1 изображение и несколько контейнеров container1-uat, container2-dev. Но тогда, я думаю, не имеет смысла иметь одно изображение для 3 фаз. Смущенный ...

Я пытался использовать docker-compose -f docker-compose-dev.yaml -f docker-compose-prod.yaml up для создания 2 контейнеров с 1 изображением Same Dockerfile. Но все равно создано 2 изображения. Можно ли это сделать в docker-compose? Например, image-1 создает container-app-dev container-app-prod как 2 контейнера.

Если код один и тот же, я должен просто создать 1 изображение для всех 3 фаз или 3 изображения для 3 фаз ?

В целом, правильно ли я иду для своей установки для фазы производства и фазы разработки?

...