代码之家  ›  专栏  ›  技术社区  ›  rm.rf.etc

用docker和docker compose构建什么工作流?

  •  0
  • rm.rf.etc  · 技术社区  · 8 年前

    我有 this repo ,和 docker-compose up 将启动项目,创建2个容器(一个DB和API),一切正常。

    现在我要建立并部署到库伯内特斯。我试过了 docker-compose build 但它抱怨没有可停靠文件。所以我开始写一个文件然后发现 docker/Dockerfiles don't support loading ENV vars from an env_file or .env file 是的。给什么?我应该如何建立这个形象?有人能开导我吗?

    使用适当的环境变量构建docker映像的预期工作流是什么?

    2 回复  |  直到 8 年前
        1
  •  0
  •   Ignacio Millán    8 年前

    这些环境变量不应该在docker构建步骤中设置,而应该在Kubernetes或docker compose上运行应用程序时设置。

    所以:

    写一个dockerfile并把它放在根文件夹中。像这样的:

    FROM node
    COPY package.json .
    RUN npm install
    COPY . .
    ENTRYPOINT ["npm", "start"]
    

    修改docker-compose.yaml。在“图像”字段中,必须指定要生成的图像的名称应该是这样的:

    image: YOUR-DOCKERHUB-USERNAME/node-rest-auth-arangodb
    

    不需要设置 user working_dir

    docker-compose build (你也可以用docker build来实现)

    现在你可以使用 docker-compose up 要在本地运行应用程序,请使用 .env 文件

    要在kubernetes上部署它,您需要在dockerhub中发布您的映像(除非您在本地运行kubernetes):

    docker push YOUR-DOCKERHUB-USERNAME/node-rest-auth-arangodb
    

    最后,创建一个Kubernetes清单可悲的是,kubernetes不像docker compose那样支持env文件,您需要在清单中手动设置这些变量:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: platform-api
      labels:
        app: platform-api
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: platform-api
      template:
        metadata:
          labels:
            app: platform-api
        spec:
          containers:
          - name: platform-api
            image: YOUR-DOCKERHUB-USERNAME/node-rest-auth-arangodb
            ports:
            - containerPort: 8080
            env:
              - name: NODE_ENV
                value: develop
    
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: platform-db
      labels:
        app: platform-db
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: platform-db
      template:
        metadata:
          labels:
            app: platform-db
        spec:
          containers:
          - name: arangodb
            image: YOUR-DOCKERHUB-USERNAME/node-rest-auth-arangodb
            ports:
            - containerPort: 8529
            env:
              - name: ARANGO_ROOT_PASSWORD
                value: localhost
    

    部署它 kubectl create

    请注意,此代码只是指示性的,我不清楚您的用户情况。在docker compose和kubernetes文档和教程中找到更多信息祝你好运!

        2
  •  0
  •   rm.rf.etc    8 年前

    我已经在github上更新了这个项目,现在一切正常,还有readme文档如何运行它。

    我意识到env变量被认为是运行时变量,这就是为什么 --env-file docker run 而不是 docker build . 我想这也是为什么 docker-compose.yml env_file 选项,我认为它只是将文件传递给 docker构建 . 在Kubernetes中,我认为这些是从configmap传入的这样做是为了使映像保持更可移植性;同一个项目可以在传入不同的变量时运行,不需要重新生成。

    感谢 ignacio-millán 对于输入。

    推荐文章