Docker compose

Docker compose

Docker Compose là một công cụ dùng để định nghĩa và chạy các chương trình Docker sử dụng nhiều container (multi-container). Với Docker Compose, chúng ta sử dụng một file YAML để thiết lập các service cần thiết cho chương trình. Cuối cùng, với một câu lệnh, chúng ta sẽ create và start tất cả service từ các thiết lập đó.

Sử dụng Compose thường có ba bước sau:

  • Khai báo các môi trường của chương trình trong Dockerfile.

  • Khai báo các service cần thiết cho chương trình trong file docker-compose.yml để các service có thể chạy cùng với nhau trong một môi trường.

  • Chạy câu lệnh docker-compose up để start Compose và chạy chương trình.

Compose có những câu lệnh cho phép quản lí lifecycle của chương trình:

  • Start, Stop và Build lại service.

  • Xem status của các service đang chạy.

  • Xem log output của service đang chạy.

  • Chạy câu lệnh một lần (one-off command) trong một service.

Những lợi ích khi sử dụng Compose

  • Tạo ra nhiều môi trường độc lập (isolated environments) trong một host: Compose cô lập môi trường của các project để đảm bảo chúng không bị xung đột lẫn nhau, cũng như dễ dàng tạo những bản sao của một môi trường nào đó.

  • Chỉ tạo lại các container đã thay đổi: Compose sẽ nhận biết được các service chưa thay đổi và sử dụng lại các container tương ứng với service đó.

  • Điều chỉnh các biến sử dụng cho các môi trường: Compose sử dụng các biến trong Compose file cho các môi trường. Vì vậy với môi trường hay người dùng khác nhau, có thể điều chỉnh các biến khi sử dụng Compose để thiết lập các service.

Thực hành

  1. Truy cập vào giao diện EC2 đã kết nối.
  • Sử dụng lệnh để clone code về bằng git (bạn clone thêm 1 repo ở máy tính bạn để dễ dàng chỉnh sửa cho các bước tiếp theo)
git clone https://github.com/AWS-First-Cloud-Journey/AWS-FCJ-Management.git

Image Node

  1. Kiểm tra lại đã clone repo
ls

Image Node

  1. Sau đó tạo 1 file .env cấu hình database.
touch .env
vi .env

Sau đó thực hiện cấu hình và lưu lại bằng lệnh !wq

Image Node

  1. Xem lại file đã cấu hình.
cat .env

Image Node

  1. Sau đó chúng ta xem nội dung file docker-compose.yaml
cat docker-compose.yaml

Image Node

  1. Thực hiện cài đặt Docker Engine
sudo amazon-linux-extras install docker
sudo service docker start
sudo usermod -a -G docker ec2-user

Image Node

  1. Tự động bật docker
sudo chkconfig docker on

Sau đó cài docker-compose bản mới nhất

sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

Chúng ta sẽ cấp quyền cho docker-compose

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

Kiểm tra cài đặt thành công

docker-compose version

Image Node

  1. Sau khi cài đặt thành công docker-compose. Chúng ta thực hiện lệnh để chạy docker compose
docker-compose up --build

Image Node

  1. Chúng ta sẽ kiểm tra Task Definitions trong giao diện ECS

Image Node

  1. Thực hiện chạy lệnh và lấy thông số để cấu hình
aws ecs describe-task-definition --task-definition aws-fcj-task-def
  • Thực hiện cấu hình file taskdef.json và file appspec.yaml

Image Node

  1. Chúng ta cũng clone 1 repo ở máy tính để tiện việc chỉnh sửa, cấu hình template. Thực hiện cấu hình dựa trên thông tin của Task Definition.

Image Node

  1. Để tránh tình trạng bị lỗi limit rate docker lúc build thì chúng ta sẽ thay FROM node:16-alpine thành image chúng ta đã build ở bước trước.

Pipeline

  1. Cấu hình file buildspec.yaml

Pipeline

  1. File appspec.yaml sau khi đã cấu hình.

Pipeline

  1. File taskdef.json sau khi đã cấu hình.

Pipeline