Docker giúp đơn giản hóa quá trình quản lý các quy trình ứng dụng bên trong container. Mặc dù container có một số điểm tương đồng với máy ảo, nhưng chúng nhẹ hơn và tiết kiệm tài nguyên hơn. Điều này cho phép các nhà phát triển tách môi trường ứng dụng thành nhiều dịch vụ được cách ly riêng biệt.
Đối với những ứng dụng phụ thuộc vào nhiều dịch vụ, việc điều phối (orchestrate) tất cả các container khởi động, giao tiếp và tắt cùng nhau có thể trở nên khó khăn. Docker Compose là một công cụ cho phép bạn chạy môi trường ứng dụng đa container dựa trên các định nghĩa được thiết lập trong một tệp YAML. Nó sử dụng định nghĩa dịch vụ để xây dựng các môi trường có thể tùy chỉnh hoàn toàn với nhiều container có thể chia sẻ mạng lưới và volume dữ liệu.
Tìm hiểu cách cài đặt Docker Compose trên Ubuntu 20.04 để quản lý container hiệu quả. Nếu bạn đang tìm kiếm giải pháp tối ưu cho ứng dụng, hãy khám phá danh mục VPS server của chúng tôi để chọn máy chủ ảo mạnh mẽ, hỗ trợ triển khai Docker mượt mà và ổn định.
DataOnline sẽ được chứng minh cách cài đặt Docker Compose trên một server Ubuntu 20.04 và cách bắt đầu sử dụng công cụ này.
Yêu cầu tiên quyết
Để theo dõi bài viết này, bạn cần có:
● Quyền truy cập vào một máy Ubuntu 20.04 hoặc server phát triển với tư cách người dùng không phải root có quyền sudo. Nếu bạn sử dụng server từ xa, nên đảm bảo rằng firewall đã được cài đặt. (Vui lòng tham khảo Hướng dẫn Cài Đặt Server Ban Đầu cho Ubuntu 20.04.)
● Docker đã được cài đặt trên server hoặc máy của bạn, theo như các Bước 1 và 2 của bài Cách cài đặt sử dụng Docker trên Ubuntu 20.4
Lưu ý: Bài hướng dẫn này sẽ hướng dẫn bạn cài đặt Docker Compose phiên bản 1 (sử dụng docker-compose). Bắt đầu từ Docker Compose v2, Docker đã chuyển sang sử dụng lệnh plugin compose CLI như được ghi trong phiên bản mới nhất trên Ubuntu 22.04. Mặc dù quá trình cài đặt có sự khác biệt, nhưng về cơ bản cách sử dụng vẫn chỉ đơn giản là bỏ dấu gạch nối trong các lệnh docker-compose thành docker compose. Để biết chi tiết khả năng tương thích, hãy kiểm tra tài liệu chính thức của Docker về sự tương thích giữa compose mới và docker-compose cũ.
Bước 1 – Cài đặt Docker Compose
Để đảm bảo rằng bạn nhận được phiên bản ổn định mới nhất của Docker Compose, bạn sẽ tải phần mềm này từ kho Github chính thức của nó.
Đầu tiên, hãy xác nhận phiên bản mới nhất có sẵn trên trang Releases của Docker Compose. Tại thời điểm viết bài này, phiên bản ổn định hiện tại là 1.29.2
.
Lệnh sau sẽ tải phiên bản 1.29.2
và lưu tệp thực thi tại /usr/local/bin/docker-compose
, giúp phần mềm này có thể truy cập toàn cục như docker-compose
:
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 thực thi cho tệp docker-compose:
sudo chmod +x /usr/local/bin/docker-compose
Để xác nhận rằng cài đặt thành công, hãy chạy:
docker-compose --version
Bạn sẽ thấy đầu ra giống như sau:
Output docker-compose version 1.29.2, build 5becea4c
Để minh họa cách thiết lập tệp docker-compose.yml và làm việc với Docker Compose, bạn sẽ tạo một môi trường máy chủ web sử dụng image Nginx chính thức từ Docker Hub (registry công cộng).
Môi trường container hóa này sẽ phục vụ một tệp HTML tĩnh.
Bắt đầu bằng cách tạo một thư mục mới trong thư mục home của bạn, sau đó chuyển vào thư mục đó:
mkdir ~/compose-demo cd ~/compose-demo
Trong thư mục này, tạo một thư mục app để làm document root cho môi trường Nginx:
mkdir app
Sử dụng trình soạn thảo văn bản ưa thích, tạo tệp index.html trong thư mục app:
nano app/index.html
Chèn nội dung sau vào tệp app/index.html:
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>Docker Compose Demo</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css"> </head> <body> <h1>This is a Docker Compose Demo Page.</h1> <p>This content is being served by an Nginx container.</p> </body> </html>
Lưu và đóng tệp (nếu sử dụng nano, nhấn CTRL+X
, sau đó Y
và ENTER
).
Tiếp theo, tạo tệp docker-compose.yml
:
nano docker-compose.yml
Chèn nội dung sau vào tệp docker-compose.yml
:
version: '3.7' services: web: image: nginx:alpine ports: - "8000:80" volumes: - ./app:/usr/share/nginx/html
Tệp docker-compose.yml
thường bắt đầu với định nghĩa phiên bản. Phần này sẽ thông báo cho Docker Compose biết bạn đang sử dụng phiên bản cấu hình nào.
Tiếp theo, bạn có khối services
, nơi bạn thiết lập các dịch vụ thuộc môi trường này. Trong trường hợp của bạn, có một dịch vụ duy nhất có tên web
. Dịch vụ này sử dụng image nginx:alpine
và thiết lập chuyển tiếp cổng thông qua chỉ thị ports
. Tất cả các yêu cầu đến cổng 8000
của máy chủ (hệ thống nơi bạn chạy Docker Compose) sẽ được chuyển tiếp tới container web
tại cổng 80
, nơi Nginx đang chạy.
Chỉ thị volumes
sẽ tạo một volume chia sẻ giữa máy chủ và container. Điều này sẽ chia sẻ thư mục app
cục bộ với container, và volume sẽ được ánh xạ tại /usr/share/nginx/html
bên trong container, từ đó ghi đè lên document root mặc định của Nginx.
Lưu và đóng tệp.
Bạn đã thiết lập xong một trang demo và tệp docker-compose.yml
để tạo ra môi trường máy chủ web container hóa phục vụ trang demo. Trong bước tiếp theo, bạn sẽ khởi động môi trường này bằng Docker Compose.
Bước 3 – Chạy Docker Compose
Với tệp docker-compose.yml
đã được thiết lập, bây giờ bạn có thể chạy Docker Compose để khởi động môi trường.
Lệnh sau sẽ tải các image cần thiết, tạo container cho dịch vụ web, và chạy môi trường container hóa ở chế độ nền:
docker-compose up -d
Docker Compose sẽ kiểm tra image được định nghĩa trên hệ thống; nếu không tìm thấy, nó sẽ tải image từ Docker Hub. Bạn sẽ thấy đầu ra như sau:
Output Creating network "compose-demo_default" with the default driver Pulling web (nginx:alpine)... alpine: Pulling from library/nginx cbdbe7a5bc2a: Pull complete 10c113fb0c77: Pull complete 9ba64393807b: Pull complete c829a9c40ab2: Pull complete 61d685417b2f: Pull complete Digest: sha256:57254039c6313fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502 Status: Downloaded newer image for nginx:alpine Creating compose-demo_web_1 ... done
Lưu ý: Nếu bạn gặp lỗi liên quan đến quyền truy cập Docker socket, điều đó có nghĩa là bạn đã bỏ qua bước cài đặt quyền ở Bước 2 của bài Cách Cài Đặt và Sử Dụng Docker trên Ubuntu 20.04. Vui lòng quay lại và hoàn thành bước đó để có thể chạy lệnh docker mà không cần
sudo
.
Môi trường của bạn hiện đã chạy ở chế độ nền. Để kiểm tra container có đang chạy không, gõ:
docker-compose ps
Lệnh này sẽ hiển thị thông tin về các container đang chạy, trạng thái của chúng, và các chuyển tiếp cổng. Ví dụ:
Output Name Command State Ports ---------------------------------------------------------------------------------- compose-demo_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8000->80/tcp
Bạn có thể truy cập ứng dụng demo bằng cách mở trình duyệt và nhập địa chỉ localhost:8000
(nếu chạy trên máy cục bộ) hoặc your_server_domain_or_IP:8000
(nếu chạy trên server từ xa).
Bạn sẽ thấy một trang như sau:
Volume chia sẻ được thiết lập trong tệp docker-compose.yml
giữ cho các file trong thư mục app
cục bộ đồng bộ với document root của container. Nếu bạn chỉnh sửa tệp index.html
, các thay đổi sẽ tự động được cập nhật trong container và hiển thị trên trình duyệt sau khi tải lại trang.
Bước 4 – Làm quen với các lệnh Docker Compose
Bạn đã thấy cách thiết lập tệp docker-compose.yml
và khởi động môi trường với lệnh docker-compose up
. Giờ hãy cùng khám phá cách sử dụng các lệnh của Docker Compose để quản lý và tương tác với môi trường container hóa của bạn.
Xem log của container Nginx:
docker-compose logs
Ví dụ đầu ra:
Output Attaching to compose-demo_web_1 web_1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration web_1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh web_1 | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf web_1 | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh web_1 | /docker-entrypoint.sh: Configuration complete; ready for start up web_1 | 172.22.0.1 - - [02/Jun/2020:10:47:13 +0000] "GET / HTTP/1.1" 200 353 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" "-"
Tạm dừng môi trường mà không thay đổi trạng thái container:
docker-compose pause
Output Pausing compose-demo_web_1 ... done
Tiếp tục chạy lại sau khi tạm dừng:
docker-compose unpause
Output Unpausing compose-demo_web_1 ... done
Dừng container mà không xóa dữ liệu:
docker-compose stop
Output Stopping compose-demo_web_1 ... done
Xóa các container, mạng và volume liên quan đến môi trường container hóa:
docker-compose down
Output Removing compose-demo_web_1 ... done Removing network compose-demo_default
Lưu ý rằng lệnh này không xóa image cơ sở được dùng để khởi động môi trường (ở đây là nginx:alpine
). Vì vậy, khi khởi động lại bằng docker-compose
up
, quá trình sẽ nhanh hơn vì image đã có sẵn trên hệ thống.
Nếu bạn muốn xóa luôn image cơ sở khỏi hệ thống:
docker image rm nginx:alpine
Output Untagged: nginx:alpine Untagged: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912 Deleted: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270 Deleted: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1 Deleted: sha256:c6bbc4bdac396583641cb44cd35126b2c195be8fe1ac5e6c577c14752bbe9157 Deleted: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6 Deleted: sha256:a3efaa65ec344c882fe5d543a392a54c4ceacd1efd91662d06964211b1be4c08 Deleted: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a
Lưu ý: Vui lòng tham khảo hướng dẫn Cách Cài Đặt và Sử Dụng Docker để biết thêm chi tiết về các lệnh Docker.
Kết luận
Sau khi nắm rõ cách sử dụng Docker Compose, bạn có thể triển khai ứng dụng dễ dàng. Để tiết kiệm chi phí, hãy tham khảo danh mục giá thuê VPS của chúng tôi, cung cấp các gói VPS giá rẻ, cấu hình cao, phù hợp cho mọi nhu cầu phát triển ứng dụng.
Trong bài hướng dẫn này, bạn đã được học cách cài đặt Docker Compose và thiết lập một môi trường container hóa dựa trên image máy chủ web Nginx. Bạn cũng đã khám phá cách quản lý môi trường này bằng các lệnh của Docker Compose.
Để xem danh sách đầy đủ các lệnh docker-compose
có sẵn, hãy tham khảo tài liệu chính thức của Docker Compose.
Nếu bạn quan tâm đến các ứng dụng sử dụng Docker Compose khác, hãy xem thêm bài Cách Cài Đặt WordPress Với Docker Compose