Ứng dụng Docker giúp phát triển, xây dựng, chạy và chia sẻ các ứng dụng tích hợp dễ dàng hơn. Nó sử dụng các kỹ thuật ảo hóa để đóng gói các ứng dụng bên trong các container . Plug-in Docker Compose mở rộng các khả năng này, cho phép người dùng triển khai nhiều container ngay lập tức chỉ bằng một lệnh. Hướng dẫn này cung cấp một số thông tin cơ bản về Docker Compose và giải thích cách cài đặt và sử dụng nó.

Docker là gì?

Ứng dụng Docker cho phép chuẩn hóa và tự động hóa các môi trường điện toán sẵn sàng sản xuất. Vì lý do này, đây là ứng dụng Cơ sở hạ tầng dưới dạng Dịch vụ (IaaS) được sử dụng rộng rãi, đặc biệt là trong điện toán đám mây.

Docker triển khai các ứng dụng bên trong các container. Mỗi container dựa trên một hình ảnh Docker, mặc dù một hình ảnh có thể chứa nhiều container. Một container đóng gói một ứng dụng phần mềm, chẳng hạn như cơ sở dữ liệu hoặc máy chủ web, bên trong một môi trường ảo hóa. Gói này bao gồm mọi thứ cần thiết để chạy ứng dụng, bao gồm các thư viện, cấu hình và tiện ích hỗ trợ. Thành phần Docker Engine cho phép người dùng lưu trữ, quản lý và chạy các container.

Container Docker nhẹ, hiệu quả và có thể chạy trên nhiều hệ điều hành khác nhau. Các container được tách biệt với nhau và thường chỉ bao gồm một ứng dụng duy nhất. Để triển khai một giải pháp hệ thống hoàn chỉnh chứa nhiều ứng dụng, thường cần nhiều container. Trong ứng dụng Docker gốc, mỗi container phải được xử lý riêng biệt, khiến việc phối hợp triển khai nhiều container trở nên khó khăn. Để biết thêm thông tin về Docker, hãy xem Giới thiệu về Docker của Linode .

Docker Compose là gì?

Docker Compose V2 là một phần của bộ phần mềm Docker. Phiên bản Docker V2 hợp lý hóa mở rộng và thay thế phiên bản V1 gốc. Nó sử dụng các tệp cấu hình để xác định và xây dựng các ứng dụng đa thành phần. Một tệp cấu hình, được viết bằng YAML, thường xác định kiến ​​trúc hoàn chỉnh của hệ thống. Nó chỉ định các ứng dụng cần cài đặt, cùng với cấu hình và cài đặt của chúng. Docker Compose cũng có thể cung cấp các cài đặt lưu trữ, mạng và cấu hình cho hệ thống.

Docker Compose cho phép người dùng đồng thời xây dựng, triển khai, dừng hoặc xóa nhiều container. Các lệnh bổ sung cung cấp quyền truy cập vào nhật ký dịch vụ hoặc trạng thái container. Các lệnh Compose áp dụng cho tất cả các container và không thể áp dụng cho một phiên bản container duy nhất. Docker Compose V2 có sẵn dưới dạng một phần của bộ Docker Desktop GUI hoặc dưới dạng plug-in cho Docker Engine/CLI.

Docker Compose V2 cho phép người dùng thiết lập môi trường điện toán nhanh chóng và dễ dàng từ dòng lệnh. Điều này có nghĩa là nó rất hữu ích trong môi trường phát triển và thử nghiệm, cũng như triển khai Linode đơn tự quản lý. Một số lợi ích bổ sung của Docker Compose V2 bao gồm:

  • Mỗi dự án được tách biệt khỏi các dự án khác trên cùng một hệ thống. Điều này ngăn chặn các môi trường can thiệp lẫn nhau.
  • Nó lưu trữ cấu hình. Khi một dịch vụ khởi động lại, Docker Compose chỉ tạo lại các container đã thay đổi kể từ lần cuối cùng container được khởi chạy.
  • Nó lưu giữ mọi dữ liệu bên trong các ổ đĩa. Docker Compose tự động khôi phục các container từ các lần chạy trước đó và sao chép dữ liệu vào các container mới.
  • Nó bao gồm hỗ trợ cho các biến và chuyển giải pháp sang một môi trường khác.

Phiên bản hiện tại của Docker Compose là Docker Compose V2. Hỗ trợ cho Docker Compose V1 sẽ kết thúc vào tháng 6 năm 2023, vì vậy người dùng V1 nên chuyển sang Compose V2 càng sớm càng tốt. Docker Compose V2 tích hợp lệnh compose, thay thế docker-composetính năng V1, trực tiếp vào Docker CLI và Docker Engine. docker composeLệnh được thiết kế để thay thế ngay cho docker-compose. Điều này có nghĩa là docker-composecác lệnh V1 ánh xạ trực tiếp đến docker composelệnh V2 mà không cần sửa đổi thêm. Tuy nhiên, một số lệnh dư thừa đã bị loại bỏ trong khi các lệnh mới đã được thêm vào. Compose V1 được viết bằng Python, nhưng Compose V2 được viết bằng Go.

Đặc tả Docker Compose là gì?

Đặc tả tệp Docker Compose giải thích cách xây dựng tệp cấu hình Docker Compose V2. Tệp này được viết bằng YAML và bao gồm các chỉ thị chỉ định cách xây dựng và chạy một bộ vùng chứa Docker. Một tệp Compose thông thường phải bao gồm ít nhất một dịch vụ, ánh xạ tới một vùng chứa Docker. Tuy nhiên, hầu hết các cấu hình Compose V2 bao gồm nhiều dịch vụ. Tệp Compose cũng có thể bao gồm các định nghĩa cho hệ thống lưu trữ, cấu hình, thành phần mạng và bí mật hệ thống nhạy cảm.

Ghi chú: Định dạng tệp Docker Compose V2 khác với định dạng được sử dụng trong Compose V1. Compose V1 cho phép định dạng tệp V2 và V3, do đó các tệp cấu hình Compose V1 phải chỉ định định dạng tệp để sử dụng. Thật khó hiểu, các định dạng tệp này không liên quan đến phiên bản Docker Compose hoặc số bản phát hành. Định dạng tệp hiện đã được chuẩn hóa trong Docker Compose V2, do đó các tệp cấu hình V2 không còn bao gồm thông tin này nữa.

Kiến trúc Docker Compose cho phép một hệ thống lưu trữ nhiều dự án. Mỗi dự án được đặt trong một thư mục riêng và bao gồm docker-compose.ymltệp riêng. Tệp này bao gồm nhiều thành phần, nhưng chỉ có servicesphần là bắt buộc. Các phần khác là tùy chọn. Sau đây là danh sách các phần chính của một docker-compose.ymltệp.

  • Dịch vụ : Mục bắt buộc này định nghĩa một tài nguyên điện toán. Mỗi mục bên trong servicesphần này là một ứng dụng có thể được mở rộng độc lập. Một dịch vụ tham chiếu đến một hình ảnh Docker và ánh xạ đến một hoặc nhiều vùng chứa. Một số ví dụ về dịch vụ có thể bao gồm MySQL, NGINX, Redis và WordPress.
  • Volume : Volume xác định đường dẫn nơi ứng dụng có thể lưu trữ dữ liệu. Mặc dù servicesthường xác định không gian lưu trữ riêng, nhưng volume có thể phân bổ lưu trữ dùng chung cho nhiều dịch vụ.
  • Mạng : Mạng cho phép các dịch vụ giao tiếp với nhau hoặc với các mạng bên ngoài. Theo mặc định, Docker Compose tạo một mạng duy nhất để tất cả các dịch vụ sử dụng. Phần này có thể được sử dụng để xác định kết nối với các mạng khác hoặc mạng dành riêng cho ứng dụng. Có thể truy cập mạng bằng cùng tên máy chủ với tên vùng chứa.
  • Configs : Xác định vùng lưu trữ cố định cho cấu hình ứng dụng.
  • Bí mật : Bí mật lưu trữ các thuộc tính cấu hình nhạy cảm an toàn hơn. Chúng thường được bảo vệ thông qua việc sử dụng khóa hoặc chứng chỉ.

Mỗi thành phần được định nghĩa bằng một tập hợp các tham số. Ví dụ, mỗi mục trong servicesphải định nghĩa một mục imageđể sử dụng. Nó cũng có thể tùy chọn định nghĩa các tham số web, cổng dịch vụ, lệnh cấu hình và biến môi trường. Để biết thông tin đầy đủ về cách xây dựng docker-compose.ymltệp, hãy tham khảo thông số kỹ thuật Docker Compose .

Một số ứng dụng cũng yêu cầu Dockerfile . Tệp này giải thích cách xây dựng ứng dụng theo cách không phụ thuộc vào nền tảng. Tuy nhiên, nhiều ứng dụng chỉ sử dụng hình ảnh Docker được dựng sẵn và không yêu cầu Dockerfile. Để biết thêm thông tin về cách xây dựng ứng dụng bằng Dockerfile kết hợp với Docker Compose, hãy xem tài liệu Docker Compose .

Trước khi bạn bắt đầu

  1. Nếu bạn chưa thực hiện, hãy tạo một tài khoản Linode và Compute Instance. Xem hướng dẫn Bắt đầu với Linode và Tạo Compute Instance của chúng tôi .
  2. Làm theo hướng dẫn Thiết lập và Bảo mật Phiên bản Compute của chúng tôi để cập nhật hệ thống của bạn. Bạn cũng có thể muốn đặt múi giờ, cấu hình tên máy chủ, tạo tài khoản người dùng giới hạn và tăng cường quyền truy cập SSH.

Ghi chú: Các bước trong hướng dẫn này được viết cho người dùng không phải root. Các lệnh yêu cầu quyền nâng cao được thêm tiền tố sudo. Nếu bạn không quen với sudolệnh này, hãy xem hướng dẫn Người dùng và Nhóm Linux .

Cách cài đặt Docker Compose và Docker Engine

Có hai phương pháp cài đặt Docker Compose. Docker Compose thường được cài đặt dưới dạng plug-in. Plug-in Compose yêu cầu Docker Engine và Docker CLI, và được tích hợp chặt chẽ với các thành phần này. Phương pháp thứ hai là cài đặt Docker Desktop, một giao diện GUI tích hợp bao gồm Docker Compose. Docker Desktop nằm ngoài phạm vi của hướng dẫn này. Xem tài liệu Docker Desktop để biết thêm thông tin về tùy chọn này.

Hướng dẫn này tập trung vào cách cài đặt plug-in Docker Compose. Docker Engine phải được cài đặt cùng với Docker Compose trước khi có thể sử dụng plug-in. Hướng dẫn này hướng đến người dùng Ubuntu 22.04 LTS nhưng nhìn chung có thể áp dụng cho tất cả các bản phân phối Linux. Có thể tìm thấy hướng dẫn chính xác cho các Nền tảng được hỗ trợ khác trên trang cài đặt Docker Engine .

Để cài đặt cả Docker Engine và Docker Compose, hãy làm theo các bước sau.

1.Đảm bảo hệ thống được cập nhật bằng cách sử dụng bên dưới. Khởi động lại hệ thống nếu cần thiết.

sudo apt-get update -y && sudo apt-get upgrade -y

2.Xóa mọi phiên bản Docker cũ hoặc các thành phần liên quan. Những thành phần này có thể không tương thích với Docker Compose V2.

Ghi chú: Nếu phiên bản Docker cũ hơn đã được cài đặt trên hệ thống, hãy tham khảo hướng dẫn Gỡ cài đặt Docker . Điều quan trọng là phải xóa mọi container và ổ đĩa cũ để tránh xung đột trong tương lai.

sudo apt-get remove docker docker-engine docker.io containerd runc

3.Để cài đặt Docker Engine, cần có một số thành phần bổ sung. Cài đặt chúng bằng cách sử dụng apt. Một số gói này có thể đã được cài đặt trên hệ thống.

sudo apt-get install ca-certificates curl gnupg lsb-release

4.Thêm Khóa GNU Privacy Guard (GPG) chính thức để xác thực cài đặt.

sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

5.Thêm kho lưu trữ Docker vào danh sách aptcác gói.

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

6.Cập nhật danh sách aptcác gói.

sudo apt-get update

7.Cài đặt phiên bản mới nhất của Docker Engine, Docker CLI containerdvà các thành phần liên quan khác.

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

8.Chạy hello-worldcontainer để đảm bảo Docker được cài đặt đúng cách. Docker tải xuống container phù hợp và chạy nó.

sudo docker run hello-world

Nếu mọi thứ được cài đặt đúng cách, Docker sẽ hiển thị thông báo như hình bên dưới.

Hello from Docker!
This message shows that your installation appears to be working correctly.

9.Đảm bảo plug-in Docker Compose đang hoạt động bình thường. Chạy lệnh docker compose versionvà xác minh số bản phát hành. Nếu bản phát hành bắt đầu bằng v2, Docker Compose V2 đã được cài đặt đúng.

docker compose version
Docker Compose version v2.16.0

Cách tạo tệp YAML Docker Compose

Docker Compose kiểm tra docker-compose.ymltệp để xác định các container cần xây dựng và chạy. Mỗi dự án phải bao gồm một docker-compose.ymltệp bên trong thư mục dự án. Không thể chạy Docker Compose nếu không có tệp này. Đối với các hệ thống cực kỳ phức tạp, docker-composecó thể kết hợp nhiều tệp. Các mục được ghi đè hoặc thêm vào tùy thuộc vào hệ thống phân cấp tệp. Nhưng đối với hầu hết các ứng dụng đơn giản, một docker-composetệp duy nhất là đủ.

