Mục lục

Không có mục lục
Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly

Cách cài đặt và sử dụng Docker Compose trên Ubuntu 20.04

Ngày đăng: 9 tháng 11 năm 2022

Ubuntu

Giới thiệu

Docker đơn giản hóa quá trình quản lý các quy trình ứng dụng trong vùng chứa. Các vùng chứa giống với máy ảo trong một số điểm, chúng nhẹ hơn và thân thiện với tài nguyên hơn. Điều này cho phép các nhà phát triển chia nhỏ môi trường ứng dụng thành nhiều dịch vụ riêng biệt.

Đối với các ứng dụng phụ thuộc vào một số dịch vụ, việc sắp xếp tất cả các vùng chứa để khởi động, giao tiếp và tắt cùng nhau có thể trở nên khó sử dụng. Docker Compose là một công cụ cho phép bạn chạy các môi trường ứng dụng multi-container (nhiều vùng chứa) dựa trên các định nghĩa được đặt trong tệp YAML. Nó sử dụng các định nghĩa dịch vụ để xây dựng các môi trường hoàn toàn có thể tùy chỉnh với nhiều vùng chứa, có thể chia sẻ mạng và data volumes.

Trong hướng dẫn này, bạn sẽ được hướng dẫn cách cài đặt Docker Compose trên máy chủ Ubuntu 20.04 và cách bắt đầu sử dụng công cụ này.

Điều kiện

Để thực hiện theo bài viết này, bạn sẽ cần:

  • Truy cập vào máy cục bộ hoặc máy chủ phát triển Ubuntu 20.04 với tư cách là non-root user có các đặc quyền sudo. Nếu bạn đang sử dụng máy chủ từ xa, bạn nên cài đặt tường lửa đang hoạt động. Để thiết lập những điều này, vui lòng tham khảo Hướng dẫn cài đặt máy chủ ban đầu cho Ubuntu 20.04 của chúng tôi.
  • Docker được cài đặt trên máy chủ hoặc máy cục bộ của bạn, làm theo Bước 1 và 2 của Cách cài đặt và sử dụng Docker trên Ubuntu 20.04.

Lưu ý: Bài viết này sẽ hướng dẫn bạn cài đặt Docker Compose v1, sử dụng docker-compose. Với Docker Compose v2, Docker đã chuyển sang sử dụng lệnh compose CLI plugin như được ghi lại trong phiên bản Ubuntu 22.04 mới nhất của hướng dẫn này và khác với bản gốc docker-compose. Mặc dù cách cài đặt khác nhau, nhưng nhìn chung, việc sử dụng thực tế liên quan đến việc bỏ dấu gạch nối từ cách gọi docker-compose trở thành docker compose. Để biết đầy đủ chi tiết về khả năng tương thích, hãy kiểm tra tài liệu Docker chính thức về khả năng tương thích của lệnh giữa compose mới và docker-compose cũ.

Bước 1: Cài đặt Docker Compose

Để đảm bảo có được phiên bản Docker Compose ổn định nhất được cập nhật, bạn sẽ tải xuống phần mềm này từ kho lưu trữ Github chính thức của nó.

Trước tiên, hãy xác nhận phiên bản mới nhất hiện có trong trang phát hành của họ. Tại thời điểm viết bài này, phiên bản ổn định nhất hiện tại là 1.29.2.

Lệnh dưới đây sẽ tải xuống bản phát hành 1.29.2 và lưu tệp thực thi tại /usr/local/bin/docker-comp, điều này sẽ làm cho phần mềm có thể truy cập toàn cầu dưới dạng docker-compose:

  1. 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 đặt các quyền chính xác để lệnh docker-compose có thể thực thi được:

  1. sudo chmod +x /usr/local/bin/docker-compose

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

  1. docker-compose --version

Bạn sẽ thấy đầu ra tương tự như sau:

Output
docker-compose version 1.29.2, build 5becea4c

