Ứng dụng Docker giúp phát triển, xây dựng, chạy và chia sẻ các ứng dụng tích hợp dễ dàng hơn. Nó sử dụng các kỹ thuật ảo hóa để đóng gói các ứng dụng bên trong các container . Plug-in Docker Compose mở rộng các khả năng này, cho phép người dùng triển khai nhiều container ngay lập tức chỉ bằng một lệnh. Hướng dẫn này cung cấp một số thông tin cơ bản về Docker Compose và giải thích cách cài đặt và sử dụng nó.
Docker là gì?
Ứng dụng Docker cho phép chuẩn hóa và tự động hóa các môi trường điện toán sẵn sàng sản xuất. Vì lý do này, đây là ứng dụng Cơ sở hạ tầng dưới dạng Dịch vụ (IaaS) được sử dụng rộng rãi, đặc biệt là trong điện toán đám mây.
Docker triển khai các ứng dụng bên trong các container. Mỗi container dựa trên một hình ảnh Docker, mặc dù một hình ảnh có thể chứa nhiều container. Một container đóng gói một ứng dụng phần mềm, chẳng hạn như cơ sở dữ liệu hoặc máy chủ web, bên trong một môi trường ảo hóa. Gói này bao gồm mọi thứ cần thiết để chạy ứng dụng, bao gồm các thư viện, cấu hình và tiện ích hỗ trợ. Thành phần Docker Engine cho phép người dùng lưu trữ, quản lý và chạy các container.
Container Docker nhẹ, hiệu quả và có thể chạy trên nhiều hệ điều hành khác nhau. Các container được tách biệt với nhau và thường chỉ bao gồm một ứng dụng duy nhất. Để triển khai một giải pháp hệ thống hoàn chỉnh chứa nhiều ứng dụng, thường cần nhiều container. Trong ứng dụng Docker gốc, mỗi container phải được xử lý riêng biệt, khiến việc phối hợp triển khai nhiều container trở nên khó khăn. Để biết thêm thông tin về Docker, hãy xem Giới thiệu về Docker của Linode .
Docker Compose là gì?
Docker Compose V2 là một phần của bộ phần mềm Docker. Phiên bản Docker V2 hợp lý hóa mở rộng và thay thế phiên bản V1 gốc. Nó sử dụng các tệp cấu hình để xác định và xây dựng các ứng dụng đa thành phần. Một tệp cấu hình, được viết bằng YAML, thường xác định kiến trúc hoàn chỉnh của hệ thống. Nó chỉ định các ứng dụng cần cài đặt, cùng với cấu hình và cài đặt của chúng. Docker Compose cũng có thể cung cấp các cài đặt lưu trữ, mạng và cấu hình cho hệ thống.
Docker Compose cho phép người dùng đồng thời xây dựng, triển khai, dừng hoặc xóa nhiều container. Các lệnh bổ sung cung cấp quyền truy cập vào nhật ký dịch vụ hoặc trạng thái container. Các lệnh Compose áp dụng cho tất cả các container và không thể áp dụng cho một phiên bản container duy nhất. Docker Compose V2 có sẵn dưới dạng một phần của bộ Docker Desktop GUI hoặc dưới dạng plug-in cho Docker Engine/CLI.
Docker Compose V2 cho phép người dùng thiết lập môi trường điện toán nhanh chóng và dễ dàng từ dòng lệnh. Điều này có nghĩa là nó rất hữu ích trong môi trường phát triển và thử nghiệm, cũng như triển khai Linode đơn tự quản lý. Một số lợi ích bổ sung của Docker Compose V2 bao gồm:
- Mỗi dự án được tách biệt khỏi các dự án khác trên cùng một hệ thống. Điều này ngăn chặn các môi trường can thiệp lẫn nhau.
- Nó lưu trữ cấu hình. Khi một dịch vụ khởi động lại, Docker Compose chỉ tạo lại các container đã thay đổi kể từ lần cuối cùng container được khởi chạy.
- Nó lưu giữ mọi dữ liệu bên trong các ổ đĩa. Docker Compose tự động khôi phục các container từ các lần chạy trước đó và sao chép dữ liệu vào các container mới.
- Nó bao gồm hỗ trợ cho các biến và chuyển giải pháp sang một môi trường khác.
Phiên bản hiện tại của Docker Compose là Docker Compose V2. Hỗ trợ cho Docker Compose V1 sẽ kết thúc vào tháng 6 năm 2023, vì vậy người dùng V1 nên chuyển sang Compose V2 càng sớm càng tốt. Docker Compose V2 tích hợp lệnh compose
, thay thế docker-compose
tính năng V1, trực tiếp vào Docker CLI và Docker Engine. docker compose
Lệnh được thiết kế để thay thế ngay cho docker-compose
. Điều này có nghĩa là docker-compose
các lệnh V1 ánh xạ trực tiếp đến docker compose
lệnh V2 mà không cần sửa đổi thêm. Tuy nhiên, một số lệnh dư thừa đã bị loại bỏ trong khi các lệnh mới đã được thêm vào. Compose V1 được viết bằng Python, nhưng Compose V2 được viết bằng Go.
Đặc tả Docker Compose là gì?
Đặc tả tệp Docker Compose giải thích cách xây dựng tệp cấu hình Docker Compose V2. Tệp này được viết bằng YAML và bao gồm các chỉ thị chỉ định cách xây dựng và chạy một bộ vùng chứa Docker. Một tệp Compose thông thường phải bao gồm ít nhất một dịch vụ, ánh xạ tới một vùng chứa Docker. Tuy nhiên, hầu hết các cấu hình Compose V2 bao gồm nhiều dịch vụ. Tệp Compose cũng có thể bao gồm các định nghĩa cho hệ thống lưu trữ, cấu hình, thành phần mạng và bí mật hệ thống nhạy cảm.
Ghi chú: Định dạng tệp Docker Compose V2 khác với định dạng được sử dụng trong Compose V1. Compose V1 cho phép định dạng tệp V2 và V3, do đó các tệp cấu hình Compose V1 phải chỉ định định dạng tệp để sử dụng. Thật khó hiểu, các định dạng tệp này không liên quan đến phiên bản Docker Compose hoặc số bản phát hành. Định dạng tệp hiện đã được chuẩn hóa trong Docker Compose V2, do đó các tệp cấu hình V2 không còn bao gồm thông tin này nữa.
Kiến trúc Docker Compose cho phép một hệ thống lưu trữ nhiều dự án. Mỗi dự án được đặt trong một thư mục riêng và bao gồm docker-compose.yml
tệp riêng. Tệp này bao gồm nhiều thành phần, nhưng chỉ có services
phần là bắt buộc. Các phần khác là tùy chọn. Sau đây là danh sách các phần chính của một docker-compose.yml
tệp.
- Dịch vụ : Mục bắt buộc này định nghĩa một tài nguyên điện toán. Mỗi mục bên trong
services
phần này là một ứng dụng có thể được mở rộng độc lập. Một dịch vụ tham chiếu đến một hình ảnh Docker và ánh xạ đến một hoặc nhiều vùng chứa. Một số ví dụ về dịch vụ có thể bao gồm MySQL, NGINX, Redis và WordPress. - Volume : Volume xác định đường dẫn nơi ứng dụng có thể lưu trữ dữ liệu. Mặc dù
services
thường xác định không gian lưu trữ riêng, nhưng volume có thể phân bổ lưu trữ dùng chung cho nhiều dịch vụ. - Mạng : Mạng cho phép các dịch vụ giao tiếp với nhau hoặc với các mạng bên ngoài. Theo mặc định, Docker Compose tạo một mạng duy nhất để tất cả các dịch vụ sử dụng. Phần này có thể được sử dụng để xác định kết nối với các mạng khác hoặc mạng dành riêng cho ứng dụng. Có thể truy cập mạng bằng cùng tên máy chủ với tên vùng chứa.
- Configs : Xác định vùng lưu trữ cố định cho cấu hình ứng dụng.
- Bí mật : Bí mật lưu trữ các thuộc tính cấu hình nhạy cảm an toàn hơn. Chúng thường được bảo vệ thông qua việc sử dụng khóa hoặc chứng chỉ.
Mỗi thành phần được định nghĩa bằng một tập hợp các tham số. Ví dụ, mỗi mục trong services
phải định nghĩa một mục image
để sử dụng. Nó cũng có thể tùy chọn định nghĩa các tham số web, cổng dịch vụ, lệnh cấu hình và biến môi trường. Để biết thông tin đầy đủ về cách xây dựng docker-compose.yml
tệp, hãy tham khảo thông số kỹ thuật Docker Compose .
Một số ứng dụng cũng yêu cầu Dockerfile . Tệp này giải thích cách xây dựng ứng dụng theo cách không phụ thuộc vào nền tảng. Tuy nhiên, nhiều ứng dụng chỉ sử dụng hình ảnh Docker được dựng sẵn và không yêu cầu Dockerfile. Để biết thêm thông tin về cách xây dựng ứng dụng bằng Dockerfile kết hợp với Docker Compose, hãy xem tài liệu Docker Compose .
Trước khi bạn bắt đầu
- Nếu bạn chưa thực hiện, hãy tạo một tài khoản Linode và Compute Instance. Xem hướng dẫn Bắt đầu với Linode và Tạo Compute Instance của chúng tôi .
- Làm theo hướng dẫn Thiết lập và Bảo mật Phiên bản Compute của chúng tôi để cập nhật hệ thống của bạn. Bạn cũng có thể muốn đặt múi giờ, cấu hình tên máy chủ, tạo tài khoản người dùng giới hạn và tăng cường quyền truy cập SSH.
Ghi chú: Các bước trong hướng dẫn này được viết cho người dùng không phải root. Các lệnh yêu cầu quyền nâng cao được thêm tiền tố sudo
. Nếu bạn không quen với sudo
lệnh này, hãy xem hướng dẫn Người dùng và Nhóm Linux .
Cách cài đặt Docker Compose và Docker Engine
Có hai phương pháp cài đặt Docker Compose. Docker Compose thường được cài đặt dưới dạng plug-in. Plug-in Compose yêu cầu Docker Engine và Docker CLI, và được tích hợp chặt chẽ với các thành phần này. Phương pháp thứ hai là cài đặt Docker Desktop, một giao diện GUI tích hợp bao gồm Docker Compose. Docker Desktop nằm ngoài phạm vi của hướng dẫn này. Xem tài liệu Docker Desktop để biết thêm thông tin về tùy chọn này.
Hướng dẫn này tập trung vào cách cài đặt plug-in Docker Compose. Docker Engine phải được cài đặt cùng với Docker Compose trước khi có thể sử dụng plug-in. Hướng dẫn này hướng đến người dùng Ubuntu 22.04 LTS nhưng nhìn chung có thể áp dụng cho tất cả các bản phân phối Linux. Có thể tìm thấy hướng dẫn chính xác cho các Nền tảng được hỗ trợ khác trên trang cài đặt Docker Engine .
Để cài đặt cả Docker Engine và Docker Compose, hãy làm theo các bước sau.
1.Đảm bảo hệ thống được cập nhật bằng cách sử dụng bên dưới. Khởi động lại hệ thống nếu cần thiết.
sudo apt-get update -y && sudo apt-get upgrade -y
2.Xóa mọi phiên bản Docker cũ hoặc các thành phần liên quan. Những thành phần này có thể không tương thích với Docker Compose V2.
Ghi chú: Nếu phiên bản Docker cũ hơn đã được cài đặt trên hệ thống, hãy tham khảo hướng dẫn Gỡ cài đặt Docker . Điều quan trọng là phải xóa mọi container và ổ đĩa cũ để tránh xung đột trong tương lai.
sudo apt-get remove docker docker-engine docker.io containerd runc
3.Để cài đặt Docker Engine, cần có một số thành phần bổ sung. Cài đặt chúng bằng cách sử dụng apt
. Một số gói này có thể đã được cài đặt trên hệ thống.
sudo apt-get install ca-certificates curl gnupg lsb-release
4.Thêm Khóa GNU Privacy Guard (GPG) chính thức để xác thực cài đặt.
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
5.Thêm kho lưu trữ Docker vào danh sách apt
các gói.
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
6.Cập nhật danh sách apt
các gói.
sudo apt-get update
7.Cài đặt phiên bản mới nhất của Docker Engine, Docker CLI containerd
và các thành phần liên quan khác.
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
8.Chạy hello-world
container để đảm bảo Docker được cài đặt đúng cách. Docker tải xuống container phù hợp và chạy nó.
sudo docker run hello-world
Nếu mọi thứ được cài đặt đúng cách, Docker sẽ hiển thị thông báo như hình bên dưới.
Hello from Docker!
This message shows that your installation appears to be working correctly.
9.Đảm bảo plug-in Docker Compose đang hoạt động bình thường. Chạy lệnh docker compose version
và xác minh số bản phát hành. Nếu bản phát hành bắt đầu bằng v2
, Docker Compose V2 đã được cài đặt đúng.
docker compose version
Docker Compose version v2.16.0
Cách tạo tệp YAML Docker Compose
Docker Compose kiểm tra docker-compose.yml
tệp để xác định các container cần xây dựng và chạy. Mỗi dự án phải bao gồm một docker-compose.yml
tệp bên trong thư mục dự án. Không thể chạy Docker Compose nếu không có tệp này. Đối với các hệ thống cực kỳ phức tạp, docker-compose
có thể kết hợp nhiều tệp. Các mục được ghi đè hoặc thêm vào tùy thuộc vào hệ thống phân cấp tệp. Nhưng đối với hầu hết các ứng dụng đơn giản, một docker-compose
tệp duy nhất là đủ.
Ví dụ sau đây minh họa cách xây dựng docker-compose.yml
tệp cho cài đặt WordPress đơn giản. Tệp bao gồm WordPress và các dịch vụ cơ sở dữ liệu cùng với các thư mục lưu trữ được chia sẻ. Để tạo tệp YAML Docker Compose, hãy làm theo các bước sau.
Ghi chú: Ví dụ này được lấy từ Docker Sample Projects . Có thể hữu ích khi sử dụng một trong những tệp mẫu này làm điểm khởi đầu cho dự án của riêng bạn.
1.Tạo một thư mục cho dự án mới và đổi nó thành thư mục. Trong ví dụ này, thư mục được đặt tên là wordpress
.
mkdir wordpress
cd wordpress
2.Tạo một tệp có tên docker-compose.yml
.
vi docker-compose.yml
3.Đầu tiên, thêm services
phần. Thêm một dịch vụ có tên là mariadb
. Dịch vụ này xác định vùng chứa cơ sở dữ liệu.
services:
mariadb:
4.Xác định các tham số cho mariadb
dịch vụ. Các tham số sau được sử dụng:
- Tham số này
command
cung cấp các đối số dòng lệnh cho ứng dụng. - Lệnh này
image
cho Docker Compose biết hình ảnh nào cần kéo và sử dụng để xây dựng container. Hình ảnh phải tồn tại, cục bộ hoặc trên Docker Hub. - Thuộc tính này
volumes
chỉ định thư mục mà ứng dụng có thể lưu trữ dữ liệu. - Thuộc tính này
environment
bao gồm các định nghĩa cho tên cơ sở dữ liệu, người dùng và mật khẩu người dùng. - Chỉ thị này
expose
liệt kê các cổng mà cơ sở dữ liệu có thể sử dụng. - Thiết lập
restart
đểalways
yêu cầu Docker khởi động container khi hệ thống kích hoạt. - Thêm nội dung sau vào
mariadb
dịch vụ. Thay thếpassword
bằng mật khẩu an toàn choMYSQL_PASSWORD
và bằng mật khẩu gốc choMYSQL_ROOT_PASSWORD
. Có thể chấp nhận đặt tên cơ sở dữ liệu và người dùng thànhwordpress
.
services:
mariadb:
image: mariadb:10.11.2-jammy
command: '--default-authentication-plugin=mysql_native_password'
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=password
expose:
- 3306
- 33060
...
5.Thêm wordpress
dịch vụ. Các trường WORDPRESS_DB_USER
, WORDPRESS_DB_PASSWORD
, và WORDPRESS_DB_NAME
phải khớp với các tham số tương ứng từ mariadb
phần. ports
Thuộc tính này chỉ ra các cổng mà ứng dụng nên sử dụng.
services:
...
wordpress:
image: wordpress:latest
volumes:
- wp_data:/var/www/html
ports:
- 8000:80
restart: always
environment:
- WORDPRESS_DB_HOST=mariadb
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=password
- WORDPRESS_DB_NAME=wordpress
...
6.Cuối cùng, thêm volumes
phần. Thêm các ổ đĩa thư mục cho các dịch vụ mariadb
và wordpress
.
...
volumes:
db_data:
wp_data:
7.Toàn bộ tệp sẽ giống như ví dụ sau.
services:
mariadb:
image: mariadb:10.11.2-jammy
command: '--default-authentication-plugin=mysql_native_password'
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=password
expose:
- 3306
- 33060
wordpress:
image: wordpress:latest
volumes:
- wp_data:/var/www/html
ports:
- 8000:80
restart: always
environment:
- WORDPRESS_DB_HOST=mariadb
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=password
- WORDPRESS_DB_NAME=wordpress
volumes:
db_data:
wp_data:
Cách xây dựng và chạy một dự án Docker Compose
Docker Compose giúp bạn dễ dàng khởi chạy một dự án. Sử dụng docker compose up
lệnh. Để khởi chạy dự án Docker Compose WordPress, hãy làm theo các bước sau.
1.Chuyển đến thư mục dự án chính chứa docker-compose.yml
tệp.
cd wordpress
2.Sử dụng docker compose up
lệnh để khởi chạy ứng dụng. Thêm -d
tùy chọn để chạy các container ở chế độ nền. Điều này không chặn phiên điều khiển hiện tại và đảm bảo có thể sử dụng để kiểm tra kết quả. Có thể mất một hoặc hai phút để tải xuống và khởi động các container.
sudo docker compose up -d
[+] Running 31/3
⠿ wordpress Pulled 44.6s
⠿ mariadb Pulled 35.5s
[+] Running 5/5
⠿ Network wordpress_default Created 0.3s
⠿ Volume "wordpress_wp_data" Create... 0.0s
⠿ Volume "wordpress_db_data" Create... 0.0s
⠿ Container wordpress-mariadb-1 Sta... 3.0s
⠿ Container wordpress-wordpress-1 S... 3.0s
3.Kiểm tra ứng dụng để đảm bảo dự án Docker đang chạy đúng. Điều hướng đến địa chỉ IP của máy chủ và thêm cổng :8000
hoặc sử dụng địa chỉ http://ip_address:8000/wp-admin/install.php
. Trang cài đặt WordPress sẽ xuất hiện. Chọn ngôn ngữ phù hợp và tiếp tục cài đặt. Cung cấp thông tin đăng nhập của người dùng và thông tin chi tiết về cơ sở dữ liệu khi được nhắc. Xem Hướng dẫn Linode về Cách cài đặt WordPress trên Ubuntu 22.04 để biết thêm chi tiết.

