Docker compose
简介
使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build
、docker run
等命令操作容器。
然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,这样效率很低,也不方便管理。
使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具。
yaml 官方示例
https://docs.docker.com/compose/compose-file/compose-file-v3/#compose-file-structure-and-examples
depends_on:依赖关系,如 web 依赖 redis 和 db,通过 depends_on 表明关系。
version: "3.9"
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
安装
Docker Compose 是 Docker 的一个开源项目,目前托管到了 GitHub,需要前往 GitHub 下载。
sudo curl -L "https://github.com/docker/compose/releases/download/2.2.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
由于存放在 GitHub,国内网络限制导致不太稳定,不推荐使用。
推荐使用 道客 提供的 Docker 极速下载 进行安装。
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.2.3/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
安装
[root@sail ~]# curl -L https://get.daocloud.io/docker/compose/releases/download/v2.2.3/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
[root@sail ~]# cd /usr/local/bin/
[root@sail bin]# ls
docker-compose
这样即表示安装成功。
授权
[root@sail ~]# chmod +x /usr/local/bin/docker-compose
查看版本
docker-compose version
[root@sail bin]# docker-compose version
Docker Compose version v2.2.3
显示了版本即代表 Docker Compose 安装完成。
卸载
rm /usr/local/bin/docker-compose
由于 Linux 一切皆文件,删除此文件夹即可完成 Docker Compose 的卸载。
使用
构建
创建项目目录
[root@sail sail]# mkdir docker-compose
[root@sail sail]# cd docker-compose
创建 app.py
[root@sail docker-compose]# vim 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)
redis 是应用容器中 redis 容器的主机名,在同一网络下可以通过服务名访问,端口默认 6379。
创建 requirements.txt
[root@sail docker-compose]# vim requirements.txt
[root@sail docker-compose]# cat requirements.txt
flask
redis
创建 Dockerfile
[root@sail docker-compose]# vim Dockerfile
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"]
创建 docker-compose.yml
[root@sail docker-compose]# vim docker-compose.yml
version: "3.3"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
这个文件定义了两个服务:web 和 redis。
启动
docker-compose up
运行应用
在项目目录中,运行 docker-compose up
来启动应用程序。
第一次启动需要安装很多环境,比较缓慢。
[root@sail docker-compose]# docker-compose up
查看镜像
[root@sail docker-compose]# docker images
启动 Docker Compose 时,会自动拉取需要的镜像。
查看容器
[root@sail docker-compose]# docker ps
可以看到容器命名都带有数字,是因为需要集群管理,数字代表副本序号。
查看网络
[root@sail docker-compose]# docker network ls
项目中的内容都在同个网络下。
访问测试
[root@sail docker-compose]# curl localhost:5000
Hello World! I have been seen 1 times.
[root@sail docker-compose]# curl localhost:5000
Hello World! I have been seen 2 times.
Docker Compose 启动完成。
停止
docker-compose stop
示例
[root@sail docker-compose]# docker-compose stop
[+] Running 2/2
⠿ Container docker-compose-redis-1 Stopped 0.2s
⠿ Container docker-compose-web-1 Stopped
停止并删除容器和网络
docker-compose down
docker-compose down 或者 ctrl + c
docker-compose通过编写docker-compose yml文件 可以通过compose一键启动或者停止!
将会删除启动的容器以及自动建的网络
示例
[root@sail docker-compose]# docker-compose down
[+] Running 3/3
⠿ Container docker-compose-web-1 Removed 10.2s
⠿ Container docker-compose-redis-1 Removed 0.2s
⠿ Network docker-compose_default Removed
[root@sail docker-compose]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@sail docker-compose]# docker network ls
可以看出,容器和网络都被删除了。
更多配置
https://docs.docker.com/compose/compose-file/compose-file-v3/#compose-file-structure-and-examples
yaml编写规则:
官方配置文档:https://docs.docker.com/compose/compose-file/compose-file-v3/#depends_on
docker-compose.yml 核心所在
#三层
version: "3.9" #版本
services: #服务
web:
images:
bulid:
ports:
network:
...
redis:
...
mysql:
...
#第三层 其他配置 网络、数据卷、全局配置
networks:
frontend:
backend:
volumes:
db-data:
configs:
启动顺序
version: "3.9"
services:
web: # 3
build: .
depends_on:
- db
- redis
redis: # 2
image: redis
db: # 1
image: postgres
官网练习 compose一键部署wordpress
https://docs.docker.com/samples/wordpress/