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

使用docker和docker compose构建的工作流是什么?,docker,kubernetes,docker-compose,Docker,Kubernetes,Docker Compose,我已经完成了,docker compose up将启动该项目,创建2个容器(一个DB和API),一切正常 现在我想构建并部署到Kubernetes。我尝试了docker compose build,但它抱怨没有docker文件。所以我开始写一个Dockerfile,然后发现了这一点。有什么好处?我该如何塑造这个形象?有人能告诉我吗 使用适当的环境变量构建docker映像的预期工作流程是什么?这些环境变量不应在docker构建步骤中设置,而应在Kubernetes或docker compose上运

我已经完成了,docker compose up将启动该项目,创建2个容器(一个DB和API),一切正常

现在我想构建并部署到Kubernetes。我尝试了docker compose build,但它抱怨没有docker文件。所以我开始写一个Dockerfile,然后发现了这一点。有什么好处?我该如何塑造这个形象?有人能告诉我吗


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

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

因此:

编写Dockerfile并将其放置在根文件夹中。大概是这样的:

FROM node
COPY package.json .
RUN npm install
COPY . .
ENTRYPOINT ["npm", "start"]
image: YOUR-DOCKERHUB-USERNAME/node-rest-auth-arangodb
修改docker-compose.yaml。在图像字段中,必须指定要生成的图像的名称。应该是这样的:

FROM node
COPY package.json .
RUN npm install
COPY . .
ENTRYPOINT ["npm", "start"]
image: YOUR-DOCKERHUB-USERNAME/node-rest-auth-arangodb
无需设置
用户
工作目录

使用
docker compose Build
构建映像(也可以使用docker Build进行此操作)

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

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

最后,创建一个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文档和教程中查找更多信息。祝你好运

我已经在github上更新了这个项目,现在一切都正常了,自述文件中介绍了如何运行它

我意识到env变量被认为是运行时变量,这就是为什么
--env file
docker run
的一个选项,而不是
docker build
。这也是(我假设)为什么
docker compose.yml
env_file
选项的原因,我假设它只是将文件传递给
docker build
。在Kubernetes中,我认为这些是从配置映射传入的。这样做可以使图像保持更便携;同一项目可以使用传入的不同变量运行,无需重新生成


感谢您的输入。

>>将.example env重命名为.env,此文件为API和docker-compose.Ya设置了env vars,我为项目新手保留了此示例文件。自述文件告诉他们重命名它。我想出了一个像样的解决办法。此外,我认为docker开发人员的意图是在运行时传递env变量,因此--env文件仅可用于
docker运行
,而不可用于
docker构建
。我将更新并回答我自己的问题,我正在推动更改。