如何设置参数&xE8;docker中的tres图像构成、dockerfile、构建和执行

如何设置参数&xE8;docker中的tres图像构成、dockerfile、构建和执行,docker,docker-compose,Docker,Docker Compose,我想单独构建我的镜像docker,并添加带有执行日期的标签,以便轻松地进行备份和回滚。 我想做什么 docker compose up-d——构建参数server=server\u dev\u 20200909,client=client\u dev\u 20200909 版本:“3” 服务: 蒙戈: 图片:mongo:4.4 重新启动:始终 卷数: -mongoData:/data/dbmongo 服务器: 端口: - "9090:8000" env_文件:server/local.env

我想单独构建我的镜像docker,并添加带有执行日期的标签,以便轻松地进行备份和回滚。 我想做什么

docker compose up-d——构建参数server=server\u dev\u 20200909,client=client\u dev\u 20200909

版本:“3”
服务:
蒙戈:
图片:mongo:4.4
重新启动:始终
卷数:
-mongoData:/data/dbmongo
服务器:
端口:
- "9090:8000"
env_文件:server/local.env
图像:${server}
链接:
-蒙戈
卷数:
-报告:/reports
重新启动:始终
webapp客户端:
端口:
- "8000:80"
图像:${client}
重新启动:始终
环境文件:
-webapp client/.env
链接:
-服务器
卷数:
蒙哥达塔:
报告:

好的,我对你的文件有点困惑,所以请允许我给你我希望的解决方案:

您可以将
buildarg
提供给
docker构建
docker编写构建

docker构建
您的
Dockerfile
需要包含,例如:

ARG SERVER="M"
ARG CLIENT="N"
...
RUN echo "Server=${SERVER}; Client=${CLIENT}
注意环境变量的资本化是不需要的,但是良好的做法

然后,您可以使用这些默认值运行
docker build
,或者使用
build arg
标志覆盖(不必要):

docker build--build arg=SERVER=X--build arg=CLIENT=Y。。。
例如:

docker构建\
--标签=63814651\
--文件=./Dockerfile\
.
步骤1/4:从busybox
步骤2/4:ARG SERVER=“M”
步骤3/4:ARG CLIENT=“N”
步骤4/4:运行echo“Server=${Server};Client=${Client}”
服务器=M;客户端=N
或:

docker构建\
--build arg=SERVER=X——build arg=CLIENT=Y
--标签=63814651\
--文件=./Dockerfile\
.
步骤1/4:从busybox
步骤2/4:ARG SERVER=“M”
步骤3/4:ARG CLIENT=“N”
步骤4/4:运行echo“Server=${Server};Client=${Client}”
服务器=X;客户机=Y
注意IIUC您必须分别标记每个
build arg

注意
服务器
客户端
在第二个示例中被覆盖

docker编写构建
我将检查您是否可以避免重复,但为了透明:

version: '3'
services:
 something:
  build:
    context: .
    dockerfile: ./Dockerfile
    args:
    - SERVER=X
    - CLIENT=Y
  image: something
  restart: always
...
然后,您可以使用这些默认值运行
docker compose build
,或者使用
build arg
标志覆盖(不必要):

docker compose build--build arg=SERVER=A--build arg=CLIENT=B。。。
例如:

注意注释出
args

然后:

docker编写\
--文件=./docker-compose.yaml\
构建--无缓存
步骤1/4:从busybox
步骤2/4:ARG SERVER=“M”
步骤3/4:ARG CLIENT=“N”
步骤4/4:运行echo“Server=${Server};Client=${Client}”
服务器=M;客户端=N
注意值来自
Dockerfile
默认值

然后:

docker编写\
--文件=./docker-compose.yaml\
构建--无缓存
步骤1/4:从busybox
步骤2/4:ARG SERVER=“M”
步骤3/4:ARG CLIENT=“N”
步骤4/4:运行echo“Server=${Server};Client=${Client}”
服务器=X;客户机=Y
注意值来自
docker compose.yaml

然后:

docker编写\
--文件=./docker-compose.yaml\
建造\
--build arg=SERVER=A——build arg=CLIENT=B\
--无缓存
步骤1/4:从busybox
步骤2/4:ARG SERVER=“M”
步骤3/4:ARG CLIENT=“N”
步骤4/4:运行echo“Server=${Server};Client=${Client}”
服务器=A;客户=B
注意值来自命令行

为了完整起见:

version: "3"
services:
  something:
    build:
      context: .
      dockerfile: ./Dockerfile
      args:
      - SERVER=X
      - CLIENT=Y
    image: something
然后:

docker编写\
--文件=./docker-compose.yaml\
建造\
--build arg=SERVER=A——build arg=CLIENT=B\
--无缓存
步骤1/4:从busybox
步骤2/4:ARG SERVER=“M”
步骤3/4:ARG CLIENT=“N”
步骤4/4:运行echo“Server=${Server};Client=${Client}”
服务器=A;客户=B
注意命令行始终优于默认值


考虑或回答。您有如何在生成映像中设置arg的响应。但我仍然会用我的图像版本或时间来回答这个问题。我不想在docker compose中使用构建选项。但是pararmeters
buildargs
中的启动映像集仅在构建时适用。对于运行时变量,需要使用环境变量。可以使用
ENV
Dockerfile
中引用这些命令,但如果需要使用这些命令评估环境变量,请小心使用
ENTRYPOINT
CMD
shell表单。类似地,在命令行上使用
--env=
version: "3"
services:
  something:
    build:
      context: .
      dockerfile: ./Dockerfile
      args:
      - SERVER=X
      - CLIENT=Y
    image: something
version: "3"
services:
  something:
    build:
      context: .
      dockerfile: ./Dockerfile
      # args:
      #   - SERVER=X
      #   - CLIENT=Y
    image: something
version: "3"
services:
  something:
    build:
      context: .
      dockerfile: ./Dockerfile
      args:
      - SERVER=X
      - CLIENT=Y
    image: something