Bạn có chắc chắn muốn xóa bài viết này không ?
Bạn có chắc chắn muốn xóa bình luận này không ?
Chắc hẳn là dev ai cũng từng nghe qua về Docker và Virtual Machine (VBox hoặc Vmware). Docker giúp cho việc xây dựng và triển khai một môi trường phát triển web, server hoặc database trở nên dễ dàng và không còn bị lệ thuộc vào một môi trường duy nhất trên máy.
Tuy nhiên việc quản lý Docker trên một hệ thống lớn với rất nhiều các containers khác nhau sẽ rất phức tạp và khả năng sinh ra nhiều lỗi. (Ví như việc phải cùng lúc liên kết Server với nhiều Database backend và các service riêng rẽ trên môi trường dev và sau đó chuyển qua staging/production)
Để khắc phục vấn đề này, Docker đã đưa ra một công cụ rất hữu ích đấy là Docker Compose.
Docker Compose giúp cho việc tạo và thiết lập các ứng dụng cần sự liên kết giữa nhiều Docker Container với nhau. Với Compose, bạn chỉ phải tạo một file YAML config, và bằng một lệnh duy nhất có thể khởi động Web Server của mình trên một container, connect đến MySQL database trên một container khác, đồng thời có một container thứ ba để chạy các backend service theo chu kỳ lập sẵn.
Cài đặt Compose có thể sử dụng link từ trang chủ của Docker, Inc. dưới đây: https://docs.docker.com/compose/install/
Những tính năng chính của Compose bao gồm:
Để sử dụng Compose thông thường có ba bước sau:
docker-compose up
để khởi động Compose và chạy toàn bộ ứng dụng.Để làm sáng tỏ tính ứng dụng của Docker Compose, dưới đây mình sẽ trình bày ví dụ về các lệnh cơ bản trong file docker-compose.yml và cách thức liên kết các containers với nhau
Các lệnh trong file docker-compose.yml cũng tương tự như các lệnh mà Docker thực hiện.
Đầu tiên hãy tạo một project như sau:
composetest/
commander/
Dockerfile
docker-compose.yml
Bên trong folder commander ta có một file Dockerfile như sau để khởi tạo một container chạy redis commander, đây là một service dùng để visualize redis database:
# create a nodejs container with minimum requirements
FROM node:0.12.2
# download and install redis-commander
RUN curl -L https://github.com/joeferner/redis-commander/tarball/v0.3.2 | tar zx
RUN npm install -g redis-commander
# Run this command everytime this container start up
ENTRYPOINT [ "redis-commander" ]
CMD [ "--redis-host", "redis" ]
EXPOSE 8081
Và Docker-compose.yml:
Version: ‘3’
services:
backend:
image: “redis:3”
restart: always
frontend:
build: commander
links:
- backend:redis
ports:
- 8081:8081
restart: always
File Compose trên đây xác định việc khởi tạo 2 services, backend và frontend. Backend service sử dụng public Redis image từ Docker Hub registry. Frontend service:
Tiếp theo ta build và run app với Compose bằng lệnh:
$ docker-compose up
Compose sẽ lấy về Redis image, build và khởi tạo service đã được định nghĩa sẵn.
Nhập đường dẫn http://localhost:8081 vào trình duyệt trên máy chủ, ta sẽ thấy app đang chạy. Redis Commander chính là User Interface của Redis database backend.
Câu lệnh "docker-compose up" chính là gộp của hai lệnh sau:
docker build -t commander commander
docker run -d --name frontend -p 8081:8081 --link backend:redis commander
Như vậy, với mỗi service mới được thêm vào hoặc chỉnh sửa, ngoài việc tạo Dockerfile cho service thì chỉ cần thêm vào trong docker-compose.yml, service mới sẽ được liên kết dễ dàng với database/service hiện tại.
Để kết thúc các services đang chạy, sử dụng lệnh:
$ docker-compose stop
Và để xóa hoàn toàn container và data volume sử dụng bởi Redis container:
$ docker-compose down --volumes
Trên đây chỉ là một ví dụ đơn giản về sử dụng Compose thay cho gọi lệnh docker thông thường. Tuy nhiên trong một hệ thống phức tạp với nhiều services nhỏ chạy xen kẽ với nhau, việc sử dụng một file yml tập trung để quản lý những container nhỏ là điều rất cần thiết.