簡體   English   中英

用於更改Docker映像並重新創建Docker容器的Ansible工作流?

[英]Ansible workflow for building Docker image and recreating Docker container if image was changed?

我一直在努力弄清楚正確的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 docker_image選項。 state: present僅檢查圖像是否存在,而不檢查圖像是否最新。 這意味着即使Dockerfile已更改,該映像也不會重建。 docker_image確實提供了force: yes選項,但這將始終重新創建映像,而不管Dockerfile是否發生了變化。 當使用force: yes ,對我來說有意義的是,總是重新創建運行該映像的容器,以防止它們指向懸空的Docker映像,這是更好的選擇。

我想念什么? 有更好的選擇嗎?

viggeh用戶在Ansible GitHub上提供了一種變通方法 ,我已根據需要對其進行了調整,如下所示:

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

- name: Get Existing Image ID
  command: 'docker images --format {% raw %}"{{.ID}}"{% endraw %} --no-trunc {{ docker_image_name }}:{{ docker_image_tag }}'
  register: image_id
  changed_when: image_id.rc != 0

- name: Build Docker Image
  docker_image:
    force: yes
    name: '{{ docker_image_name }}'
    path: '/tmp/{{ app_name }}'
    rm: yes
    state: present
    tag: '{{ docker_image_tag }}'
  register: image_build
  changed_when: image_id.stdout != image_build.image.Id

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM