如何使用Ansible移除过时的容器?

时间:2019-04-19 18:30:15

标签: docker ansible ansible-template

我正在使用with_sequence使用ansible在单个节点上迭代创建容器的副本。容器的数量由部署时设置的变量确定。这对于增加要扩展的容器的数量非常有效,但是当我减少部署更少的容器的数量时,旧的容器将继续运行。有没有办法停止旧容器?由于旧容器没有停止,因此修剪可能无法正常工作。

1 个答案:

答案 0 :(得分:0)

一种选择是将Ansible从docker-compose转移到docker-compose,它知道如何按比例放大和缩小(并且确实为管理复杂Docker配置提供了更好的使用体验)。

另一种想法是包括一个用于启动容器的循环,然后包括第二个尝试删除容器的循环,直到达到某个最大数量(例如(假设要启动的容器的数目位于ansible变量{{ 1}}):

container_count

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

第三个选择是用外壳程序脚本替换“停止容器”任务,该脚本可能会稍快一些,但不像“ anans-like”:

---
- 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 }}"

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