需要将这个相对简单的 docker pull 和 运行 命令转换为 docker-compose.yml 文件吗?
Need to convert this relatively simple docker pull and run commands into a docker-compose.yml file?
我有三个命令用于 "update"、"re-run",然后通过我们的 CI 工具 "clean up" 我当前的 docker 图像选择(詹金斯)。为了简单起见,我没有包括我的 "container stop and remove" 命令。
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 的新手,我知道大部分 pull/run 步骤都可以在 docker-compose.yml 文件中完成。我希望有这方面经验的人能给我举个例子,因为我发现的那些似乎与我的需要有点不同。
此外,docker-compose 是否会提供比列出的方法更好的方法来传递我的环境变量?
env.list 是我传递给容器的环境变量列表。这似乎可行,但我注意到执行 docker inspect ${CONTAINER_ID} 会显示我传入的变量值。我觉得这种做法违背了从配置文件中提取值的目的首先。
首先,如果您简单地将 运行 命令转换为 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 up -d
- 相当于 docker run
。 -d
是分离模式下的 运行(与 docker run -d
相同)。此命令还将在启动新容器之前停止并删除以前版本的容器。
docker rmi $(docker images -f "dangling=true" -q)
- 和以前一样。 Docker-compose 没有任何清理图像的功能。
环境变量
上面的docker-compose.yml
实现了和运行ningdocker run --env-file ./env.list
一样的添加环境变量的方法。如果你的环境变量数量不少(比如上面3个),这是最好的方法。
另一种方法是将环境变量放在 docker-compose.yml
文件中,相当于 运行ning 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 文件解决的问题是拥有大量环境变量,而不必将它们全部列在 docker-compose 文件中或作为 -e
标志 docker 运行。它也可以被多个容器使用。无论环境变量来自 env 文件还是直接列出,它们仍然是容器配置的一部分,因此应该预期它们会出现在 docker inspect
.
中
此外,如果您担心其他应用程序可以看到此信息,该应用程序首先必须能够访问 docker 守护程序(以便它可以调用检查)。如果应用程序可以访问 docker 守护程序,那么它也可以 运行 docker exec echo $YOUR_ENV_VAR
并以任何方式检索它,因此将环境变量隐藏在 docker inspect
中不会增加安全性。
希望对您有所帮助。
我有三个命令用于 "update"、"re-run",然后通过我们的 CI 工具 "clean up" 我当前的 docker 图像选择(詹金斯)。为了简单起见,我没有包括我的 "container stop and remove" 命令。
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 的新手,我知道大部分 pull/run 步骤都可以在 docker-compose.yml 文件中完成。我希望有这方面经验的人能给我举个例子,因为我发现的那些似乎与我的需要有点不同。
此外,docker-compose 是否会提供比列出的方法更好的方法来传递我的环境变量?
env.list 是我传递给容器的环境变量列表。这似乎可行,但我注意到执行 docker inspect ${CONTAINER_ID} 会显示我传入的变量值。我觉得这种做法违背了从配置文件中提取值的目的首先。
首先,如果您简单地将 运行 命令转换为 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 up -d
- 相当于 docker run
。 -d
是分离模式下的 运行(与 docker run -d
相同)。此命令还将在启动新容器之前停止并删除以前版本的容器。
docker rmi $(docker images -f "dangling=true" -q)
- 和以前一样。 Docker-compose 没有任何清理图像的功能。
环境变量
上面的docker-compose.yml
实现了和运行ningdocker run --env-file ./env.list
一样的添加环境变量的方法。如果你的环境变量数量不少(比如上面3个),这是最好的方法。
另一种方法是将环境变量放在 docker-compose.yml
文件中,相当于 运行ning 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 文件解决的问题是拥有大量环境变量,而不必将它们全部列在 docker-compose 文件中或作为 -e
标志 docker 运行。它也可以被多个容器使用。无论环境变量来自 env 文件还是直接列出,它们仍然是容器配置的一部分,因此应该预期它们会出现在 docker inspect
.
此外,如果您担心其他应用程序可以看到此信息,该应用程序首先必须能够访问 docker 守护程序(以便它可以调用检查)。如果应用程序可以访问 docker 守护程序,那么它也可以 运行 docker exec echo $YOUR_ENV_VAR
并以任何方式检索它,因此将环境变量隐藏在 docker inspect
中不会增加安全性。
希望对您有所帮助。