4.Để xem danh sách tất cả các container Docker, hãy chạy lệnh docker compose images
.
sudo docker compose images
CONTAINER REPOSITORY TAG IMAGE ID SIZE
wordpress-mariadb-1 mariadb 10.11.2-jammy 6e11fcfc66ad 401MB
wordpress-wordpress-1 wordpress latest 8fec96b2307f
5.Lệnh này docker compose ps
cung cấp danh sách tất cả các tiến trình đang hoạt động liên quan đến vùng chứa.
sudo docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
wordpress-mariadb-1 mariadb:10.11.2-jammy "docker-entrypoint.s…" mariadb 2 minutes ago Up 2 minutes 3306/tcp, 33060/tcp
wordpress-wordpress-1 wordpress:latest "docker-entrypoint.s…" wordpress 2 minutes ago Up 2 minutes 0.0.0.0:8000->80/tcp, :::8000->80/tcp
6.Trong điều kiện hoạt động bình thường, trang web WordPress chạy liên tục. Tuy nhiên, để đưa ứng dụng xuống và xóa các container, hãy sử dụng lệnh docker compose down
. Lệnh này giữ nguyên nội dung cơ sở dữ liệu. Tuy nhiên, lệnh này docker compose down --volumes
xóa các container, cơ sở dữ liệu và tất cả dữ liệu.
sudo docker compose down
Phần kết luận
Docker Compose V2 giúp người dùng xây dựng, chạy và triển khai các giải pháp Docker đa container. Nó sử dụng tệp cấu hình YAML để xác định các dịch vụ, mạng và khối lượng của hệ thống. Docker Compose V2 và lệnh docker compose
thay thế Compose V1 và docker-compose
chỉ thị.
Để cài đặt và sử dụng Docker Compose V2, hãy thêm kho lưu trữ Docker vào trình quản lý gói cục bộ. Sau đó tải xuống và cài đặt Docker Engine, Docker CLI và plugin Compose. Xây dựng tệp docker-compose.yml
, thêm các dịch vụ/thùng chứa để sử dụng, cùng với bất kỳ không gian lưu trữ, thành phần mạng và cấu hình nào. Sau đó sử dụng lệnh docker compose up
để xây dựng và chạy các thùng chứa. Để biết thêm thông tin về Docker Compose V2, hãy xem tài liệu Docker Compose .
Thông tin thêm
Bạn có thể muốn tham khảo các nguồn sau để biết thêm thông tin về chủ đề này. Mặc dù chúng tôi cung cấp với hy vọng rằng chúng sẽ hữu ích, nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc tính kịp thời của các tài liệu được lưu trữ bên ngoài.
- Tổng quan về Docker Compose
- Đặc tả tệp cấu hình Docker Compose
- Các dự án mẫu Docker Compose
- CLI Docker Compose
- Người lái tàu
- Trang cài đặt Docker Engine
- Tài liệu Docker
Nguồn: https://www.linode.com/docs/guides/how-to-use-docker-compose-v2/