适用于各种开发环境的Docker设置

时间:2020-03-04 13:01:24

标签: docker docker-compose dockerfile

我一直在寻找以下问题的答案。过去一周,我开始在docker上进行研究和POC,所以我不了解任何最佳实践或工作流程。但是这里有我的用例和我一直在努力的事情。

我将查询添加到blockquote中,以便于浏览。

我和我的团队目前为Development阶段,UAT阶段和Production阶段进行了设置(不使用Docker)。

我用docker-compose来按需要设置环境。

我有这样的文件夹结构:

deploy
  |-----.env
  |-----docker-compose-dev.yaml
  |-----docker-compose-prod.yaml
  |-----docker-compose-uat.yaml
src
  |-----Dockerfile
  1. 我认为这是正确的方法。每个阶段/环境都有docker-compose个文件。我说的对吗?

  2. 在.gitignore和.dockerignore中应该忽略Dockerfile吗?

在这里,我的模板是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是那个标签env_file,因为我有docker-compose文件本身的变量。

  1. 我应如何在docker-compose中强制使用自定义.env.<>

我首先想到的是,如果阶段的代码相同,则应该有1张图片和多个容器container1-uatcontainer2-dev。但是,我想,只有一个图像可以分为三个阶段是没有意义的。困惑...

  1. 我尝试使用docker-compose -f docker-compose-dev.yaml -f docker-compose-prod.yaml up创建具有1个图像Same Dockerfile的2个容器。但是它仍然创建了2张图片。可以在docker-compose中完成吗?例如,image-1container-app-dev container-app-prod创建为2个容器。

  2. 如果代码相同,我应该为所有3个阶段创建1个图像还是为3个阶段创建3个图像?

  3. 总体而言,我在生产阶段和开发阶段的设置是否正确?

0 个答案:

没有答案