Cách Cài Đặt và Sử Dụng Docker Compose trên Ubuntu 22.04 Chi Tiết

Cách Cài Đặt và Sử Dụng Docker Compose trên Ubuntu 22.04 Chi Tiết

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ó nhiều đ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 phâ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.

Để triển khai Docker Compose hiệu quả trên Ubuntu 22.04, việc chọn VPS hosting chất lượng là yếu tố then chốt. Với VPS hosting từ các nhà cung cấp uy tín, bạn đảm bảo hiệu suất cao, ổn định, giúp chạy các container mượt mà và tối ưu hóa quy trình phát triển ứng dụng.

Đối với các ứ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 lúc có thể trở nên phức tạp. Docker Compose là một công cụ cho phép bạn chạy các 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.

DataOnline hướng dẫn bạn cách cài đặt Docker Compose trên server Ubuntu 22.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 22.04 (máy cục bộ 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. Để thiết lập, hãy tham khảo Hướng dẫn Cài Đặt Server Ban Đầu cho Ubuntu 22.04

● Docker đã được cài đặt trên server hoặc máy cục bộ của bạn, theo như các Bước 1 và 2 của bài Cách Cài Đặt và Sử Dụng Docker trên Ubuntu 22.04.

Lưu ý: Bắt đầu từ Docker Compose v2, Docker đã chuyển sang sử dụng lệnh plugin compose CLI, thay vì sử dụng docker-compose gốc như trong phiên bản Ubuntu 20.04 trước đó của bài hướng dẫn. Mặc dù quá trình cài đặt có khác nhau, nhưng về cơ bản cách sử dụng thực tế chỉ đơn giản là bỏ dấu gạch nối khỏi lệnh docker-compose để thành docker compose. Để biết chi tiết về khả năng tương thích đầy đủ, hãy kiểm tra tài liệu chính thức của Docker về sự tương thích lệnh 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 họ. Tại thời điểm viết bài này, phiên bản ổn định hiện tại là 2.3.3.

Sử dụng lệnh sau để tải về:

mkdir -p ~/.docker/cli-plugins/
curl -SL https://github.com/docker/compose/releases/download/v2.3.3/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose

Tiếp theo, đặt quyền chính xác để lệnh docker compose có thể thực thi được:

chmod +x ~/.docker/cli-plugins/docker-compose

Để xác nhận rằng cài đặt thành công, bạn có thể chạy:

docker compose version

Bạn sẽ thấy đầu ra giống như sau:

Output
Docker Compose version v2.3.3

Docker Compose đã được cài đặt thành công trên hệ thống của bạn. Trong phần tiếp theo, bạn sẽ tìm hiểu cách thiết lập tệp docker-compose.yml và khởi chạy một môi trường container hóa bằng công cụ này.

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 này sẽ phục vụ một tệp HTML tĩnh duy nhất.

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 đó di 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 ứng dụng 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 của bạn, 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 khi hoàn tất. Nếu sử dụng nano, nhấn CTRL+X, sau đó YENTER để xác nhận.

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 phần định nghĩa phiên bản, cho Docker Compose biết bạn đang sử dụng phiên bản cấu hình nào.

Tiếp theo là khối services, nơi bạn thiết lập các dịch vụ thuộc môi trường container này. Trong trường hợp này, 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 trên máy chủ (hệ thống nơi bạn chạy Docker Compose) sẽ được chuyển tiếp đến 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. Thư mục app cục bộ sẽ được chia sẻ với container và ánh xạ vào đường dẫn /usr/share/nginx/html bên trong container, từ đó ghi đè 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 môi trường máy chủ web container hóa phục vụ trang này. 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ạn có thể chạy Docker Compose để khởi động môi trường:

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 giống 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 2 của bài Cách Cài Đặt và Sử Dụng Docker trên Ubuntu 22.04 Quay lại và hoàn thành bước đó để cấp quyền chạy lệnh docker mà không cần sudo.

Môi trường của bạn hiện đã được khởi động chạy ở chế độ nền. Để kiểm tra container đang hoạt động, chạy:

docker compose ps

Lệnh này sẽ hiển thị thông tin về các container đang chạy và trạng thái của chúng, cũng như các chuyển tiếp cổng đang được thiết lập:

Output
       Name                     Command               State          Ports        
----------------------------------------------------------------------------------
compose-demo_web_1   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:8000->80/tcp

Giờ bạn có thể truy cập ứng dụng demo bằng cách mở trình duyệt và truy cập 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.

Thiet ke chua co ten 61 1

Trang web sẽ hiển thị nội dung tĩnh từ tệp index.html. Volume chia sẻ được thiết lập trong tệp docker-compose.yml sẽ đồng bộ các file trong thư mục app với document root của container. Nếu bạn thay đổi nội dung tệp index.html, container sẽ tự động cập nhật và thay đổi đó sẽ được hiển thị trên trình duyệt khi tải lại trang.

Trong bước tiếp theo, bạn sẽ tìm hiểu cách quản lý môi trường container hóa của mình bằng các lệnh của Docker Compose.

Bước 4 – Làm quen với các lệnh Docker Compose

Bạn đã xem cách thiết lập tệp docker-compose.yml và khởi động môi trường bằng lệnh docker compose up. Giờ hãy cùng tìm hiểu 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 tạo ra bởi container Nginx, sử dụng lệnh:

docker compose logs

Bạn sẽ thấy đầu ra giống như sau:

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" "-"

Nếu bạn muốn tạm dừng môi trường mà không thay đổi trạng thái hiện tại của các container, sử dụng:

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

Lệnh docker compose stop sẽ dừng việc thực thi của container nhưng không xóa dữ liệu liên quan:

docker compose stop
Output
Stopping compose-demo_web_1 ... done

Nếu bạn muốn xóa các container, mạng, và volume liên quan đến môi trường container hóa này, sử dụng lệnh docker compose down:

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 sử dụng bởi Docker Compose để khởi động môi trường (trong trường hợp này là nginx:alpine). Như vậy, khi bạn khởi động lại môi trường với 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, bạn có thể sử dụng:

docker image rm nginx:alpine

Đầu ra sẽ hiển thị các thông báo như:

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

Trong bài hướng dẫn này, bạn đã học cách cài đặt Docker Compose và thiết lập một môi trường container hóa sử dụng image của máy chủ web Nginx. Bạn cũng đã nắm vững cách sử dụng các lệnh Docker Compose để quản lý và vận hành môi trường này một cách hiệu quả. Giờ đây, bạn có thể áp dụng những kiến thức này để triển khai và quản lý các ứng dụng phức tạp hơn trong môi trường Docker. Đừng quên khám phá thêm các bài hướng dẫn chuyên sâu khác để tối ưu hóa quy trình làm việc và phát triển ứng dụng với Docker và Docker Compose.

Khi sử dụng Docker Compose, một máy chủ mạnh mẽ là điều không thể thiếu. Bạn có thể mua VPS giá rẻ từ các nhà cung cấp đáng tin cậy để tiết kiệm chi phí mà vẫn đảm bảo cấu hình phù hợp, hỗ trợ chạy multi-container trơn tru trên Ubuntu 22.04.

Để tham khảo đầy đủ danh sách các lệnh Docker Compose có sẵn, hãy xem tài liệu chính thức của 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 *