Docker Compose hiện đã đượ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ẽ thấy cách thiết lập tệp docker-compose.yml, thiết lập một môi trường chứa và chạy với công cụ này.

Bước 2: Thiết lập tệp docker-compose.yml

Để trình bày 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ôi trường máy chủ web bằng cách sử dụng hình ảnh Nginx chính thức từ Docker Hub, cơ quan đăng ký Docker công khai. Môi trường được chứa này sẽ phân phát 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 chính của bạn, sau đó chuyển nó vào:

  1. mkdir ~/compose-demo
  2. cd ~/compose-demo

Trong thư mục này, hãy thiết lập một thư mục ứng dụng để làm tài liệu gốc cho môi trường Nginx của bạn:

  1. 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 mới trong thư mục app:

  1. nano app/index.html

Đặt nội dung dưới đây vào tệp này:

~/compose-demo/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>3

Lưu và đóng tệp khi bạn hoàn tất. Nếu bạn đang sử dụng nano, bạn có thể làm điều đó bằng cách gõ CTRL + X, sau đó là YENTER để xác nhận.

Tiếp theo, tạo tệp docker-compose.yml:

  1. nano docker-compose.yml

Chèn nội dung sau vào tệp docker-compose.yml của bạn:

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 bằng version. Thao tác này sẽ cho Docker Compose biết bạn đang sử dụng phiên bản cấu hình nào.

Sau đó, bạn có khối services, nơi bạn thiết lập các dịch vụ là một phần của môi trường này. Trong trường hợp của bạn, bạn có một dịch vụ duy nhất được gọi là web. Dịch vụ này sử dụng hình ảnh nginx:alpine và thiết lập chuyển hướng cổng với chỉ thị ports. Tất cả các yêu cầu trên cổng 8000 của máy chủ (hệ thống từ nơi bạn đang chạy Docker Compose) sẽ được chuyển hướng đến vùng chứa web trên cổng 80, nơi Nginx sẽ chạy.

Chỉ thị volumes sẽ tạo một shared volume giữa máy chủ và bộ chứa. Thao tác này sẽ chia sẻ thư mục cục bộ app với vùng chứa, và volume sẽ được đặt tại /usr/share/nginx/html bên trong vùng chứa, sau đó sẽ ghi đè lên tài liệu gốc mặc định cho Nginx.

Lưu và đóng tập tin.

Bạn đã thiết lập một trang demo và một tệp docker-compose.yml để tạo một môi trường máy chủ web được chứa đựng để phục vụ nó. Trong bước tiếp theo, bạn sẽ xây dựng môi trường này với Docker Compose.

Bước 3: Chạy Docker Compose

Với tệp docker-compose.yml, bây giờ bạn có thể thực hiện Docker Compose để đưa môi trường của bạn lên. Lệnh dưới đây sẽ tải xuống các hình ảnh Docker cần thiết, tạo vùng chứa cho dịch vụ web và chạy môi trường được chứa trong chế độ nền:

  1. docker-compose up -d

Docker Compose trước tiên sẽ tìm kiếm hình ảnh đã xác định trên hệ thống cục bộ của bạn và nếu nó không thể tìm thấy hình ảnh, nó sẽ tải xuống từ Docker Hub. Bạn sẽ thấy đầu ra như thế này:

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 quyền liên quan đến Docker socket, điều này có nghĩa là bạn đã bỏ qua Bước 2 của Cách cài đặt và sử dụng Docker trên Ubuntu 20.04. Quay lại và hoàn thành bước đó để cho phép quyền chạy các lệnh của docker mà không cần sudo.

Môi trường của bạn hiện đang hoạt động trong nền. Để xác minh rằng vùng chứa đang hoạt động, bạn có thể chạy:

  1. docker-compose ps

Lệnh này sẽ hiển thị cho bạn thông tin về các vùng chứa đang chạy và trạng thái của chúng, cũng như bất kỳ chuyển hướng cổng nào hiện đang diễn ra:

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