Ví dụ sau đây minh họa cách xây dựng docker-compose.ymltệp cho cài đặt WordPress đơn giản. Tệp bao gồm WordPress và các dịch vụ cơ sở dữ liệu cùng với các thư mục lưu trữ được chia sẻ. Để tạo tệp YAML Docker Compose, hãy làm theo các bước sau.

Ghi chú: Ví dụ này được lấy từ Docker Sample Projects . Có thể hữu ích khi sử dụng một trong những tệp mẫu này làm điểm khởi đầu cho dự án của riêng bạn.

1.Tạo một thư mục cho dự án mới và đổi nó thành thư mục. Trong ví dụ này, thư mục được đặt tên là wordpress.

mkdir wordpress
cd wordpress

2.Tạo một tệp có tên docker-compose.yml.

vi docker-compose.yml

3.Đầu tiên, thêm servicesphần. Thêm một dịch vụ có tên là mariadb. Dịch vụ này xác định vùng chứa cơ sở dữ liệu.

services:
  mariadb:

4.Xác định các tham số cho mariadbdịch vụ. Các tham số sau được sử dụng:

  • Tham số này commandcung cấp các đối số dòng lệnh cho ứng dụng.
  • Lệnh này imagecho Docker Compose biết hình ảnh nào cần kéo và sử dụng để xây dựng container. Hình ảnh phải tồn tại, cục bộ hoặc trên Docker Hub.
  • Thuộc tính này volumeschỉ định thư mục mà ứng dụng có thể lưu trữ dữ liệu.
  • Thuộc tính này environmentbao gồm các định nghĩa cho tên cơ sở dữ liệu, người dùng và mật khẩu người dùng.
  • Chỉ thị này exposeliệt kê các cổng mà cơ sở dữ liệu có thể sử dụng.
  • Thiết lập restartđể alwaysyêu cầu Docker khởi động container khi hệ thống kích hoạt.
  • Thêm nội dung sau vào mariadbdịch vụ. Thay thế passwordbằng mật khẩu an toàn cho MYSQL_PASSWORDvà bằng mật khẩu gốc cho MYSQL_ROOT_PASSWORD. Có thể chấp nhận đặt tên cơ sở dữ liệu và người dùng thành wordpress.
services:
  mariadb:
    image: mariadb:10.11.2-jammy
    command: '--default-authentication-plugin=mysql_native_password'
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=wordpress
      - MYSQL_USER=wordpress
      - MYSQL_PASSWORD=password
    expose:
      - 3306
      - 33060
...

5.Thêm wordpressdịch vụ. Các trường WORDPRESS_DB_USERWORDPRESS_DB_PASSWORD, và WORDPRESS_DB_NAMEphải khớp với các tham số tương ứng từ mariadbphần. portsThuộc tính này chỉ ra các cổng mà ứng dụng nên sử dụng.

services:
...
  wordpress:
    image: wordpress:latest
    volumes:
      - wp_data:/var/www/html
    ports:
      - 8000:80
    restart: always
    environment:
      - WORDPRESS_DB_HOST=mariadb
      - WORDPRESS_DB_USER=wordpress
      - WORDPRESS_DB_PASSWORD=password
      - WORDPRESS_DB_NAME=wordpress
...

6.Cuối cùng, thêm volumesphần. Thêm các ổ đĩa thư mục cho các dịch vụ mariadbvà wordpress.

...
volumes:
  db_data:
  wp_data:

7.Toàn bộ tệp sẽ giống như ví dụ sau.

services:
  mariadb:
    image: mariadb:10.11.2-jammy
    command: '--default-authentication-plugin=mysql_native_password'
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=wordpress
      - MYSQL_USER=wordpress
      - MYSQL_PASSWORD=password
    expose:
      - 3306
      - 33060
  wordpress:
    image: wordpress:latest
    volumes:
      - wp_data:/var/www/html
    ports:
      - 8000:80
    restart: always
    environment:
      - WORDPRESS_DB_HOST=mariadb
      - WORDPRESS_DB_USER=wordpress
      - WORDPRESS_DB_PASSWORD=password
      - WORDPRESS_DB_NAME=wordpress
volumes:
  db_data:
  wp_data:

Cách xây dựng và chạy một dự án Docker Compose

Docker Compose giúp bạn dễ dàng khởi chạy một dự án. Sử dụng docker compose uplệnh. Để khởi chạy dự án Docker Compose WordPress, hãy làm theo các bước sau.

