- ติดตั้ง Docker และ Docker Compose บน Ubuntu 26.04.1 LTS ด้วย Ansible
- 1. Architecture
- 2. Environment ตัวอย่าง
- 3. ทำไมควรติดตั้งจาก Docker Official Repository
- 4. Docker Compose รุ่นปัจจุบัน
- 5. ติดตั้ง Ansible บน Control Node
- 6. สร้าง Project
- 7. สร้าง Inventory
- 8. ทดสอบการเชื่อมต่อ
- 9. กำหนด Docker Users
- 10. สร้าง Playbook
- 11. อธิบาย Playbook
- 12. ทำไมใช้ deb822_repository
- 13. ทำไมไม่ควรใช้ apt_key แบบเก่า
- 14. ตรวจสอบ Syntax
- 15. ใช้ Check Mode
- 16. รัน Playbook
- 17. Workflow ที่เกิดขึ้น
- 18. ตรวจสอบผลการติดตั้ง
- 19. ตรวจสอบจาก Ansible Control Node
- 20. Logout/Login หลังเพิ่ม docker group
- 21. ทดสอบด้วย hello-world
- 22. ทดลอง Docker Compose
- 23. ติดตั้ง Docker หลาย Server
- 24. จุดเด่นของ Idempotency
- 25. ใช้ SSH Key
- 26. เพิ่ม Ansible Tags
- 27. Production Best Practices
- 28. แยกเป็น Ansible Role
- 29. ใช้ Ansible Vault
- 30. Security: docker group มีสิทธิ์สูง
- 31. Security: Docker และ Firewall
- 32. Troubleshooting
- 33. คำสั่ง Docker ที่ใช้บ่อย
- 34. แนวทางต่อยอด
- 35. สรุป
- References
#ติดตั้ง Docker และ Docker Compose บน Ubuntu 26.04.1 LTS ด้วย Ansible
การติดตั้ง Docker บน Server เพียง 1 เครื่องด้วยคำสั่ง apt อาจไม่ได้ยุ่งยากมากนัก แต่เมื่อมีหลายเครื่อง หรือจำเป็นต้องสร้าง Server ใหม่ซ้ำ ๆ การติดตั้งแบบ Manual จะเริ่มมีข้อจำกัด เช่น ขั้นตอนของแต่ละเครื่องไม่เหมือนกัน ลืมติดตั้งบาง package หรือเกิด configuration drift ระหว่าง Server
Ansible ช่วยแก้ปัญหานี้โดยเปลี่ยนขั้นตอนการติดตั้งให้เป็น Infrastructure Automation ซึ่งสามารถกำหนด Desired State ไว้ใน Playbook แล้วใช้ Playbook เดิมติดตั้ง Docker ให้กับ Server จำนวนมากได้
บทความนี้จะแสดงการติดตั้ง
- Docker Engine
- Docker CLI
- containerd
- Docker Buildx
- Docker Compose Plugin
บน Ubuntu 26.04.1 LTS โดยใช้ Docker Official APT Repository
Ubuntu 26.04 LTS มีชื่อรุ่นว่า Resolute Raccoon และ Docker ระบุ Ubuntu Resolute 26.04 LTS เป็น Ubuntu รุ่นที่รองรับสำหรับ Docker Engine
#Infographic

