一 Docker Compose 概述
Compose 是一个用于定义和运行多容器 Docker 应用程序的工具. 使用 Compose, 您可以使用 YAML 文件来配置应用程序的服务. 然后, 使用单个命令, 您可以从配置中创建并启动所有服务.
Compose 适用于所有环境: 生产, 登台, 开发, 测试以及 CI 工作流程.
使用 Compose 基本上是一个三步过程:
在 Dockerfile 中定义您的应用程序环境, 以便可以在任何地方进行再生产.
定义构成应用程序的服务, docker-compose.YAML 以便它们可以在隔离环境中一起运行.
运行 docker-compose up 和 Compose start 并运行整个应用程序.
一个 docker-compose.YAML 格式示例如下::
- version: '3'
- services:
- web:
- build: .
- ports:
- - "5000:5000"
- volumes:
- - .:/code
- - logvolume01:/var/log
- links:
- - Redis
- Redis:
- image: Redis
- volumes:
- logvolume01: {}
Compose 具有管理应用程序整个生命周期的命令:
启动, 停止和重建服务
查看正在运行的服务的状态
流式传输运行服务的日志输出
在服务上运行一次性命令
二 Docker Compose 安装
2.1 二进制下载安装
- root@docker01:~# sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- root@docker01:~# sudo chmod +x /usr/local/bin/docker-compose
2.2 pip 安装 (推荐)
- root@docker01:~# apt-get -y install python
- root@docker01:~# curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
- root@docker01:~# python get-pip.py # 安装 PIP
- root@docker01:~# pip install docker-compose # 安装 docker compose
- root@docker01:~# docker-compose version # 验证安装
三 Docker Compose 示例
3.1 构建应用程序
- root@docker01:~# mkdir composetest # 创建 Docker Compose 目录
- root@docker01:~# cd composetest/
- root@docker01:~/composetest# vi App.py
提示: 使用 Python 构建一个简单应用, 具体应用内容参考官方示例即可.
https://docs.docker.com/compose/gettingstarted/#step-1-setup
3.2 创建 Dockerfile
- root@docker01:~/composetest# vi Dockerfile # 使用 Dockerfile 构建镜像
- FROM python:3.4-alpine
- RUN mkdir /root/.pip # 创建 pip 源配置目录
- ADD pip.conf /root/.pip/pip.conf # 将国内 pip 源添加至需要构建的镜像中
- ADD . /code
- WORKDIR /code
- RUN pip install -r requirements.txt # 根据文件列表使用 pip 安装
- CMD ["python", "app.py"]
提示: 以上 Dockerfile 相关命令参考《004.docker 镜像管理》.
- root@docker01:~/composetest# vi requirements.txt # 创建安装软件列表文件
- flask
- Redis
- root@docker01:~/composetest# vi pip.conf # 创建基于国内 pip 源的文件
- [global]
- index-url = https://mirrors.aliyun.com/pypi/simple/
- [install]
- trusted-host=mirrors.aliyun.com
Dockerfile 解释:
从 Python 3.4 映像开始构建映像.
创建 pip 配置目录.
将国内 pip 源配置文件添加到 / root/.pip / 映像中的路径中.
将当前目录添加. 到 / code 映像中的路径中.
将工作目录设置为 / code.
安装 Python 相关包.
将容器的默认命令设置为 python App.py.
3.3 使用 Docker Compose 构建服务
- root@docker01:~/composetest# vi docker-compose.YAML
- version: '3'
- services:
- Web:
- build: .
- ports:
- - "5000:5000"
- Redis:
- image: "redis:alpine"
Docker Compose 解释:
此 Compose 文件定义了两个服务, Web 和 Redis.
Web 服务:
使用从 Dockerfile 当前目录中构建的图像.
将容器上的公开端口 5000 转发到主机上的端口 5000. 即使用 Flask Web 服务器的默认端口 5000.
Redis 服务:
使用从 Docker Hub 拉取的公共 R https://registry.hub.docker.com/_/redis/ edis 映像.
1 root@docker01:~/composetest# docker-compose up -d # 开始构建
四 验证确认
浏览器访问: http://172.24.8.111:5000/
- root@docker01:~/composetest# docker-compose ps
- root@docker01:~/composetest# docker ps
1 root@docker01:~/composetest# docker image ls
提示:
使用 Docker Compose 构建的容器名称规则为:[构建时所在目录] _[YAML 构建文件定义服务名] _[容器启动序号] .
使用 Docker Compose 构建的镜像名称规则为:[构建时所在目录] _[YAML 构建文件定义服务名] , 其 tag 为 latest.
五 挂载卷构建
- root@docker01:~/composetest# vi docker-compose.YAML
- version: '3'
- services:
- Web:
- build: .
- ports:
- - "5000:5000"
- volumes:
- - .:/code
- Redis:
- image: "redis:alpine"
- root@docker01:~/composetest# docker-compose up -d # 再次构建
- root@docker01:~/composetest# vi App.py
- ......
- return 'Hello Docker! I have been seen {} times.\n'.format(count)
- ......
浏览器访问: http://172.24.8.111:5000/
提示: 挂载本地卷至容器后, 可快速修改本地文件, 从而达到动态修改容器而无需重建 image 作用.
六 Docker Compose 其他常用命令
docker-compose up -d: 在后台运行服务;
docker-compose ps: 查看当前正在运行的容器;
docker-compose run: 运行一次性命令, 如 docker-compose run Web env.
1 docker-compose stop: 停止服务, 如 docker-compose stop Web
提示: docker-compose 以 YAML 中服务名作为参数, 而非容器名称或 ID.
1 docker-compose down --volumes: 完全删除容器同时删除容器使用的数据卷.
提示: 更多 Docker Compose 命令参考《附 004.Docker Compose 命令详解》.
来源: https://www.cnblogs.com/itzgr/p/10171046.html