需要将这个相对简单的docker pull和run命令转换成docker-compose.yml文件?
我有三个命令用于“更新”,“重新运行”,然后通过我们的CI工具(Jenkins)“清理”当前的Docker镜像。 为了简单起见,我不包括我的“容器停止和删除”命令。
docker pull my.private.registry:443/my-awesome-app docker run -d --env-file ./env.list -i -p 8080:8080 -p 9990:9990 my.private.registry:443/my-awesome-app docker rmi $(docker images -f "dangling=true" -q)
我是新来的docker-compose,我明白,大部分这些拉/运行步骤可能是在docker-compose.yml文件中完成的。 我希望在这方面有经验的人可以给我一个例子,因为我发现的那些似乎与我的需求有点分歧。
另外,docker-compose会给我一个比列出的方法更好的方法来传递我的环境variables吗?
env.list是我传递给容器的环境variables的列表。 这似乎工作,但我注意到,做一个docker检查$ {CONTAINER_ID}揭示了我通过的variables值。我觉得这种types的失败,首先从configuration文件中提取值的目的。
首先,如果你简单地将运行命令转换成docker-compose.yml
文件,你会得到以下结果。 为了举例,我已经打电话给服务my-awesome-app
但是你可以把它命名为你想要的。 (注意:这个docker-compose文件和下面的版本是新的版本2格式,需要docker-engine 1.10
和docker-compose 1.6
才能运行)。
version: '2' services: my-awesome-app: image: my.private.registry:443/my-awesome-app ports: - "8080:8080" - "9990:9990" env_file: - ./env.list
要实现你的命令,包括停止和删除旧的包含,但是用docker-compose,你可以运行(在工作目录中有docker-compose.yml
文件):
docker-compose pull docker-compose up -d docker rmi $(docker images -f "dangling=true" -q)
docker-compose pull
– 做它在docker-compose.yml
上说的东西,把docker-compose.yml
所有图片docker-compose.yml
。
docker-compose up -d
– 相当于docker run
。 -d
将以独立模式运行(与docker run -d
相同)。 在启动新的命令之前,该命令也将停止并删除以前版本的容器。
docker rmi $(docker images -f "dangling=true" -q)
– 和以前一样。 Docker-compose没有任何清理图像的function。
环境variables
上面docker-compose.yml
实现了和运行docker run --env-file ./env.list
一样的添加环境variables的方法。 如果你有一个非常小的环境variables(比如3以上),这是最好的方法。
另一种方法是将环境variables放在docker-compose.yml
文件中,相当于运行docker-compose.yml
docker run -e KEY1=value -e KEY2=value
。
version: '2' services: my-awesome-app: image: my.private.registry:443/my-awesome-app ports: - "8080:8080" - "9990:9990" environment: - KEY1=value - KEY2=value
最后,env文件解决的问题是拥有大量的环境variables,而不必在docker-compose文件中将它们全部列出,或者在docker run中将其作为-e
标志。 它也可以被多个容器使用。 无论环境variables是来自env文件,还是直接列出,仍然是容器configuration的一部分,因此应该预料它们出现在docker inspect
。
此外,如果您担心其他应用程序可以看到这些信息,那么应用程序首先必须能够访问docker守护程序(这样才能调用检查程序)。 如果应用程序可以访问docker exec echo $YOUR_ENV_VAR
守护程序,那么它也可以运行docker exec echo $YOUR_ENV_VAR
并以任何方式检索它,因此在docker inspect
隐藏环境variables不会增加安全性。
希望有所帮助。