Docker 带有配置文件的映像部署
我有一个我想要部署的映像。想象一下Docker 带有配置文件的映像部署,docker,Docker,我有一个我想要部署的映像。想象一下myapp:latestimage中的web应用程序: FROM debian:jessie [...] EXPOSE 80 CMD ["/bin/bash", "/bin/run_myapp.sh"] 其中/bin/run\u myapp.sh从/etc/myapp.conf加载配置文件。 要使用3个不同的配置文件部署3个实例,我认为可以执行以下操作: C1=$(docker run -d myapp) C2=$(docker run -d myapp) C
myapp:latest
image中的web应用程序:
FROM debian:jessie
[...]
EXPOSE 80
CMD ["/bin/bash", "/bin/run_myapp.sh"]
其中/bin/run\u myapp.sh从/etc/myapp.conf加载配置文件。
要使用3个不同的配置文件部署3个实例,我认为可以执行以下操作:
C1=$(docker run -d myapp)
C2=$(docker run -d myapp)
C3=$(docker run -d myapp)
...
docker cp myapp1.conf $C1:/etc/myapp.conf
docker cp myapp2.conf $C2:/etc/myapp.conf
docker cp myapp3.conf $C3:/etc/myapp.conf
但是有了这个想法,容器已经在运行了,所以/bin/run\u myapp.sh已经读到了/etc/myapp.conf。如果在启动myapp之前idocker cp
,则容器不存在
什么
docker
解决方案可用于此部署场景?解决方案是在步骤中使用create
,然后执行cp
,最后启动容器
C1=$(docker create myapp)
C2=$(docker create myapp)
C3=$(docker create myapp)
docker cp myapp1.conf $C1:/etc/myapp.conf
docker cp myapp2.conf $C2:/etc/myapp.conf
docker cp myapp3.conf $C3:/etc/myapp.conf
docker start $C1
docker start $C2
docker start $C3
我通常通过--env或--env文件使用环境变量。这样,dev和prod之间就不会发生代码/脚本更改。如果必须使用config文件,也许可以将这三个文件构建到映像中,并在运行时使用--env指定其位置。