- Sử dụng Docker Compose để delopy nhiều container
-
Các ứng dụng hiện nay được xây dựng từ các ựng dung nhỏ để trrowr thành một usefull application . Chúng ta gọi đó là microservice. . Một app đơn giản được xây dựng từ các thành phần nhỏ sau :
- front-end
- catalog
- ordering
- backend database
-
Triển khai và quản lý các thành phần nhỏ để trở thành usefull application và khả năng tập trung cho cả ứng dụng thì không nên sử dụng các docker image riêng lẻ. Đây là đất diễn cho Docker Compose
-
Docker compose cho phép khái báo các thành phần trong usefull app tại một file cấu hình duy nhất. Việc tập trung cấu hình sẽ dễ quản lý phiên bản , xử lý lỗi cũng như migrate application
- Cài đặt Docker Compose
https://www.server-world.info/en/note?os=CentOS_7&p=docker&f=11
https://www.server-world.info/en/note?os=Ubuntu_18.04&p=docker&f=7
apt install docker-compose
root@nguyenhungsync:~# docker-compose version
docker-compose version 1.17.1, build unknown
docker-py version: 2.5.1
CPython version: 2.7.15rc1
OpenSSL version: OpenSSL 1.1.0g 2 Nov 2017
-
Compose sử dụng YAML file để cấu hình multi-service application . YAML là một subset của JSON, có thể sử dụng JSON thay thế. Tên mặc định file cấu hình
docker-compose.yml
-
Building a Compose config can be divided into the 6 main steps:
- Split your app into services
- Pull or build images
- Configure environment variables
- Configure networking
- Set up volumes
- Build & Run
-
Trong một compose file chủ yếu gồm :
- version
- services
- netwoking
- volume
-
Câu hình cho Docker compose
https://docs.docker.com/compose/compose-file/
- Thực hiện khởi tạo một app Flash đơn giản
mkdir testcompose && cd testcompose
cat <<EOF> app.py
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
EOF
- Khởi tạo requirment
cat <<EOF> requirements.txt
flask
redis
EOF
- Khởi tạo Dockerfile
cat <<EOF>Dockerfile
FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
EOF
- Khởi tạo Dockercompose
cat <<EOF>docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
EOF
- Khởi động docker compose
docker-compose up