需要将这个相对简单的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不会增加安全性。

希望有所帮助。