
Docker Compose là một công cụ mạnh mẽ giúp định nghĩa và quản lý các ứng dụng Docker đa container. Bài viết này sẽ giúp bạn nắm vững các lệnh cơ bản và kỹ thuật hữu ích khi làm việc với Docker Compose.
Các lệnh cơ bản
- docker-compose up
Chức năng: Tạo và khởi động tất cả các container được định nghĩa trong file docker-compose.yml
Cú pháp: docker-compose up [options] [SERVICE…]
Các tùy chọn phổ biến:
- -d: Chạy ở chế độ detached (nền)
- –build: Xây dựng lại images trước khi khởi động
- –force-recreate: Tạo lại container ngay cả khi cấu hình không thay đổi
- –no-deps: Không khởi động các services phụ thuộc
Ví dụ:
docker-compose up -d
docker-compose up -d –build app
- docker-compose down
Chức năng: Dừng và xóa các container, networks và volumes (tùy chọn)
Cú pháp: docker-compose down [options]
Các tùy chọn phổ biến:
- –volumes hoặc -v: Xóa cả volumes
- –remove-orphans: Xóa container không được định nghĩa
- –rmi [all|local]: Xóa images
Ví dụ:
docker-compose down
docker-compose down -v
- docker-compose ps
Chức năng: Liệt kê các container thuộc project
Cú pháp: docker-compose ps [options] [SERVICE…]
Các tùy chọn phổ biến:
- -q: Chỉ hiển thị ID
- –services: Chỉ hiển thị tên services
Ví dụ:
docker-compose ps
docker-compose ps -q
- docker-compose logs
Chức năng: Xem logs từ các services
Cú pháp: docker-compose logs [options] [SERVICE…]
Các tùy chọn phổ biến:
- -f: Follow log output
- –tail=N: Hiển thị N dòng cuối
- –timestamps: Hiển thị timestamps
Ví dụ:
docker-compose logs -f
docker-compose logs –tail=100 app
Các lệnh quản lý Container
- docker-compose exec
Chức năng: Thực thi lệnh trong container đang chạy (tương tự SSH)
Cú pháp: docker-compose exec [options] SERVICE COMMAND
Các tùy chọn phổ biến:
- -T: Không cấp phát pseudo-TTY
- –index=N: Chỉ định container thứ N
- -u USER: Chạy lệnh với user cụ thể
Ví dụ:
docker-compose exec app bash
docker-compose exec -u root db mysql -u root -p
- docker-compose run
Chức năng: Chạy một lệnh một lần trên service, tạo container mới
Cú pháp: docker-compose run [options] SERVICE [COMMAND]
Các tùy chọn phổ biến:
- –rm: Tự động xóa container sau khi hoàn thành
- -d: Chạy ở chế độ detached
- –no-deps: Không khởi động services phụ thuộc
- -e KEY=VAL: Thiết lập biến môi trường
Ví dụ:
docker-compose run –rm app npm test
docker-compose run -e NODE_ENV=test app node script.js
- docker-compose restart
Chức năng: Khởi động lại các services
Cú pháp: docker-compose restart [options] [SERVICE…]
Các tùy chọn phổ biến:
- -t, –timeout TIMEOUT: Thời gian chờ trước khi buộc dừng (mặc định: 10 giây)
Ví dụ:
docker-compose restart
docker-compose restart -t 30 app
- docker-compose stop
Chức năng: Dừng các services đang chạy
Cú pháp: docker-compose stop [options] [SERVICE…]
Các tùy chọn phổ biến:
- -t, –timeout TIMEOUT: Thời gian chờ trước khi buộc dừng (mặc định: 10 giây)
Ví dụ:
docker-compose stop
docker-compose stop app db
- docker-compose start
Chức năng: Khởi động các services đã được tạo trước đó
Cú pháp: docker-compose start [SERVICE…]
Ví dụ:
docker-compose start
docker-compose start app db
- docker-compose pause/unpause
Chức năng: Tạm dừng hoặc tiếp tục các services
Cú pháp:
- docker-compose pause [SERVICE…]
- docker-compose unpause [SERVICE…]
Ví dụ:
docker-compose pause app
docker-compose unpause app
- docker-compose top
Chức năng: Hiển thị các processes đang chạy trong mỗi container
Cú pháp: docker-compose top [SERVICE…]
Ví dụ:
docker-compose top
docker-compose top app
Kỹ thuật tương tác với Container (Tương tự SSH)
Docker Compose cung cấp nhiều cách để tương tác với container, tương tự như việc sử dụng SSH:
- Tạo shell tương tác
docker-compose exec web /bin/bash
docker-compose exec app /bin/sh
- Sao chép file giữa máy host và container
docker cp $(docker-compose ps -q app):/app/data.json ./local/path/
- Thực thi lệnh với quyền root
docker-compose exec -u root app bash
- Thực thi lệnh shell phức tạp
docker-compose exec app sh -c “cd /app && bash”
- Kiểm tra biến môi trường trong container
docker-compose exec app env
- Chạy lệnh với user cụ thể
docker-compose exec -u postgres db psql -U postgres
- Chạy lệnh trong thư mục cụ thể
docker-compose exec app sh -c “cd /var/log && ls -la”
- Chuyển file từ máy host vào container
docker cp ./config.json $(docker-compose ps -q app):/app/config.json
Tips và best practices
- Sử dụng các file .env: Lưu trữ các biến môi trường trong file .env để tăng tính bảo mật và linh hoạt
- Đặt tên cho project: Sử dụng -p để đặt tên cho project tránh xung đột
- Sử dụng version control: Luôn lưu file docker-compose.yml trong hệ thống version control
- Tách môi trường phát triển và sản xuất: Sử dụng các file docker-compose riêng biệt cho các môi trường khác nhau
Kết luận
Docker Compose là công cụ không thể thiếu cho việc quản lý các ứng dụng Docker đa container. Với các lệnh và kỹ thuật được trình bày ở trên, bạn có thể dễ dàng triển khai, quản lý và gỡ lỗi các ứng dụng phức tạp trong môi trường containerized.
Để lại một bình luận