Docker là một công cụ mạnh mẽ giúp tự động hóa quá trình triển khai các ứng dụng Linux trong các container phần mềm. Để tận dụng tối đa sức mạnh của Docker, mỗi thành phần của ứng dụng nên được chạy trong một container riêng biệt. Tuy nhiên, đố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ý và đồng bộ các container để chúng có thể khởi động, giao tiếp và tắt đồng thời có thể trở nên khó khăn.
Yêu cầu trước khi cài đặt
Để 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 yêu cầu sau:
● Một người dùng không phải root với quyền sudo
(Tham khảo bài “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 trong Bước 1 và Bước 2 của bài “Cách cài đặt và sử dụng Docker trên Ubuntu 18.04“
Lưu ý: Bài viết này sẽ hướng dẫn bạn cài đặt Docker Compose phiên bản 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 compose CLI như đã được trình bày trong bài hướng dẫn dành cho Ubuntu 22.04 của chúng tôi, và dần từ bỏ cách gọi docker-compose ban đầu. Mặc dù cách cài đặt khác nhau, nhưng về cơ bản cách sử dụng là bỏ dấu gạch ngang trong các lệnh docker-compose để thành docker compose. Để biết đầy đủ chi tiết tương thích, hãy tham khảo tài liệu chính thức của Docker về sự tương thích giữa lệnh compose mới và lệnh docker-compose cũ.
Bước 1 – Cài đặt Docker Compose
Mặc dù bạn 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 ở đó thường bị lạc hậu so với bản mới nhất, vì vậy 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 trên trang Releases. Bằng cách sử dụng cờ -o
để chỉ định file đích trước thay vì chuyển hướng đầu ra, cú pháp này tránh được 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 lại 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, hãy thiết lập quyền truy cập:
sudo chmod +x /usr/local/bin/docker-compose
Sau đó, bạn sẽ kiểm tra xem quá trình cài đặt đã thành công bằng cách kiểm tra phiên bản:
docker-compose --version
Lệnh trên sẽ hiển thị phiên bản bạn đã cài đặt:
Output docker-compose version 1.29.2, build 5becea4c
Giờ đây, khi đã 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 chứa các hình ảnh công khai của Docker – có sẵn một hình ảnh Hello World cho mục đích minh họa và kiểm tra. Hình ảnh này cho thấy 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 chỉ định một hình ảnh duy nhất.
Đầu tiên, bạn sẽ tạo một thư mục chứa file YAML và di chuyển vào đó:
mkdir hello-world cd hello-world
Tiếp theo, bạn sẽ tạo file YAML:
nano docker-compose.yml
Nhập nội dung sau vào file, lưu lại và thoát trình soạn thảo:
my-test: image: hello-world
Dòng đầu tiên trong file YAML được sử dụng như một phần của tên container. Dòng thứ hai chỉ định hình ảnh sẽ được sử dụng để tạo container. Khi bạn chạy lệnh docker-compose up
, nó sẽ tìm kiếm hình ảnh cục bộ có tên bạn chỉ định, ở đây là hello-world
. Sau khi đã nhập nội dung, bạn lưu lại và thoát khỏi file.
Bạn có thể kiểm tra các hình ảnh trên hệ thống bằng lệnh:
docker images
Khi không có hình ảnh cục bộ nào, chỉ có tiêu đề của các cột được hiển thị:
Output
Giờ, khi vẫn đang ở trong thư mục ~/hello-world
, bạn thực hiện lệnh sau:
docker-compose up
Lần đầu tiên chạy lệnh này, nếu không có hình ảnh cục bộ tên hello-world, Docker Compose sẽ tải hình ảnh từ kho 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 truy cập liên quan đến Docker socket, điều đó có nghĩa là bạn đã bỏ qua Bước 2 của bài “Cách cài đặt và sử dụng Docker trên Ubuntu 18.04“. Hãy quay lại và hoàn tất bước đó để có quyền chạy lệnh docker mà không cần sudo
.
Sau khi tải hình ảnh về, docker-compose
sẽ tạo một container, kết nối và chạy chương trình hello, chương trình này sẽ hiển thị thông báo xác nhận rằng quá trình cài đặt có vẻ đã 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ó sẽ 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 trong thời gian lệnh đang hoạt động, vì vậy khi chương trình hello
hoàn thành, container sẽ dừng lại. Do đó, khi bạn xem các tiến trình đang chạy, chỉ có tiêu đề các cột được hiển thị mà container hello-world
sẽ không xuất hiện vì nó không còn chạy.
docker ps
Output CONTAINER ID IMAGE COMMAND CREATED STATUS
Và để xem thông tin container, bạn cần dùng cờ -a
để hiển thị tất cả các container, không chỉ những container đang chạy:
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
Dòng lệnh trên hiển thị thông tin bạn cần để xóa container khi không sử dụng nữa.
Bước 3 – Xóa hình ảnh
Để tránh sử dụng không gian đĩa không cần thiết, bạn sẽ xóa hình ảnh cục bộ. Để làm được điều này, bạn cần xóa tất cả các container liên kết tới hình ảnh đó bằng lệnh docker rm
, theo sau là CONTAINER ID hoặc TÊN của container. Ở dưới đây, bạn sử dụng CONTAINER ID từ kết quả của lệnh docker ps -a
vừa chạy. Hãy thay thế ID của container của bạn:
docker rm 06069fd5ca23
Sau khi đã xóa tất cả các container liên kết tới hình ảnh, bạn có thể xóa hình ảnh đó:
docker rmi hello-world
Kết luận
Bạn đã hoàn tất việc cài đặt Docker Compose thành công, kiểm tra quá trình cài đặt qua ví dụ Hello World, và xóa các container cũng như hình ảnh đã sử dụng trong quá trình kiểm tra.
Dù ví dụ Hello World giúp bạn xác nhận việc cài đặt Docker Compose, nhưng nó không thể hiện rõ ràng một trong những lợi ích chính của Docker Compose khả năng quản lý và điều phối nhiều container Docker một cách đồng bộ, bao gồm cả việc khởi động và dừng chúng cùng lúc. Để thấy rõ hơn sức mạnh của Docker Compose, bạn có thể tham khảo ví dụ thực tế về cách cấu hình môi trường kiểm thử tích hợp liên tục (CI) với Docker và Docker Compose trên Ubuntu 16.04. (Lưu ý rằng bài viết này được viết cho Ubuntu 16.04 thay vì 18.04).
Cài đặt Docker Compose trở nên dễ dàng hơn với máy chủ phù hợp. Nếu bạn đang tìm kiếm giải pháp tiết kiệm, hãy mua VPS giá rẻ để triển khai ứng dụng nhanh chóng. Đừng bỏ lỡ cơ hội sở hữu VPS hiệu suất cao với chi phí hợp lý!