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

希望对您有所帮助。