如何设置参数&xE8;docker中的tres图像构成、dockerfile、构建和执行
我想单独构建我的镜像docker,并添加带有执行日期的标签,以便轻松地进行备份和回滚。 我想做什么 docker compose up-d——构建参数server=server\u dev\u 20200909,client=client\u dev\u 20200909如何设置参数&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
版本:“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