如果图像被更改,建立Docker镜像并重新创建Docker容器的Ansible工作流程?

时间:2018-05-07 06:38:54

标签: docker ansible

我一直在努力弄清楚正确的Ansible工作流程用于部署Docker镜像以及在图像发生变化时重新创建Docker容器。

这里是我最初认为可行的角色的任务列表:

- name: Deploy Source
  synchronize:
    archive: yes
    checksum: yes
    compress: yes
    dest: '/tmp/{{ app_name }}'
    src: ./

- name: Build Docker Image
  docker_image:
    name: '{{ docker_image_name }}'
    path: '/tmp/{{ app_name }}'
    rm: yes
    state: present
  register: build_docker_image

- name: Create Docker Container
  docker_container:
    image: '{{ docker_image_name }}'
    keep_volumes: yes
    name: '{{ docker_container_name }}'
    recreate: '{{ true if build_docker_image.changed else omit }}'
    state: started

这不起作用,因为Ansible docker_image模块不提供state: latest选项。 state: present仅检查图片是否存在,而不检查图片是否为最新版本。这意味着即使Dockerfile已更改,也不会重建图像。 docker_image确实提供了force: yes选项,但无论Dockerfile是否有变化,都会重新创建图片。使用force: yes时,对我来说最好总是重新创建运行图像的容器,以防止它们指向摇晃的Docker镜像。

我错过了什么?还有更好的选择吗?

1 个答案:

答案 0 :(得分:0)

用户viggeh在Ansible GitHub上提供workaround,我已按照以下方式调整了我的需求:

extra_content