Featured image of post Cài đặt Docker và Docker Compose tự động bằng Bash Script

Cài đặt Docker và Docker Compose tự động bằng Bash Script

Hướng dẫn viết Bash Script tự động cài đặt Docker Engine và Docker Compose phiên bản mới nhất trên Ubuntu — tiết kiệm thời gian khi triển khai trên nhiều server.

Tự động hóa cài đặt Docker bằng Bash Script

Khi làm việc với nhiều server, việc cài đặt Docker thủ công từng bước trên mỗi máy là tốn thời gian và dễ sai sót. Giải pháp đơn giản nhất là viết một Bash Script tự động hóa toàn bộ quá trình — từ cài đặt dependencies, thêm Docker repository, đến cài đặt Docker Engine và Docker Compose.

Trong bài viết này, tôi sẽ hướng dẫn bạn viết script cài đặt Docker theo đúng tài liệu chính thức của Docker, đảm bảo luôn lấy phiên bản mới nhất từ repository chính thức.


Yêu cầu hệ thống

Trước khi bắt đầu, hãy đảm bảo server của bạn đáp ứng các điều kiện sau:

Yêu cầuChi tiết
Hệ điều hànhUbuntu 22.04 (Jammy), 24.04 (Noble), 25.10 (Questing), 26.04 (Resolute)
Kiến trúcx86_64 (amd64), arm64, armhf, s390x, ppc64le
QuyềnTài khoản có quyền sudo
Kết nối mạngCó kết nối Internet để tải packages

Gỡ cài đặt phiên bản Docker cũ (nếu có)

Theo tài liệu chính thức của Docker, trước khi cài đặt Docker Engine, bạn cần gỡ bỏ các package xung đột có thể đã được cài sẵn bởi hệ điều hành:

1
sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc

Lưu ý: Lệnh trên có thể báo rằng không có package nào được cài — điều này hoàn toàn bình thường trên server mới.


Viết Bash Script cài đặt Docker

Tạo file script

1
vi install-docker.sh

Nội dung script

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/bash
set -e

echo "=========================================="
echo "  Cài đặt Docker Engine & Docker Compose  "
echo "=========================================="

# Bước 1: Cài đặt các packages cần thiết
echo "[1/5] Cài đặt dependencies..."
sudo apt update -y
sudo apt install -y ca-certificates curl gnupg

# Bước 2: Thêm Docker GPG key
echo "[2/5] Thêm Docker GPG key..."
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Bước 3: Thêm Docker repository vào apt sources
echo "[3/5] Thêm Docker repository..."
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Bước 4: Cài đặt Docker Engine và Docker Compose plugin
echo "[4/5] Cài đặt Docker Engine..."
sudo apt update -y
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Bước 5: Khởi động và enable Docker service
echo "[5/5] Khởi động Docker service..."
sudo systemctl start docker
sudo systemctl enable docker

echo "=========================================="
echo "  Cài đặt hoàn tất!"
echo "=========================================="
docker --version
docker compose version

Giải thích từng bước trong script:

BướcLệnhMục đích
1apt install ca-certificates curl gnupgCài các package cần thiết để xác thực GPG key và tải file qua HTTPS
2curl ... | gpg --dearmorTải và chuyển đổi GPG key của Docker sang định dạng binary để apt xác thực package
3tee /etc/apt/sources.list.d/docker.listThêm Docker repository vào danh sách sources của apt, tự động detect kiến trúc và codename
4apt install docker-ce ...Cài đặt Docker Engine, CLI, containerd, Buildx plugin và Compose plugin
5systemctl start/enable dockerKhởi động Docker daemon và cấu hình tự khởi động cùng hệ thống

Lưu ý quan trọng: Script sử dụng docker-compose-plugin (Compose V2) thay vì docker-compose standalone (V1). Compose V2 được tích hợp trực tiếp vào Docker CLI với lệnh docker compose (không có dấu gạch ngang). Docker đã ngừng hỗ trợ Compose V1 từ tháng 7/2023.


Cấp quyền và chạy script

1
2
3
4
5
# Cấp quyền thực thi
chmod +x install-docker.sh

# Chạy script
sudo bash install-docker.sh

Xác nhận kết quả cài đặt

Sau khi script chạy xong, bạn sẽ thấy output tương tự:

1
2
3
4
5
$ docker --version
Docker version 28.1.1, build 4eba377

$ docker compose version
Docker Compose version v2.35.1

Để kiểm tra Docker hoạt động chính xác, chạy container thử nghiệm:

1
sudo docker run hello-world

Nếu thấy thông báo Hello from Docker!, quá trình cài đặt đã thành công.


Cấu hình sau cài đặt (Post-installation)

Cho phép user thường chạy Docker (không cần sudo)

Theo mặc định, lệnh docker yêu cầu quyền root. Để user thường có thể sử dụng Docker:

1
2
3
4
5
6
7
8
# Thêm user hiện tại vào group docker
sudo usermod -aG docker $USER

# Áp dụng thay đổi group (cần logout/login lại hoặc chạy lệnh sau)
newgrp docker

# Xác nhận — không cần sudo nữa
docker run hello-world

Cấu hình Docker khởi động cùng hệ thống

Script đã thực hiện bước này với systemctl enable docker. Để xác nhận:

1
2
sudo systemctl is-enabled docker
# Output: enabled

Ghi chú triển khai

  • Khi áp dụng vào dự án của bạn, hãy lưu ý:
    • Script chỉ hỗ trợ Ubuntu. Với Debian, CentOS, hoặc Fedora, cần thay đổi URL repository và lệnh package manager tương ứng
    • Luôn kiểm tra tài liệu chính thức để đảm bảo các bước cài đặt chưa thay đổi
    • set -e ở đầu script đảm bảo script dừng ngay khi có lệnh bị lỗi, tránh cài đặt không đầy đủ
  • Best practices:
    • Sử dụng docker compose (V2) thay vì docker-compose (V1) — V1 đã ngừng hỗ trợ
    • Không chạy container bằng user root trong production — cấu hình user thường với group docker
    • Sau khi cài đặt, cấu hình Docker daemon phù hợp với môi trường (log driver, storage driver, v.v.)
  • Troubleshooting:
    • Lỗi Permission denied khi chạy docker? → Đảm bảo user đã được thêm vào group docker và đã logout/login lại
    • Lỗi Cannot connect to the Docker daemon? → Kiểm tra Docker service: sudo systemctl status docker
    • GPG key bị lỗi khi apt update? → Xóa key cũ và chạy lại bước thêm GPG key: sudo rm /etc/apt/keyrings/docker.gpg

🎯 Lời kết

Với Bash Script trên, bạn có thể cài đặt Docker Engine và Docker Compose trên bất kỳ server Ubuntu nào chỉ với một lệnh duy nhất. Script sử dụng phương pháp cài đặt chính thức từ Docker repository, đảm bảo:

  • Luôn lấy phiên bản mới nhất từ repository chính thức
  • Cài đặt đầy đủ: Docker Engine, CLI, containerd, Buildx, và Compose V2
  • Tự động khởi động và enable Docker service

Bạn có thể lưu script này vào hệ thống quản lý cấu hình (Ansible, Terraform) hoặc đơn giản clone từ repository để sử dụng trên nhiều server. 🚀


Tài liệu tham khảo