gpt4 book ai didi

docker - 需要将这个相对简单的 docker pull 和 run 命令转换成 docker-compose.yml 文件吗?

转载 作者:行者123 更新时间:2023-12-01 13:46:41 25 4
gpt4 key购买 nike

我使用三个命令来“更新”、“重新运行”,然后通过我们选择的 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 是否会提供比所列方法更好的方法来传递我的环境变量?

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 - 做它在锡 jar 上所说的,拉取 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 文件解决的问题是拥有大量环境变量,而不必在 docker-compose 文件中或作为 -e 标志在 docker run 中将它们全部列出。它也可以被多个容器使用。无论环境变量来自 env 文件还是直接列出,它们仍然是容器配置的一部分,因此应该预期它们会出现在 docker inspect 中。

此外,如果您担心其他应用程序可以看到此信息,则该应用程序首先必须能够访问 docker 守护进程(以便它可以调用 inspect)。如果应用程序可以访问 docker 守护进程,那么它也可以运行 docker exec echo $YOUR_ENV_VAR 并以任何方式检索它,因此在 docker inspect 中隐藏环境变量不会增加安全性。

希望对您有所帮助。

关于docker - 需要将这个相对简单的 docker pull 和 run 命令转换成 docker-compose.yml 文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35509099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com