【问题标题】:Simulation "docker build -f" with ansible module "docker_image"使用 ansible 模块“docker_image”模拟“docker build -f”
【发布时间】:2017-03-10 03:42:12
【问题描述】:

当我构建 docker 映像时,我想在 Dockerfile 中添加指令“COPY”,其目录位于当前构建目录之外(放置 Dockerfile 的位置) - 我正在使用这样的东西:

docker build -f centos6-fresh/Dockerfile -t test/c6-fresh .

现在我想通过 ansible 配置容器和构建 docker 镜像。 当然,我可以使用 shell、命令或原始模块来做到这一点,但我看到了 Docker 的特殊模块。

所以我使用了模块“docker_image”

- name: Build test image
       docker_image:
           path: /docker/build_env/test
           name: test_build
           tag: v0

当然我有错误。

是否有任何选项,设置必须从哪个目录开始构建过程?

UPD 我需要这些操作的案例示例:

我有带有 ansible 的管理节点(我的笔记本电脑)和带有容器的 Docker 主机。 Ansible 目录正在使用 git 配置到 Docker 服务器。

通常我在 Docker 主机的 build_env 目录中构建一个镜像:

[root@docker build_env]# ls -1
ansible
centos6-fresh
centos7-fresh
debian8-fresh
templates
test

所以在 ansible 目录中运行“git pull”后,我运行类似

docker build -f centos6-fresh/Dockerfile -t test/c6-fresh .

Dockerfile 包含:

复制 ansible /etc/ansible

正如我们现在一样,docker 会阻止在 COPY 或 ADD 选项中使用“COPY ../ansible”之类的内容。

【问题讨论】:

  • 当然,作为一个变体,我可以将 ansible dir 拉入构建目录,在构建映像后我可以运行清理,但我认为这是一个肮脏的钩子

标签: docker ansible ansible-playbook docker-image


【解决方案1】:

根据docker_image documentation,有一个dockerfile 选项与-f 命令行选项完全类似。所以你只需要:

- name: Build test image
  docker_image:
    path: /docker/build_env/
    name: test_build
    tag: v0
    dockerfile: centos6-fresh/Dockerfile

【讨论】:

  • 你是对的!非常感谢。我看到了但没有尝试,因为我不明白它的发明目的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 2021-12-05
  • 2019-03-28
相关资源
最近更新 更多