2016-02-19 133 views
2

我有三条命令用于通过我们的CI工具(Jenkins)“更新”,“重新运行”,然后“清理”当前的码头图像。为了简单起见,我不包括我的“容器停止和删除”命令。需要将这个相对简单的docker pull和run命令转换成docker-compose.yml文件吗?

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) 

我是新来泊坞窗,撰写和我理解这些最拉/运行步骤或许可以泊坞窗,compose.yml文件内完成。我希望有经验的人能够给我一个例子,因为我发现的那些似乎与我的需求有点分歧。

此外,将docker-compose给我一个更好的方式来传递我的环境变量比列出的方法?

env.list是我传递给容器的环境变量的列表。这似乎工作,但我注意到,执行docker检查$ {CONTAINER_ID}会显示我传入的变量值。我觉得这种做法首先破坏了从配置文件中提取值的目的。

回答

2

首先,如果您简单地将运行命令转换为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.yml文件):

docker-compose pull 

docker-compose up -d 

docker rmi $(docker images -f "dangling=true" -q) 

docker-compose pull - 做什么它说在锡上,拉出docker-compose.yml中的所有图像。

docker-compose up -d - 相当于docker run-d将以分离模式运行(与docker run -d相同)。在启动新的命令之前,该命令也会停止并删除以前版本的容器。

docker rmi $(docker images -f "dangling=true" -q) - 与以前相同。 Docker-compose没有任何清理图像的功能。

环境变量

上面docker-compose.yml实现用于添加环境变量运行docker run --env-file ./env.list相同的方法。如果你有一个非常少的环境变量(比如说高于3),这是最好的方法。

另一种方法是将环境变量放在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文件解决是有大量的环境变量,并没有一一列举出你的搬运工,撰写文件,或者作为搬运工运行-e标志的问题。它也可以被多个容器使用。无论环境变量是来自env文件还是直接列出,它们仍然是容器配置的一部分,因此应该预期它们出现在docker inspect。此外,如果您担心其他应用程序可能会看到此信息,应用程序首先必须有权访问docker守护程序(以便它可以调用检查)。如果应用程序可以访问docker守护进程,那么它也可以运行docker exec echo $YOUR_ENV_VAR并以任何方式检索它,因此在docker inspect中隐藏环境变量不会增加安全性。

希望有所帮助。

+0

太棒了,谢谢你这么好的回答。我不知道码头组成自动停止并删除现有的容器。太棒了。为什么需要该版本? – daniel9x

+0

新Docker撰写文件格式与旧版Docker撰写文件格式略有不同(因此需要最新版本的docker-compose来解析它),并且支持只能在docker-engine 1.10(例如docker网络)中运行的新功能。据推测,版本2格式将是未来唯一支持的格式,因此我回答了它。 – JamesStewy

相关问题