【问题标题】:How to remove outdated containers using ansible?如何使用 ansible 删除过时的容器?
【发布时间】:2019-04-19 18:30:14
【问题描述】:

我正在使用 with_sequence 使用 ansible 在单个节点上迭代地创建容器的副本。容器的数量由部署时设置的变量决定。这对于增加要扩展的容器数量非常有效,但是当我减少部署更少容器的数量时,旧容器仍然在运行。有没有办法停止旧容器? Prune 似乎无法正常工作,因为旧容器没有停止。

【问题讨论】:

    标签: docker ansible ansible-template


    【解决方案1】:

    一种选择是从 Ansible 迁移到 docker-compose,它知道如何扩展和缩减(老实说,它为管理复杂的 Docker 配置提供了更好的使用体验)。

    另一个想法是包含一个用于启动容器的循环,然后包含一个第二个循环,该循环尝试删除容器的最大数量,如下所示(假设您要启动的容器数量在 ansible 变量 @987654321 @):

    ---
    - hosts: localhost
      gather_facts: false
      vars:
        container_count: 4
        maximum_containers: 20
      tasks:
        - name: Start containers
          docker_container:
            state: present
            name: "service-{{ item }}"
            image: fedora
            command: "sleep inf"
          loop: "{{ range(container_count|int)|list }}"
    
        - name: Stop containers
          docker_container:
            state: absent
            name: "service-{{ item }}"
          loop: "{{ range(container_count|int, maximum_containers|int)|list }}"
    

    使用剧本中定义的默认值调用,它将创建 4 个容器,然后尝试再删除 16 个。这会有点慢,因为 Ansible 没有提供任何提前退出循环的方法,但它会起作用。

    第三种选择是用 shell 脚本替换“停止容器”任务,这可能会稍微快一些,但不太“类似 ansible”:

    ---
    - hosts: localhost
      gather_facts: false
      vars:
        container_count: 4
      tasks:
        - name: Start containers
          docker_container:
            state: present
            name: "service-{{ item }}"
            image: fedora
            command: "sleep inf"
          loop: "{{ range(container_count|int)|list }}"
    
        - name: Stop containers
          shell: |
            let i={{ container_count }}
            while :; do
              name="service-$i"
              docker rm -f $name || break
              echo "removed $name"
              let i++
            done
            echo "all done."
    

    相同的想法,但速度更快,并且不需要您定义最大容器数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 2021-09-06
      • 2017-11-20
      相关资源
      最近更新 更多