Docker Compose
Compose là công cụ giúp định nghĩa và khởi chạy multi-container Docker applications.
Chỉ với một câu lệnh, ta có thể dễ dàng create và start toàn bộ các services phục vụ cho việc chạy ứng dụng.
Việc sử dụng Docker Compose được tóm lược trong 3 bước cơ bản sau:
- Khai báo app’s environment với Dockerfile.
- Khai báo các services cần thiết để chạy app trong docker-compose.yml.
- Run docker-compose up và Compose sẽ start và run app.
1. Cài đặt
- Install using pip
1
$ pip install docker-compose
Hoặc bạn có thể sử dụng cách khác:
- Install as a container
1
2$ curl -L https://github.com/docker/compose/releases/download/1.11.2/run.sh > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
2. Ví dụ chạy wordpress.
Chúng ta sẽ tạo ra 2 containers, 1 containers chứa mã nguồn wordpress và 1 containers chưa cơ sở dữ liệu mysql. Bằng cách định nghĩa trong file compose. Chỉ với 1 dòng lệnh khởi tạo, docker sẽ lập tức tạo ra 2 containers và sẵn sàng cho chúng ta dựng lên wordpress, một cách nhanh chóng.
Đoạn mã compose: Viết theo cú pháp YAML.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24version: '2'
services:
db:
image: mysql:5.7
volumes:
- ./data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpressversion: '2'
: Chỉ ra phiên bản docker-compose sẽ sử dụng.services:
: Trong mục services, chỉ ra những services (containers) mà ta sẽ cài đặt. Ở đây, tạo sẽ tạo ra services tương ứng với 2 containers là db và wordpress.Trong services db:
- image: chỉ ra image sẽ được sử dụng để create containers. Ngoài ra, bạn có thể viết dockerfile và khai báo lệnh
build
để containers sẽ được create từ dockerfile. - volumes: mount thư mục data trên host (cùng thư mục cha chứa file docker-compose) với thư mục /var/lib/mysql trong container.
- restart: always: Tự động khởi chạy khi container bị shutdown.
- environment: Khai báo các biến môi trường cho container. Cụ thể là thông tin cơ sở dữ liệu.
- image: chỉ ra image sẽ được sử dụng để create containers. Ngoài ra, bạn có thể viết dockerfile và khai báo lệnh
Trong services wordpress:
- depends_on: db: Chỉ ra sự phụ thuộc của services wordpress với services db. Tức là services db phải chạy và tạo ra trước, thì services wordpress mới chạy.
- ports: Forwards the exposed port 80 của container sang port 8000 trên host machine.
- environment: Khai báo các biến môi trường. Sau khi tạo ra db ở container trên, thì sẽ lấy thông tin đấy để cung cấp cho container wordpress (chứa source code).
Khởi chạy
1
root@adk:/opt/test/data# docker-compose up
Kết quả
1
2
3
4
5
6root@adk:/opt/test/data# docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------
test_db_1 docker-entrypoint.sh mysqld Up 3306/tcp
test_wordpress_1 docker-entrypoint.sh apach ... Up 0.0.0.0:8080->80/tcp
root@adk:/opt/test/data#
1 | root@adk:/opt/test/data# docker ps -a |
3. Một vài chú ý:
- dockerfile dùng để build các image.
- docker-compose dùng để build và run các container.
- docker-compose viết theo cú pháp YAML, các lệnh khai báo trong docker-compose gần tương tự với thao tác chạy container
docker run
. - docker-compose cung chấp chức năng
Horizontally scaled
, cho phép ta tạo ra nhiều container giống nhau một cách nhanh chóng. Bằng cách sử dụng lệnh1
docker-compose scale name_service=5
Trong đó, name_service là tên services cần tạo container. 5 là số container sẽ được tạo ra.