首先,如果您简单地将运行命令转换为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
中隐藏环境变量不会增加安全性。
希望有所帮助。
太棒了,谢谢你这么好的回答。我不知道码头组成自动停止并删除现有的容器。太棒了。为什么需要该版本? – daniel9x
新Docker撰写文件格式与旧版Docker撰写文件格式略有不同(因此需要最新版本的docker-compose来解析它),并且支持只能在docker-engine 1.10(例如docker网络)中运行的新功能。据推测,版本2格式将是未来唯一支持的格式,因此我回答了它。 – JamesStewy