Docker là một công cụ mạnh mẽ giúp tự động hóa việc triển khai ứng dụng trên hệ điều hành Linux trong các container phần mềm. Tuy nhiên, để tận dụng tối đa khả năng của Docker, mỗi thành phần trong ứng dụng nên được chạy trong một container riêng biệt. Đối với các ứng dụng phức tạp với nhiều thành phần, việc quản lý khởi động, giao tiếp và tắt các container đồng thời có thể trở nên khó khăn và khó kiểm soát.
Để giải quyết vấn đề này, cộng đồng Docker đã phát triển một giải pháp phổ biến gọi là Fig, cho phép người dùng điều phối tất cả các container và cấu hình liên quan thông qua một tệp YAML duy nhất. Fig nhanh chóng trở nên nổi bật, và sau đó nhóm phát triển Docker đã quyết định xây dựng Docker Compose dựa trên mã nguồn của Fig (hiện nay, Fig không còn được sử dụng nữa).
Nếu bạn đang tìm kiếm một giải pháp VPS Hosting ổn định để triển khai Docker Compose trên Ubuntu 18.04, hãy khám phá các gói dịch vụ của chúng tôi. Với hiệu suất cao và hỗ trợ kỹ thuật 24/7, chúng tôi giúp bạn dễ dàng quản lý và vận hành các ứng dụng container hóa một cách hiệu quả.
Docker Compose giúp người dùng dễ dàng quản lý và điều phối các tiến trình container Docker, từ việc khởi động, tắt cho đến việc thiết lập các liên kết và volume giữa các container. Bài viết này sẽ hướng dẫn bạn cách cài đặt phiên bản mới nhất của Docker Compose để quản lý các ứng dụng với nhiều container.
Yêu cầu
Để theo dõi bài viết này, bạn cần có một máy chủ Ubuntu 18.04 với các điều kiện sau:
● Một người dùng không phải root có quyền sudo
– Tham khảo Hướng dẫn thiết lập máy chủ ban đầu với Ubuntu 18.04 để biết cách thiết lập.
● Docker đã được cài đặt theo hướng dẫn từ Bước 1 và Bước 2 của bài viết Cài đặt và Sử dụng Docker trên Ubuntu 18.04.
Lưu ý: Hướng dẫn này sẽ chỉ dẫn bạn cài đặt Docker Compose v1, sử dụng lệnh docker-compose. Bắt đầu từ Docker Compose v2, Docker đã chuyển sang sử dụng lệnh plugin CLI là compose như được ghi trong phiên bản hướng dẫn mới nhất trên Ubuntu 22.04, thay vì sử dụng docker-compose gốc. Mặc dù cách cài đặt có thể khác nhau, nhưng về cơ bản, việc sử dụng sẽ chỉ khác ở chỗ bỏ dấu gạch nối trong các lệnh gọi từ docker-compose thành docker compose. Để biết chi tiết về tính tương thích đầy đủ, hãy tham khảo tài liệu chính thức của Docker về sự tương thích lệnh giữa phiên bản compose mới và docker-compose cũ.
Bước 1 – Cài đặt Docker Compose
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 phiên bản đó thường bị lạc hậu so với bản phát hành mới nhất. Do đó, bạn sẽ cài đặt Docker Compose trực tiếp từ kho GitHub của Docker.
Lệnh dưới đây hơi khác so với lệnh được cung cấp trên trang Releases. Bằng cách sử dụng tham số -o để chỉ định tệp đầu ra trước thay vì chuyển hướng output, cú pháp này sẽ tránh gặp lỗi “permission denied” khi sử dụng sudo.
Kiểm tra phiên bản hiện tại và nếu cần, cập nhật phiên bản trong lệnh dưới đây:
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, bạn đặt quyền thực thi cho tệp:
sudo chmod +x /usr/local/bin/docker-compose
Sau đó, bạn xác minh rằng việc cài đặt đã thành công bằng cách kiểm tra phiên bản:
docker-compose --version
Lệnh này sẽ in ra phiên bản bạn đã cài đặt:
Output docker-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”.
Bước 2 – Chạy một Container với Docker Compose
Docker Hub – kho lưu trữ công khai của Docker – bao gồm một hình ảnh (image) “Hello World” dùng cho mục đích trình diễn và kiểm tra. Nó minh họa cấu hình tối thiểu cần thiết để chạy một container sử dụng Docker Compose: một tệp YAML gọi đến một image duy nhất.
Trước tiên, bạn tạo một thư mục để chứa tệp YAML và di chuyển vào thư mục đó:
mkdir hello-world cd hello-world
Tiếp theo, bạn tạo tệp YAML:
nano docker-compose.yml
Sau đó, đưa nội dung sau vào tệp, lưu và thoát trình soạn thảo:
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 container. Dòng thứ hai chỉ định image nào sẽ được sử dụng để tạo container. Khi bạn chạy lệnh docker-compose up, Docker Compose sẽ tìm kiếm image có tên hello-world trên máy của bạn. Sau đó, lưu và thoát tệp.
Bạn có thể kiểm tra các image có sẵn trên hệ thống bằng lệnh:
docker images
Khi không có image nào được tải về cục bộ, chỉ các tiêu đề cột được hiển thị:
Output REPOSITORY TAG IMAGE ID CREATED SIZE
Giờ, trong thư mục ~/hello-world, bạn chạy lệnh:
docker-compose up
Lần đầu tiên chạy lệnh này, nếu không có image hello-world cục bộ, Docker Compose sẽ tự động tải image đó từ Docker Hub:
Output Pulling 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 lỗi về quyền liên quan đến Docker socket, điều đó có nghĩa là bạn đã bỏ qua Bước 2 của bài viết 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 bạn chạy các lệnh Docker mà không cần sử dụng sudo.
Sau khi tải về image, docker-compose sẽ tạo ra một container, đính kèm và chạy chương trình “Hello World”, qua đó xác nhận rằng cài đặt của bạn đang hoạt động đú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 ra lời giải thích về những gì đã thực hiện:
Output of docker-compose up . . . 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 container Docker chỉ chạy miễn là lệnh của chúng còn hoạt động, vì vậy sau khi chương trình “Hello World” chạy xong, container sẽ dừng lại. Do đó, khi bạn kiểm tra các tiến trình đang chạy, bạn chỉ thấy tiêu đề cột, vì container hello-world không còn hiển thị do đã dừng.
Để kiểm tra container đang hoạt động, bạn có thể dùng lệnh:
docker ps
Output CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Bạn có thể xem thông tin container (bao gồm cả những container không hoạt động) bằng cách sử dụng tham số -a:
docker ps -a
Output CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 06069fd5ca23 hello-world "/hello" 35 minutes ago Exited (0) 35 minutes ago drunk_payne
Thông tin này sẽ giúp bạn xóa container khi không cần thiết nữa.
Bước 3 – Xóa Image
Để tránh sử dụng không gian đĩa không cần thiết, bạn có thể xóa image cục bộ. Trước tiên, bạn cần xóa tất cả các container tham chiếu đến image đó bằng lệnh docker rm, theo sau là CONTAINER ID hoặc NAME. Ví dụ, bạn sử dụng CONTAINER ID từ lệnh docker ps -a vừa chạy:
docker rm 06069fd5ca23
Sau khi đã xóa hết các container liên quan đến image, bạn có thể xóa image bằng lệnh:
docker rmi hello-world
中文 (中国)
English
