Friday, November 15, 2024

[Ansible] Module Docker trong Ansible

-

Module Docker trong Ansible là một module dùng để quản lý các container Docker. Nó cung cấp cho người dùng một tập các công cụ để tạo, khởi động, dừng, xóa container và quản lý các ứng dụng chạy trên các container này. Module Docker cho phép người dùng tự động hoá các công việc quản lý Docker bằng cách sử dụng các task trong các playbooks Ansible. Nó là một phần trong Ansible Core Modules và được hỗ trợ trên các hệ điều hành Linux, MacOS và Windows.

Cài đặt:

Để sử dụng module docker_container trong Ansible, ta cần cài đặt Docker SDK cho Python trên máy chạy Ansible. Cài đặt Docker SDK có thể thực hiện bằng pip:

pip install docker

Sau đó, ta có thể sử dụng module docker_container trong playbook Ansible. Nếu bạn muốn cài đặt module docker_container bằng pip3, bạn có thể sử dụng câu lệnh sau:

pip3 install docker

Sau đó, trong các task của playbook, bạn có thể sử dụng module docker_container bằng cách thêm ansible_collections.community.general.docker_container vào collections và import module docker_container:

- name: Example playbook
  collections:
    - community.general
  hosts: all
  tasks:
    - name: Create a Docker container
      community.general.docker_container:
        name: my_container
        image: my_image
        state: started

Lưu ý: Trong trường hợp bạn sử dụng Ansible 2.x, bạn có thể sử dụng module docker_container được cài đặt từ pip bằng cách import module docker_container từ docker_container (thay vì community.general.docker_container).

Các tham số:

Module Docker trong Ansible cung cấp các tham số để quản lý container Docker như:

  • name: Tên của container.
  • image: Image của container.
  • state: Trạng thái của container. Các giá trị có thể là started, restarted, stopped, killed, paused, absent.
  • command: Command để chạy trên container.
  • restart_policy: Chính sách khởi động lại container. Các giá trị có thể là no, on-failure, always, unless-stopped.
  • volumes: Danh sách các volume được liên kết với container.
  • ports: Danh sách các cổng được mở ra bên ngoài container.
  • env: Các biến môi trường được sử dụng bên trong container.
  • network_mode: Chế độ mạng cho container. Các giá trị có thể là bridge, host, none, container:<name|id>.

Các tham số này giúp cho việc quản lý container Docker trên các máy chủ được đơn giản hóa và tự động hóa hơn khi sử dụng Ansible.

Ví dụ 1:

Trong playbook của Ansible, để sử dụng module Docker, ta cần khai báo module trong phần tasks bằng cách sử dụng từ khóa docker_container hoặc docker_image.

- name: Create a new container
  docker_container:
    name: my-container
    image: nginx
    state: started
    ports:
      - "80:80"

Trong ví dụ này, ta sử dụng module docker_container để tạo một container mới, với các tham số như name, image, state, và ports.

Ví dụ 2:

Để chạy Docker Compose với file cấu hình docker-compose.yml tại đường dẫn /home/monitor/docker-compose.yml, bạn có thể sử dụng playbook sau:

- name: Run Docker Compose
  hosts: your_host
  become: yes
  tasks:
    - name: Install Docker Compose
      pip:
        name: docker-compose
        executable: /usr/bin/python3

    - name: Run Docker Compose
      docker_compose:
        project_src: /home/monitor
        project_name: my_project
        state: started
        log_output: yes
        build: no

Trong đó:

  • hosts: là tên host bạn muốn chạy Docker Compose
  • become: yêu cầu quyền root để chạy các lệnh Docker Compose
  • pip: cài đặt Docker Compose
  • docker_compose: chạy Docker Compose với các tham số:
    • project_src: đường dẫn đến file docker-compose.yml
    • project_name: tên của project bạn muốn tạo
    • state: trạng thái muốn chạy (ví dụ: started, stopped, restarted)
    • log_output: hiển thị log output của Docker Compose hay không
    • build: có build image hay không (nếu không có image thì cần build image trước khi chạy)

Lưu ý: Bạn cần cài đặt module docker_compose trước khi chạy playbook trên.

Để dừng Docker Compose trong một task của playbook Ansible, bạn có thể sử dụng module docker_compose với state: stopped. Ví dụ:

- name: Stop Docker Compose
  docker_compose:
    project_src: /home/monitor
    project_name: vnpt_monitoring
    state: stopped
    log_output: yes

Module này sẽ dừng các container và xóa các network, volume được tạo bởi Docker Compose. Nếu bạn muốn giữ lại network và volume, bạn có thể sử dụng state: absent. Ví dụ:

- name: Remove Docker Compose
  docker_compose:
    project_src: /home/monitor
    project_name: vnpt_monitoring
    state: absent
    log_output: yes

Module này sẽ dừng các container, xóa các network và volume được tạo bởi Docker Compose. Lưu ý rằng module docker_compose yêu cầu Docker Compose đã được cài đặt trên máy tính chạy Ansible.

Ví dụ 3:

Bạn có thể sử dụng module docker_container trong Ansible để xoá các container theo điều kiện. Ví dụ, để xoá các container có tên chứa từ “nginx” và không chứa từ “test”, bạn có thể sử dụng task sau:

- name: Stop and remove nginx containers
  docker_container:
    name: "{{ item }}"
    state: absent
  loop: "{{ query('docker_container', 'names=*nginx* state=running') }}"
  when: "'test' not in item"

Trong task này, query('docker_container', 'names=*nginx* state=running') sẽ lấy danh sách các container có tên chứa từ “nginx” và đang chạy. Sau đó, loop sẽ lặp lại các container trong danh sách này. Với mỗi container, Ansible sẽ kiểm tra nếu tên không chứa từ “test”, thì container sẽ được xoá bằng cách đặt state: absent trong module docker_container.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories