docker-advanced

Docker Compose

Docker Compose轻松高效的管理容器。

作用:批量容器编排

Compose是Docker官方的开源项目。需要安装

docker-compose up 100个服务

Compose:重要的概念

  • 服务services,容器,应用(web、redis、mysql…)
  • 项目project。一组关联的容器。(博客。web、mysql等等)

安装

1、下载

1
2
3
4
5
# 这个可能有点慢
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 换这个
sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

2、授权

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

3、查看安装是否成功

1
2
3
4
5
[root@control bin]# docker-compose version
docker-compose version 1.25.5, build 8a1c60f6
docker-py version: 4.1.0
CPython version: 3.7.5
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019

快速开始

官网:Get started with Docker Compose | Docker Documentation

1、创建一个项目文件夹

1
2
mkdir composetest
cd composetest

2、在文件夹中创建一个app.py文件,内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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)

3、创建一个Dockerfile文件

1
2
3
4
5
6
7
8
9
10
11
# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

4、在compose文件中定义服务

1
2
3
4
5
6
7
8
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"

5、构建、启动

1
docker-compose up

yaml规则

docker-compose.yaml 核心

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#3层!

version: '' #版本
services : #服务
服务1: web
#服务配置
images
build
network
……
服务2: redis
……
服务3: redis
#其他配置网络/卷、全局规则
volumes:
networks:
configs :