Ngày đăng: 5 tháng 4 năm 2024
Docker là một công cụ tuyệt vời để tự động hóa việc triển khai các ứng dụng Linux bên trong các vùng chứa phần mềm, nhưng để tận dụng tối đa tiềm năng của nó, mỗi thành phần của ứng dụng phải chạy trong vùng chứa riêng của nó. Đối với các ứng dụng phức tạp có nhiều thành phần, việc sắp xếp tất cả các vùng chứa để khởi động, liên lạc và tắt cùng nhau có thể trở nên khó sử dụng.
Cộng đồng Docker đã đưa ra một giải pháp phổ biến có tên Fig, cho phép bạn sử dụng một tệp YAML duy nhất để sắp xếp tất cả các cấu hình và vùng chứa Docker của bạn. Điều này trở nên phổ biến đến mức nhóm Docker quyết định tạo Docker Compose dựa trên nguồn Fig, hiện không được dùng nữa.
Docker Compose giúp người dùng dễ dàng điều phối các quy trình của vùng chứa Docker, bao gồm khởi động, tắt cũng như thiết lập volumes và liên kết nội bộ vùng chứa. Trong hướng dẫn này, bạn sẽ cài đặt phiên bản Docker Compose mới nhất để quản lý các ứng dụng nhiều vùng chứa.
Để theo dõi bài viết này, bạn sẽ cần một máy chủ Ubuntu 18.04 có các thông tin sau:
Lưu ý: Hướng dẫn này sẽ hướng dẫn bạn cài đặt Docker Compose v1, sử dụng docker-compose
. Bắt đầu với Docker Compose v2, Docker đã chuyển sang sử dụng lệnh compose
CLI plugin như được ghi lại trong phiên bản Ubuntu 22.04 mới nhất của chúng tôi trong hướng dẫn này và tránh xa tệp docker-compose
. Mặc dù quá trình cài đặt có khác nhau nhưng nhìn chung cách sử dụng thực tế liên quan đến việc bỏ dấu gạch nối khỏi các lệnh gọi docker-compose
để trở thành docker compose
. Để biết chi tiết về khả năng tương thích đầy đủ, hãy kiểm tra tài liệu Docker chính thức về khả năng tương thích lệnh giữa compose
mới và docker-compose
cũ.
Mặc dù bạn có thể cài đặt Docker Compose từ kho lưu trữ chính thức của Ubuntu, nhưng bản phát hành mới nhất có một số phiên bản nhỏ, vì vậy bạn sẽ cài đặt Docker Compose từ kho lưu trữ GitHub của Docker. Lệnh bên dưới hơi khác so với lệnh bạn tìm thấy trên trang Releases. Bằng cách sử dụng cờ -o
để chỉ định tệp đầu ra trước thay vì chuyển hướng đầu ra, cú pháp này sẽ tránh gặp phải lỗi từ chối cấp phép gây ra khi sử dụng sudo
.
Kiểm tra bản phát hành hiện tại và nếu cần, hãy cập nhật nó bằng lệnh bên dưới:
- sudo curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
Tiếp theo đặt quyền:
- sudo chmod +x /usr/local/bin/docker-compose
Sau đó, bạn sẽ xác minh rằng quá trình cài đặt đã thành công bằng cách kiểm tra phiên bản:
- docker-compose --version
Điều này sẽ in ra phiên bản bạn đã cài đặt:
Outputdocker-compose version 1.29.2, build 5becea4c
Bây giờ bạn đã cài đặt Docker Compose, bạn đã sẵn sàng chạy ví dụ “Hello World”.
Cơ quan đăng ký Docker công khai, Docker Hub, bao gồm hình ảnh Hello World để trình diễn và thử nghiệm. Nó minh họa cấu hình tối thiểu cần thiết để chạy một vùng chứa bằng Docker Compose: một tệp YAML gọi một hình ảnh:
Trước tiên, bạn sẽ tạo một thư mục cho tệp YAML và chuyển vào đó:
- mkdir hello-world
- cd hello-world
Sau đó, bạn sẽ tạo tệp YAML:
- nano docker-compose.yml
Đặt các nội dung sau vào tệp, lưu tệp và thoát khỏi trình soạn thảo văn bản:
my-test:
image: hello-world
Dòng đầu tiên trong tệp YAML được sử dụng như một phần của tên vùng chứa. Dòng thứ hai chỉ định hình ảnh nào sẽ sử dụng để tạo vùng chứa. Khi bạn chạy lệnh docker-compose up
, nó sẽ tìm hình ảnh cục bộ theo tên bạn đã chỉ định, hello-world
. Với điều này, bạn sẽ lưu và thoát tệp.
Bạn có thể xem thủ công các hình ảnh trên hệ thống của mình bằng lệnh docker images
:
- docker images
Khi không có hình ảnh cục bộ nào cả, chỉ hiển thị các tiêu đề cột:
OutputREPOSITORY TAG IMAGE ID CREATED SIZE
Bây giờ, khi vẫn ở trong thư mục ~/hello-world
, bạn sẽ thực thi lệnh sau:
- docker-compose up
Lần đầu tiên bạn chạy lệnh, nếu không có image cục bộ có tên hello-world
, Docker Compose sẽ lấy nó từ kho lưu trữ công cộng Docker Hub:
OutputPulling my-test (hello-world:latest)...
latest: Pulling from library/hello-world
c04b14da8d14: Downloading [==================================================>] c04b14da8d14: Extracting [==================================================>] c04b14da8d14: Extracting [==================================================>] c04b14da8d14: Pull complete
Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
Status: Downloaded newer image for hello-world:latest
. . .
Lưu ý: Nếu bạn gặp phải lỗi cấp phép liên quan đến Docker socket, điều này có nghĩa là bạn đã bỏ qua Bước 2 của Cách cài đặt và sử dụng Docker trên Ubuntu 18.04. Quay lại và hoàn thành bước đó sẽ cho phép quyền chạy các lệnh docker mà không cần sudo
.
Sau khi kéo hình ảnh, docker-compose
tạo một vùng chứa, đính kèm và chạy chương trình hello, từ đó xác nhận rằng quá trình cài đặt có vẻ đang hoạt động:
Output. . .
Creating helloworld_my-test_1...
Attaching to helloworld_my-test_1
my-test_1 |
my-test_1 | Hello from Docker.
my-test_1 | This message shows that your installation appears to be working correctly.
my-test_1 |
. . .
Sau đó, nó in một lời giải thích về những gì nó đã làm:
Output. . .
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.
. . .
Các vùng chứa Docker chỉ chạy miễn là lệnh được kích hoạt, vì vậy sau khi hello
chạy xong, vùng chứa sẽ dừng lại. Do đó, khi bạn xem các tiến trình đang hoạt động, tiêu đề cột sẽ xuất hiện nhưng vùng chứa hello-world
sẽ không được liệt kê vì nó không chạy.
- docker ps
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Bạn có thể xem thông tin về vùng chứa mà bạn sẽ cần trong bước tiếp theo bằng cách sử dụng cờ -a
hiển thị tất cả các vùng chứa, không chỉ các vùng chứa đang hoạt động:
- docker ps -a
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
06069fd5ca23 hello-world "/hello" 35 minutes ago Exited (0) 35 minutes ago drunk_payne
Thao tác này sẽ hiển thị thông tin bạn cần để xóa vùng chứa khi bạn thực hiện xong.
Để tránh sử dụng dung lượng đĩa không cần thiết, bạn sẽ xóa hình ảnh cục bộ. Để làm như vậy, bạn sẽ cần xóa tất cả các vùng chứa tham chiếu hình ảnh bằng lệnh docker rm
, theo sau là CONTAINER ID hoặc NAME. Bên dưới, bạn đang sử dụng CONTAINER ID từ lệnh docker ps -a
mà bạn vừa chạy. Đảm bảo thay thế ID vùng chứa của bạn:
- docker rm 06069fd5ca23
Khi tất cả vùng chứa tham chiếu đến hình ảnh đã bị xóa, bạn có thể xóa hình ảnh:
- docker rmi hello-world
Bây giờ bạn đã cài đặt Docker Compose, kiểm tra cài đặt của mình bằng cách chạy ví dụ Hello World, đồng thời xóa hình ảnh và vùng chứa thử nghiệm.
Mặc dù ví dụ Hello World đã xác nhận cài đặt của bạn, nhưng cấu hình đơn giản không cho thấy một trong những lợi ích chính của Docker Compose — khả năng đưa một nhóm vùng chứa Docker lên và xuống cùng một lúc. Để thấy sức mạnh của Docker Compose trong thực tế, bạn có thể xem ví dụ thực tế này, Cách định cấu hình môi trường thử nghiệm tích hợp liên tục với Docker và Docker Compose trên Ubuntu 16.04 (lưu ý: bài viết này dành cho Ubuntu 16.04 chứ không phải 18.04)