我一直在努力弄清楚正确的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镜像。
我错过了什么?还有更好的选择吗?