Cách Thiết Lập và Sử Dụng Docker Compose trên Ubuntu 20.04

Thiết Lập và Sử Dụng Docker Compose trên Ubuntu 20.04

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
Bước 2 – Thiết lập tệp docker-compose.yml

Để 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 đó YENTER).

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:

Thiet ke chua co ten 51

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

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *