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 Composebecome
: yêu cầu quyền root để chạy các lệnh Docker Composepip
: cài đặt Docker Composedocker_compose
: chạy Docker Compose với các tham số:project_src
: đường dẫn đến filedocker-compose.yml
project_name
: tên của project bạn muốn tạostate
: 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ôngbuild
: 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
.