Docker là một công cụ mạnh mẽ giúp tự động hóa việc triển khai các ứng dụng Linux trong môi trường container. Tuy nhiên, để khai thác hết tiềm năng của Docker, mỗi thành phần trong ứng dụng nên chạy trong một container riêng biệt. Đối với các ứng dụng phức tạp có nhiều thành phần, việc điều phối tất cả các container để khởi động, giao tiếp và tắt đồng thời có thể trở nên phức tạp.
Cộng đồng Docker đã phát triển một giải pháp hiệu quả có tên Fig, cho phép người dùng sử dụng một file YAML duy nhất để quản lý và điều phối tất cả các container Docker và cấu hình của chúng. Fig nhanh chóng trở nên phổ biến đến mức đội ngũ Docker quyết định phát triển Docker Compose dựa trên mã nguồn của Fig (hiện tại Fig đã bị ngừng sử dụng). Docker Compose giúp đơn giản hóa việc điều phối quá trình hoạt động của các container Docker, bao gồm việc khởi động, tắt và thiết lập kết nối giữa các container, cũng như cấu hình volumes.
Bạn đang tìm hiểu về Docker Compose trên Ubuntu 16.04? Nếu muốn triển khai ứng dụng trên môi trường Windows, hãy khám phá danh mục VPS Windows của chúng tôi. Các giải pháp VPS Windows giúp bạn dễ dàng quản lý container và tối ưu hóa hiệu suất ứng dụng một cách linh hoạt.
DataOnline sẽ hướng dẫn bạn tìm hiểu cách cài đặt phiên bản mới nhất của Docker Compose, giúp bạn quản lý và triển khai các ứng dụng đa container hiệu quả.
Yêu Cầu
Để theo dõi bài viết này, bạn sẽ cần một máy chủ chạy Ubuntu 16.04 với các yêu cầu sau:
-
Một người dùng không phải root có quyền sudo
(tham khảo Thiết lập máy chủ ban đầu với Ubuntu 16.4 để biết cách thiết lập). -
Docker đã được cài đặt theo hướng dẫn ở Bước 1 và Bước 2 của bài Cách Cài Đặt và Sử Dụng Docker trên Ubuntu 16.04.
Khi đã đáp ứng đủ các yêu cầu, bạn đã sẵn sàng để thực hiện theo dõi bài viết này.
Lưu ý: Mặc dù phần Yêu Cầu chỉ hướng dẫn cài đặt Docker trên Ubuntu 16.04, các lệnh docker trong bài này vẫn hoạt động trên các hệ điều hành khác miễn là Docker đã được cài đặt.
Bước 1 – Cài đặt Docker Compose
Mặc dù chúng ta có thể cài đặt Docker Compose từ các kho lưu trữ chính thức của Ubuntu, nhưng phiên bản có sẵn thường kém hơn một vài phiên bản so với bản phát hành mới nhất. Vì vậy, chúng ta sẽ cài Docker Compose từ kho GitHub của Docker. Lệnh dưới đây có cú pháp hơi khác so với phiên bản trên trang Releases. Bằng cách sử dụng tham số -o
để chỉ định file đầu ra trước thay vì chuyển hướng output, cú pháp này giúp tránh lỗi “permission denied” khi sử dụng sudo.
Chúng ta sẽ kiểm tra phiên bản hiện tại và nếu cần, cập nhật nó trong lệnh dưới đây:
sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
Tiếp theo, chúng ta sẽ thiết lập quyền cho file vừa tải về:
sudo chmod +x /usr/local/bin/docker-compose
Sau đó, chúng ta sẽ kiểm tra xem việc cài đặt đã thành công hay chưa bằng cách kiểm tra phiên bản:
docker-compose --version
Lệnh trên sẽ in ra phiên bản chúng ta vừa cài đặt:
Output docker-compose version 1.18.0, build 8dd22a9
Giờ đây, khi đã cài Docker Compose thành công, chúng ta đã 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 image Hello World để trình diễn và kiểm tra. Image này 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 file YAML gọi một image đơn lẻ.
Trước tiên, ta sẽ tạo một thư mục cho file YAML và chuyển vào thư mục đó:
mkdir hello-world cd hello-world
Sau đó, ta sẽ tạo file YAML:
nano docker-compose.yml
Nhập nội dung sau vào file, sau đó lưu file và thoát khỏi trình soạn thảo:
docker-compose.yml my-test: image: hello-world
-
Dòng đầu tiên trong file YAML được dùng như một phần của tên container.
-
Dòng thứ hai chỉ định image nào sẽ được dùng để tạo container.
Khi chúng ta chạy lệnh docker-compose up
, hệ thống sẽ tìm một image cục bộ theo tên chúng ta đã chỉ định, ở đây là hello-world
. Với cấu hình này, hãy lưu file và thoát ra.
Bạn có thể kiểm tra danh sách các image có trên hệ thống bằng lệnh:
docker images
Khi không có image cục bộ nào, chỉ có tiêu đề cột được hiển thị:
Output REPOSITORY TAG IMAGE ID CREATED SIZE
Bây giờ, trong thư mục ~/hello-world
, chúng ta sẽ thực thi lệnh:
docker-compose up
Lần đầu tiên chạy lệnh này, nếu không có image cục bộ tên là hello-world
, Docker Compose sẽ tự động tải về image từ kho DataOnline Hub công khai:
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 . . .
Sau khi tải về image, docker-compose
sẽ tạo một container, gắn kết và chạy chương trình hello, chương trình này sẽ xác nhận rằng việc cài đặt đã 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.
Lưu ý: Các container Docker chỉ chạy miễn là lệnh của chúng đang hoạt động, vì vậy khi chương trình hello
kết thúc, container sẽ tự động dừng lại. Do đó, khi chúng ta kiểm tra các tiến trình đang chạy, chỉ có tiêu đề cột được hiển thị; container hello-world
sẽ không được liệt kê vì nó không còn chạy.
Bạn có thể kiểm tra container đang chạy bằng lệnh:
docker ps
Output CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Để xem thông tin của container (bao gồm cả những container đã dừng), sử dụng tham số -a
:
docker ps -a
Kết quả sẽ hiển thị thông tin container cần thiết để bạn gỡ bỏ sau này, ví dụ:
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ẽ hữu ích khi bạn cần xóa container.
Bước 3 – Gỡ bỏ Image
Để tiết kiệm không gian lưu trữ, chúng ta có thể gỡ bỏ image cục bộ. Đầu tiên, bạn cần xóa tất cả các container đang tham chiếu đến image đó bằng lệnh docker rm
, sử dụng CONTAINER ID hoặc NAME. Ví dụ, với CONTAINER ID từ lệnh docker ps -a
:
docker rm 06069fd5ca23
Sau khi tất cả các container tham chiếu đến image đã được xóa, bạn có thể gỡ bỏ image:
docker rmi hello-world
Kết luận
Chúng ta đã hoàn tất việc cài đặt Docker Compose, kiểm tra thành công qua ví dụ Hello World và sau đó gỡ bỏ image cùng container thử nghiệm.
Mặc dù ví dụ Hello World đã chứng minh việc cài đặt của chúng ta hoạt động tốt, nhưng cấu hình đơn giản này không thể hiện đầy đủ một trong những ưu điểm chính của Docker Compose – đó là khả năng điều phối khởi động và tắt đồng thời một nhóm các container Docker, giúp quản lý các ứng dụng phức tạp trở nên dễ dàng hơn.
Sau khi cài đặt Docker Compose, bạn cần một môi trường mạnh mẽ để chạy ứng dụng? Hãy xem qua danh mục thuê máy chủ VPS của chúng tôi. Dịch vụ thuê máy chủ VPS cung cấp tài nguyên ổn định, hỗ trợ triển khai container hiệu quả trên Ubuntu 16.04.