1.Chuyển đến thư mục dự án chính chứa docker-compose.ymltệp.

cd wordpress

2.Sử dụng docker compose uplệnh để khởi chạy ứng dụng. Thêm -dtùy chọn để chạy các container ở chế độ nền. Điều này không chặn phiên điều khiển hiện tại và đảm bảo có thể sử dụng để kiểm tra kết quả. Có thể mất một hoặc hai phút để tải xuống và khởi động các container.

sudo docker compose up -d
[+] Running 31/3
⠿ wordpress Pulled                                                       44.6s
⠿ mariadb Pulled                                                         35.5s

[+] Running 5/5
⠿ Network wordpress_default        Created                                0.3s
⠿ Volume "wordpress_wp_data"       Create...                              0.0s
⠿ Volume "wordpress_db_data"       Create...                              0.0s
⠿ Container wordpress-mariadb-1    Sta...                                 3.0s
⠿ Container wordpress-wordpress-1  S...                                   3.0s

3.Kiểm tra ứng dụng để đảm bảo dự án Docker đang chạy đúng. Điều hướng đến địa chỉ IP của máy chủ và thêm cổng :8000hoặc sử dụng địa chỉ http://ip_address:8000/wp-admin/install.php. Trang cài đặt WordPress sẽ xuất hiện. Chọn ngôn ngữ phù hợp và tiếp tục cài đặt. Cung cấp thông tin đăng nhập của người dùng và thông tin chi tiết về cơ sở dữ liệu khi được nhắc. Xem Hướng dẫn Linode về Cách cài đặt WordPress trên Ubuntu 22.04 để biết thêm chi tiết.

4.Để xem danh sách tất cả các container Docker, hãy chạy lệnh docker compose images.

sudo docker compose images
CONTAINER               REPOSITORY          TAG                 IMAGE ID            SIZE
wordpress-mariadb-1     mariadb             10.11.2-jammy       6e11fcfc66ad        401MB
wordpress-wordpress-1   wordpress           latest              8fec96b2307f  

5.Lệnh này docker compose pscung cấp danh sách tất cả các tiến trình đang hoạt động liên quan đến vùng chứa.

sudo docker compose ps
NAME                    IMAGE                   COMMAND                  SERVICE             CREATED             STATUS              PORTS
wordpress-mariadb-1     mariadb:10.11.2-jammy   "docker-entrypoint.s…"   mariadb             2 minutes ago       Up 2 minutes        3306/tcp, 33060/tcp
wordpress-wordpress-1   wordpress:latest        "docker-entrypoint.s…"   wordpress           2 minutes ago       Up 2 minutes        0.0.0.0:8000->80/tcp, :::8000->80/tcp

6.Trong điều kiện hoạt động bình thường, trang web WordPress chạy liên tục. Tuy nhiên, để đưa ứng dụng xuống và xóa các container, hãy sử dụng lệnh docker compose down. Lệnh này giữ nguyên nội dung cơ sở dữ liệu. Tuy nhiên, lệnh này docker compose down --volumesxóa các container, cơ sở dữ liệu và tất cả dữ liệu.

sudo docker compose down

Phần kết luận

Docker Compose V2 giúp người dùng xây dựng, chạy và triển khai các giải pháp Docker đa container. Nó sử dụng tệp cấu hình YAML để xác định các dịch vụ, mạng và khối lượng của hệ thống. Docker Compose V2 và lệnh docker composethay thế Compose V1 và docker-composechỉ thị.

Để cài đặt và sử dụng Docker Compose V2, hãy thêm kho lưu trữ Docker vào trình quản lý gói cục bộ. Sau đó tải xuống và cài đặt Docker Engine, Docker CLI và plugin Compose. Xây dựng tệp docker-compose.yml, thêm các dịch vụ/thùng chứa để sử dụng, cùng với bất kỳ không gian lưu trữ, thành phần mạng và cấu hình nào. Sau đó sử dụng lệnh docker compose upđể xây dựng và chạy các thùng chứa. Để biết thêm thông tin về Docker Compose V2, hãy xem tài liệu Docker Compose .

Thông tin thêm

Bạn có thể muốn tham khảo các nguồn sau để biết thêm thông tin về chủ đề này. Mặc dù chúng tôi cung cấp với hy vọng rằng chúng sẽ hữu ích, nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc tính kịp thời của các tài liệu được lưu trữ bên ngoài.

Nguồn: https://www.linode.com/docs/guides/how-to-use-docker-compose-v2/