#สิ่งที่จะได้จากบทความ
หลังจากทำตามบทความนี้ จะสามารถ
- เชื่อมต่อ Ubuntu Server ด้วย Ansible ผ่าน SSH
- สร้าง Ansible Inventory
- ตรวจสอบ Ubuntu version ก่อนติดตั้ง
- ลบ Docker package ที่อาจ conflict
- เพิ่ม Docker Official APT Repository
- ติดตั้ง Docker Engine
- ติดตั้ง Docker Buildx
- ติดตั้ง Docker Compose Plugin
- Enable Docker และ containerd ด้วย systemd
- เพิ่ม User เข้า
dockergroup - ตรวจสอบ Docker หลังติดตั้ง
- ทดลอง
hello-world - ทดลองสร้าง Container ด้วย Docker Compose
- นำ Playbook ไปใช้กับ Server หลายเครื่องได้
#1. Architecture
ตัวอย่างระบบในบทความประกอบด้วย 2 ส่วนหลัก
+----------------------------+
| Ansible Control Node |
|----------------------------|
| Ansible |
| inventory.ini |
| install-docker.yml |
+-------------+--------------+
|
| SSH
v
+----------------------------+
| Ubuntu 26.04.1 LTS |
|----------------------------|
| Docker Engine |
| Docker CLI |
| containerd |
| Docker Buildx |
| Docker Compose Plugin |
+----------------------------+
Ansible Control Node สามารถเป็น Linux หรือ macOS ได้ ส่วน Managed Node ในตัวอย่างนี้คือ Ubuntu 26.04.1 LTS
#2. Environment ตัวอย่าง
สมมติว่ามี Server ดังนี้
| Node | IP Address | User | หน้าที่ |
|---|---|---|---|
| Control Node | 192.168.1.10 |
admin |
รัน Ansible |
| Docker Server | 192.168.1.100 |
ubuntu |
ติดตั้ง Docker |
Managed Node ต้องสามารถ SSH ได้
ssh ubuntu@192.168.1.100
และ User ควรสามารถใช้ sudo ได้
sudo -v
#3. ทำไมควรติดตั้งจาก Docker Official Repository
Ubuntu มี package ที่เกี่ยวข้องกับ Docker อยู่ใน repository ของ distribution แต่ Docker แนะนำให้ติดตั้ง Docker Engine จาก repository อย่างเป็นทางการของ Docker
Package หลักที่ Docker ใช้ประกอบด้วย
docker-ce
docker-ce-cli
containerd.io
docker-buildx-plugin
docker-compose-plugin
ก่อนติดตั้ง Docker CE ควรลบ package ที่อาจ conflict เช่น
docker.io
docker-compose
docker-compose-v2
docker-doc
docker-buildx
podman-docker
containerd
runc
ดังนั้น Playbook ของเราจะจัดการขั้นตอนนี้ให้อัตโนมัติ
#4. Docker Compose รุ่นปัจจุบัน
ใน Docker รุ่นปัจจุบัน Docker Compose ถูกติดตั้งเป็น Docker CLI Plugin
Package คือ
docker-compose-plugin
รูปแบบคำสั่งที่ควรใช้คือ
docker compose
ตัวอย่าง
docker compose version
docker compose up -d
docker compose down
ไม่ควรยึดติดกับรูปแบบเดิม
docker-compose
เพราะแนวทางปัจจุบันใช้ Compose Plugin ผ่าน Docker CLI
#5. ติดตั้ง Ansible บน Control Node
ตรวจสอบก่อนว่ามี Ansible หรือไม่
ansible --version
หากใช้ Python environment สามารถติดตั้ง Ansible ผ่าน pipx
pipx install --include-deps ansible
ตรวจสอบอีกครั้ง
ansible --version
ตัวอย่าง
ansible [core ...]
python version = ...
#6. สร้าง Project
สร้าง Directory
mkdir ansible-docker
cd ansible-docker
สร้างโครงสร้าง
ansible-docker/
├── inventory.ini
├── group_vars/
│ └── all.yml
└── install-docker.yml
#7. สร้าง Inventory
สร้างไฟล์
inventory.ini
ใส่ข้อมูล
[docker_servers]
docker01 ansible_host=192.168.1.100 ansible_user=ubuntu
[all:vars]
ansible_python_interpreter=/usr/bin/python3
ความหมายคือ
| ค่า | ความหมาย |
|---|---|
docker_servers |
ชื่อ Host Group |
docker01 |
Alias ของ Managed Node |
ansible_host |
IP Address หรือ Hostname |
ansible_user |
User ที่ใช้ SSH |
ansible_python_interpreter |
Python interpreter บน Managed Node |
#8. ทดสอบการเชื่อมต่อ
รัน
ansible docker_servers \
-i inventory.ini \
-m ping
ถ้าเชื่อมต่อสำเร็จจะได้ลักษณะ
docker01 | SUCCESS => {
"changed": false,
"ping": "pong"
}
ถ้าใช้ SSH Key ที่ไม่ได้อยู่ใน default location สามารถระบุเพิ่มได้
ansible docker_servers \
-i inventory.ini \
-m ping \
--private-key ~/.ssh/id_ed25519
#9. กำหนด Docker Users
สร้าง Directory
mkdir -p group_vars
สร้างไฟล์
group_vars/all.yml
ตัวอย่าง
---
docker_users:
- ubuntu
หากต้องการเพิ่มหลาย User
---
docker_users:
- ubuntu
- developer
- devops
สมาชิกของ
dockergroup สามารถควบคุม Docker daemon และมีสิทธิ์สูงมากในระบบ จึงควรเพิ่มเฉพาะ User ที่จำเป็นเท่านั้น
#10. สร้าง Playbook
สร้างไฟล์
install-docker.yml
แล้วใส่ Playbook ต่อไปนี้
---
- name: Install Docker Engine on Ubuntu 26.04
hosts: docker_servers
become: true
gather_facts: true
pre_tasks:
- name: Validate Ubuntu 26.04.x
ansible.builtin.assert:
that:
- ansible_distribution == "Ubuntu"
- ansible_distribution_version is version("26.04", ">=")
- ansible_distribution_version is version("27.00", "<")
fail_msg: >
This playbook is intended for Ubuntu 26.04.x LTS.
Current system:
{{ ansible_distribution }}
{{ ansible_distribution_version }}
- name: Remove conflicting packages
ansible.builtin.apt:
name:
- docker.io
- docker-compose
- docker-compose-v2
- docker-doc
- docker-buildx
- podman-docker
- containerd
- runc
state: absent
update_cache: true
- name: Install repository prerequisites
ansible.builtin.apt:
name:
- ca-certificates
- curl
- python3-debian
state: present
update_cache: true
cache_valid_time: 3600
tasks:
- name: Add Docker official APT repository
ansible.builtin.deb822_repository:
name: docker
types:
- deb
uris:
- https://download.docker.com/linux/ubuntu
suites:
- "{{ ansible_distribution_release }}"
components:
- stable
signed_by: https://download.docker.com/linux/ubuntu/gpg
state: present
- name: Update APT package cache
ansible.builtin.apt:
update_cache: true
- name: Install Docker Engine and plugins
ansible.builtin.apt:
name:
- docker-ce
- docker-ce-cli
- containerd.io
- docker-buildx-plugin
- docker-compose-plugin
state: present
- name: Ensure Docker service is enabled and started
ansible.builtin.systemd_service:
name: docker
enabled: true
state: started
- name: Ensure containerd service is enabled and started
ansible.builtin.systemd_service:
name: containerd
enabled: true
state: started
- name: Ensure docker group exists
ansible.builtin.group:
name: docker
state: present
- name: Add selected users to docker group
ansible.builtin.user:
name: "{{ item }}"
groups:
- docker
append: true
loop: "{{ docker_users }}"
post_tasks:
- name: Read Docker version
ansible.builtin.command:
cmd: docker --version
register: docker_version
changed_when: false
- name: Display Docker version
ansible.builtin.debug:
var: docker_version.stdout
- name: Read Docker Compose version
ansible.builtin.command:
cmd: docker compose version
register: docker_compose_version
changed_when: false
- name: Display Docker Compose version
ansible.builtin.debug:
var: docker_compose_version.stdout
- name: Read Docker Buildx version
ansible.builtin.command:
cmd: docker buildx version
register: docker_buildx_version
changed_when: false
- name: Display Docker Buildx version
ansible.builtin.debug:
var: docker_buildx_version.stdout
#11. อธิบาย Playbook
#11.1 ตรวจสอบ Operating System
Task นี้ใช้
ansible.builtin.assert
เพื่อตรวจว่า Managed Node เป็น Ubuntu 26.04.x
- name: Validate Ubuntu 26.04.x
ansible.builtin.assert:
ช่วยลดความเสี่ยงจากการนำ Playbook ไปใช้ผิด Distribution โดยไม่ตั้งใจ
#11.2 ลบ Package ที่อาจ Conflict
Docker Official Documentation แนะนำให้ลบ package ที่อาจชนกับ Docker CE ก่อนติดตั้ง
- name: Remove conflicting packages
ansible.builtin.apt:
ตัวอย่าง package ได้แก่
- docker.io
- docker-compose
- docker-compose-v2
- docker-doc
- docker-buildx
- podman-docker
- containerd
- runc
#11.3 ติดตั้ง Prerequisites
ติดตั้ง
- ca-certificates
- curl
- python3-debian
python3-debian มีความสำคัญกับ
ansible.builtin.deb822_repository
เพราะ module นี้ต้องใช้ Python Debian library บน Managed Node
#12. ทำไมใช้ deb822_repository
Ansible มี Module
ansible.builtin.deb822_repository
สำหรับจัดการ APT Repository ในรูปแบบ Deb822 หรือไฟล์ .sources
ตัวอย่างจาก Playbook
- name: Add Docker official APT repository
ansible.builtin.deb822_repository:
name: docker
types:
- deb
uris:
- https://download.docker.com/linux/ubuntu
suites:
- "{{ ansible_distribution_release }}"
components:
- stable
signed_by: https://download.docker.com/linux/ubuntu/gpg
state: present
ข้อดีคือสามารถจัดการ
- Repository URI
- Distribution Suite
- Components
- Signing Key
- Repository State
ได้ใน Module เดียว
#13. ทำไมไม่ควรใช้ apt_key แบบเก่า
ตัวอย่าง Playbook เก่ามักพบ
ansible.builtin.apt_key:
หรือ
apt-key add
แต่แนวทางนี้ถูก deprecated แล้ว
Ansible รุ่นใหม่แนะนำ
ansible.builtin.deb822_repository
และ ansible.builtin.apt_repository เองก็ถูกประกาศ deprecated โดยให้ใช้ deb822_repository แทน
ดังนั้นสำหรับ Ubuntu 26.04 การใช้ Deb822 Repository เป็นแนวทางที่เหมาะสมกว่า
#14. ตรวจสอบ Syntax
ก่อนรันจริงควรตรวจ Playbook
ansible-playbook \
-i inventory.ini \
install-docker.yml \
--syntax-check
หากไม่มีปัญหาจะได้ประมาณ
playbook: install-docker.yml
#15. ใช้ Check Mode
สามารถตรวจสอบการเปลี่ยนแปลงก่อนรันจริง
ansible-playbook \
-i inventory.ini \
install-docker.yml \
--check
อย่างไรก็ตาม Task บางประเภท เช่น Repository หรือ Package metadata อาจไม่สามารถจำลองผลได้สมบูรณ์ทุกกรณี
#16. รัน Playbook
รัน
ansible-playbook \
-i inventory.ini \
install-docker.yml
หากต้องใส่ Password สำหรับ sudo
ansible-playbook \
-i inventory.ini \
install-docker.yml \
--ask-become-pass
#17. Workflow ที่เกิดขึ้น
Start
|
v
Gather Facts
|
v
Validate Ubuntu 26.04.x
|
v
Remove conflicting packages
|
v
Install prerequisites
|
v
Add Docker Official Repository
|
v
APT Update
|
v
Install
|
+--> docker-ce
+--> docker-ce-cli
+--> containerd.io
+--> docker-buildx-plugin
+--> docker-compose-plugin
|
v
Enable Docker
|
v
Enable containerd
|
v
Configure docker group
|
v
Verify Docker / Compose / Buildx
|
v
Complete
#18. ตรวจสอบผลการติดตั้ง
SSH เข้า Server
ssh ubuntu@192.168.1.100
ตรวจ Docker
docker --version
ตรวจ Docker Compose
docker compose version
ตรวจ Buildx
docker buildx version
ตรวจ Docker Service
systemctl status docker
ตรวจ containerd
systemctl status containerd
#19. ตรวจสอบจาก Ansible Control Node
สามารถตรวจโดยไม่ต้อง SSH เข้าแต่ละเครื่อง
#Docker Version
ansible docker_servers \
-i inventory.ini \
-b \
-a "docker --version"
#Docker Compose Version
ansible docker_servers \
-i inventory.ini \
-b \
-a "docker compose version"
#Docker Buildx
ansible docker_servers \
-i inventory.ini \
-b \
-a "docker buildx version"
#Docker Service
ansible docker_servers \
-i inventory.ini \
-b \
-a "systemctl is-active docker"
#ตรวจว่า Docker Enable ตอน Boot หรือไม่
ansible docker_servers \
-i inventory.ini \
-b \
-a "systemctl is-enabled docker"
#20. Logout/Login หลังเพิ่ม docker group
หลังจาก Playbook เพิ่ม User เข้า docker group
groups:
- docker
SSH session เดิมอาจยังไม่เห็น Group ใหม่
ให้ออกจากระบบ
exit
แล้วเชื่อมต่อใหม่
ssh ubuntu@192.168.1.100
ตรวจสอบ
groups
ควรเห็น
docker
จากนั้นลอง
docker ps
โดยไม่ต้องใช้ sudo
#21. ทดสอบด้วย hello-world
Docker Official Documentation ใช้ hello-world สำหรับตรวจสอบการติดตั้ง
รัน
docker run --rm hello-world
Docker จะ
- ตรวจสอบ Image ใน Local
- Pull Image หากยังไม่มี
- สร้าง Container
- แสดงข้อความยืนยัน
- Container จบการทำงาน
#22. ทดลอง Docker Compose
สร้าง Directory
mkdir docker-demo
cd docker-demo
สร้างไฟล์
compose.yml
ใส่
services:
nginx:
image: nginx:alpine
restart: unless-stopped
ports:
- "8080:80"
รัน
docker compose up -d
ตรวจสอบ
docker compose ps
ตัวอย่าง
NAME IMAGE STATUS
docker-demo-nginx-1 nginx:alpine Up
เปิด
http://SERVER_IP:8080
ดู Log
docker compose logs -f
หยุดระบบ
docker compose down
#23. ติดตั้ง Docker หลาย Server
หากมีหลายเครื่อง สามารถเพิ่ม Inventory
[docker_servers]
docker01 ansible_host=192.168.1.101 ansible_user=ubuntu
docker02 ansible_host=192.168.1.102 ansible_user=ubuntu
docker03 ansible_host=192.168.1.103 ansible_user=ubuntu
[all:vars]
ansible_python_interpreter=/usr/bin/python3
จากนั้นใช้ Playbook เดิม
ansible-playbook \
-i inventory.ini \
install-docker.yml
Ansible จะทำงานกับทุก Host ในกลุ่ม
docker_servers
#24. จุดเด่นของ Idempotency
Ansible ถูกออกแบบให้จัดการ Desired State
เช่นเราต้องการให้
Docker = installed
Docker service = running
Docker service = enabled
docker group = exists
ubuntu = member of docker group
เมื่อรันครั้งแรก อาจได้
changed=7
เมื่อรันซ้ำ
ansible-playbook \
-i inventory.ini \
install-docker.yml
ถ้าไม่มีสิ่งที่ต้องเปลี่ยน อาจได้
changed=0
แนวคิดนี้เรียกว่า
Idempotency
เหมาะกับ Configuration Management และ Infrastructure Automation
#25. ใช้ SSH Key
สำหรับ Server จริงควรใช้ SSH Key มากกว่าการพึ่ง Password
ตัวอย่าง Inventory
[docker_servers]
docker01 ansible_host=192.168.1.100
[docker_servers:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=~/.ssh/id_ed25519
ansible_python_interpreter=/usr/bin/python3
หรือกำหนดผ่าน CLI
ansible-playbook \
-i inventory.ini \
install-docker.yml \
--private-key ~/.ssh/id_ed25519
#26. เพิ่ม Ansible Tags
เมื่อ Playbook ใหญ่ขึ้น สามารถใช้ Tags เพื่อเลือกรันบางส่วน
ตัวอย่าง
- name: Install Docker Engine and plugins
ansible.builtin.apt:
name:
- docker-ce
- docker-ce-cli
- containerd.io
- docker-buildx-plugin
- docker-compose-plugin
state: present
tags:
- docker
- packages
รันเฉพาะ Docker Tasks
ansible-playbook \
-i inventory.ini \
install-docker.yml \
--tags docker
#27. Production Best Practices
#27.1 Pin Docker Version
Playbook ตัวอย่างใช้
state: present
ซึ่งหมายถึงติดตั้ง Package ที่เหมาะสมจาก Repository ในเวลาที่ Provision
สำหรับ Production ที่ต้องการ reproducibility สูง ควร Pin Docker version
ตรวจ Version ที่มี
apt list --all-versions docker-ce
จากนั้นสามารถกำหนด Variable เช่น
docker_version: "VERSION_STRING"
แล้วติดตั้ง
- name: Install pinned Docker version
ansible.builtin.apt:
name:
- "docker-ce={{ docker_version }}"
- "docker-ce-cli={{ docker_version }}"
- containerd.io
- docker-buildx-plugin
- docker-compose-plugin
state: present
ข้อดีคือ Dev, Test และ Production สามารถใช้ Docker Version เดียวกัน
#28. แยกเป็น Ansible Role
เมื่อใช้ Playbook นี้หลาย Project ควรเปลี่ยนเป็น Role
ตัวอย่างโครงสร้าง
ansible-docker/
├── inventory.ini
├── group_vars/
│ └── all.yml
├── site.yml
└── roles/
└── docker/
├── defaults/
│ └── main.yml
├── tasks/
│ └── main.yml
└── handlers/
└── main.yml
site.yml
---
- name: Configure Docker hosts
hosts: docker_servers
become: true
roles:
- docker
จากนั้น
ansible-playbook \
-i inventory.ini \
site.yml
ข้อดีคือ
- Reuse ง่าย
- แยก Responsibility ชัดเจน
- Maintain ง่าย
- ใช้กับหลาย Environment ได้
#29. ใช้ Ansible Vault
ไม่ควรเก็บข้อมูลสำคัญ เช่น
- Password
- API Token
- Registry Credential
- Secret Key
ลง Git Repository แบบ Plain Text
สร้าง Vault
ansible-vault create secrets.yml
แก้ไข
ansible-vault edit secrets.yml
รัน Playbook
ansible-playbook \
-i inventory.ini \
install-docker.yml \
--ask-vault-pass
#30. Security: docker group มีสิทธิ์สูง
Docker daemon โดยทั่วไปทำงานด้วยสิทธิ์ระดับสูง
เมื่อเพิ่ม User เข้า
docker
group ผู้ใช้นั้นสามารถสั่ง Docker daemon ได้โดยไม่ต้อง sudo
เช่น
docker run
ดังนั้นอย่าเพิ่ม User ที่ไม่จำเป็นลงใน docker group
สำหรับระบบที่ต้องการลดสิทธิ์ สามารถศึกษา
Docker Rootless Mode
เพิ่มเติม
#31. Security: Docker และ Firewall
Docker มีการจัดการ Network และ packet filtering ของตนเอง
เมื่อ Publish Port
ports:
- "8080:80"
Service สามารถเปิดผ่าน Host Port 8080
หากใช้ ufw หรือ firewall rule อื่น ควรตรวจสอบพฤติกรรมจริงของ Docker networking โดยเฉพาะ chain เช่น
DOCKER-USER
สำหรับ Production ไม่ควรพึ่ง Firewall assumption โดยไม่ได้ทดสอบจาก Client ภายนอก
#32. Troubleshooting
#32.1 Ansible Ping ไม่ผ่าน
ลอง SSH โดยตรง
ssh ubuntu@192.168.1.100
ตรวจสอบ SSH Service
sudo systemctl status ssh
ตรวจสอบ Network
ping 192.168.1.100
#32.2 sudo ไม่ผ่าน
รันพร้อม
--ask-become-pass
เช่น
ansible-playbook \
-i inventory.ini \
install-docker.yml \
--ask-become-pass
#32.3 Docker Permission Denied
ตัวอย่าง Error
permission denied while trying to connect to the Docker daemon socket
ตรวจ Group
groups
ถ้ายังไม่เห็น
docker
ให้ Logout/Login ใหม่
หรือใช้ชั่วคราว
newgrp docker
#32.4 docker compose ใช้ไม่ได้
ตรวจ Package
dpkg -l | grep docker-compose-plugin
ติดตั้ง
sudo apt update
sudo apt install docker-compose-plugin
ตรวจ
docker compose version
#32.5 Docker Service ไม่ทำงาน
ตรวจ
systemctl status docker
ดู Log
journalctl \
-u docker \
--no-pager \
-n 100
Restart
sudo systemctl restart docker
#32.6 Repository มีปัญหา
ตรวจ Codename
. /etc/os-release
echo "$VERSION_CODENAME"
Ubuntu 26.04 ควรเป็น
resolute
ตรวจ Docker source
cat /etc/apt/sources.list.d/docker.sources
จากนั้นลอง
sudo apt update
#33. คำสั่ง Docker ที่ใช้บ่อย
#Container
docker ps
docker ps -a
#Image
docker images
#Network
docker network ls
#Volume
docker volume ls
#Compose
docker compose ps
docker compose logs -f
docker compose down
#System
docker info
docker system df
#34. แนวทางต่อยอด
หลังจากติดตั้ง Docker ด้วย Ansible แล้ว สามารถต่อยอด Automation ได้หลายรูปแบบ เช่น
Terraform
|
v
Create VM
|
v
Ansible
|
v
Install Docker
|
v
Docker Compose
|
v
Deploy Application
หรือ
GitHub Actions
|
v
Build Image
|
v
Container Registry
|
v
Ansible
|
v
Docker Server
|
v
docker compose up -d
เหมาะกับการสร้างระบบ
- Development Environment
- Testing Environment
- Staging
- Production Server
- CI/CD Runner
- Self-hosted Application
- Docker Lab
- DevOps Workshop
#35. สรุป
การใช้ Ansible สำหรับติดตั้ง Docker และ Docker Compose บน Ubuntu 26.04.1 LTS ช่วยให้ขั้นตอนการ Provision Server จากเดิมที่ต้องทำ Manual กลายเป็น Infrastructure as Code ที่สามารถทำซ้ำได้
ภาพรวมคือ
Ansible
|
v
Ubuntu 26.04.1 LTS
|
v
Docker Official Repository
|
v
+-------------------------+
| Docker Engine |
| Docker CLI |
| containerd |
| Docker Buildx |
| Docker Compose Plugin |
+-------------------------+
|
v
systemd
|
v
Ready for Containers
ประเด็นสำคัญสำหรับ Ubuntu และ Ansible รุ่นปัจจุบันคือ
- ใช้ Docker Official APT Repository
- ใช้
docker-compose-plugin - ใช้คำสั่ง
docker compose - ใช้
ansible.builtin.deb822_repository - หลีกเลี่ยง workflow เก่าที่ใช้
apt-key - จำกัดสมาชิกของ
dockergroup - Pin Version เมื่อใช้ใน Production ที่ต้องการ reproducibility
- แยก Playbook เป็น Role เมื่อระบบใหญ่ขึ้น
เมื่อมี Playbook นี้แล้ว การติดตั้ง Docker Server ใหม่จะเหลือเพียงการเพิ่ม Host เข้า Inventory และรัน
ansible-playbook \
-i inventory.ini \
install-docker.yml
ซึ่งช่วยให้ Server หลายเครื่องมี Configuration ที่เป็นมาตรฐานเดียวกัน และเหมาะสำหรับนำไปต่อยอดกับ CI/CD, Terraform และ Infrastructure Automation ในระดับ Production
#References
-
Docker Docs — Install Docker Engine on Ubuntu
https://docs.docker.com/engine/install/ubuntu/ -
Docker Docs — Install the Docker Compose plugin
https://docs.docker.com/compose/install/linux/ -
Ansible Documentation —
ansible.builtin.deb822_repository
https://docs.ansible.com/projects/ansible/latest/collections/ansible/builtin/deb822_repository_module.html -
Ansible Documentation —
ansible.builtin.apt_repository
https://docs.ansible.com/projects/ansible/latest/collections/ansible/builtin/apt_repository_module.html -
Ubuntu 26.04 LTS Release Notes
https://documentation.ubuntu.com/release-notes/26.04/ -
Ubuntu 26.04.1 Release Changes
https://documentation.ubuntu.com/release-notes/26.04/1/