Giờ đây, bạn có thể truy cập ứng dụng demo bằng cách trỏ trình duyệt của mình tới localhost: 8000 nếu bạn đang chạy bản demo này trên máy cục bộ của mình hoặc your_server_domain_or_IP: 8000 nếu bạn đang chạy bản demo này trên máy chủ từ xa.

Bạn sẽ thấy một trang như thế này: description image

Shared volume mà bạn đã thiết lập trong tệp docker-compose.yml giữ các tệp thư mục ứng dụng của bạn đồng bộ hóa với tệp gốc tài liệu của vùng chứa. Nếu bạn thực hiện bất kỳ thay đổi nào đối với tệp index.html, chúng sẽ được vùng chứa tự động chọn và do đó được phản ánh trên trình duyệt của bạn khi bạn tải lại trang.

Trong bước tiếp theo, bạn sẽ thấy cách quản lý môi trường được chứa bằng các lệnh Docker Compose.

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

Bạn đã biết cách thiết lập tệp docker-compose.yml và thiết lập môi trường của bạn với docker-compose up. Bây giờ, bạn sẽ thấy cách sử dụng lệnh Docker Compose để quản lý và tương tác với môi trường được chứa trong vùng chứa của bạn.

Để kiểm tra nhật ký được tạo bởi vùng chứa Nginx của bạn, bạn có thể sử dụng lệnh logs:

  1. docker-compose logs

Bạn sẽ thấy đầu ra tương tự 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 thực hiện môi trường mà không thay đổi trạng thái hiện tại của vùng chứa, bạn có thể sử dụng:

  1. docker-compose pause
Output
Pausing compose-demo_web_1 ... done

Để tiếp tục thực hiện sau khi tạm dừng:

  1. docker-compose unpause
Output
Unpausing compose-demo_web_1 ... done

Lệnh stop sẽ chấm dứt việc thực thi vùng chứa, nhưng nó sẽ không phá hủy bất kỳ dữ liệu nào được liên kết với vùng chứa của bạn

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

Nếu bạn muốn xóa các vùng chứa, mạng và ổ đĩa được liên kết với môi trường được chứa trong vùng chứa này, hãy sử dụng lệnh down:

  1. docker-compose down
Output
Removing compose-demo_web_1 ... done Removing network compose-demo_default

Lưu ý rằng điều này sẽ không xóa hình ảnh cơ sở được Docker Compose sử dụng để tạo ra môi trường của bạn (trong trường hợp của bạn là nginx:alpine). Bằng cách này, bất cứ khi nào bạn làm cho môi trường của mình hoạt động trở lại với docker-compose up, quá trình này sẽ nhanh hơn nhiều vì hình ảnh đã có trên hệ thống của bạn.

Trong trường hợp bạn cũng muốn xóa hình ảnh cơ sở khỏi hệ thống của mình, bạn có thể sử dụng:

  1. 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ủa chúng tôi về Cách cài đặt và sử dụng Docker để biết chi tiết hơn về các lệnh Docker.

Kết luận

Trong hướng dẫn này, bạn đã thấy cách cài đặt Docker Compose và thiết lập môi trường được chứa trong vùng chứa dựa trên hình ảnh máy chủ web Nginx. Bạn cũng đã thấy cách quản lý môi trường này bằng cách sử dụng lệnh Compose.

Để có tài liệu tham khảo đầy đủ về tất cả các lệnh docker-compose có sẵn, hãy kiểm tra tài liệu chính thức (official documentation).

Nếu bạn quan tâm đến các cách sử dụng khác của Docker Compose, hãy xem Cách cài đặt WordPress với Docker Compose và cả Cách bảo mật ứng dụng Node.js được chứa bằng Nginx, Let’s Encrypt và Docker Compose.

Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly
Chia sẻ

0 câu trả lời