简介
允许用户通过一个单独的 docker-compose.yml 模板文件 (YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
Compose 中有两个重要的概念:
- 服务 ( service ):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
项目 ( project ):由一组关联的应用容器组成的一个完整业务单元,在 dockercompose.yml 文件中定义。
安装
sudo pip install -U docker-compose
Compose命令说明
基本使用格式:
docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
命令选项
-f, —file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml ,可以 多次指定。
- -p, —project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名。
- —x-networking 使用 Docker 的可拔插网络后端特性
- —x-network-driver DRIVER 指定网络后端的驱动,默认为 bridge
- —verbose 输出更多调试信息。
- -v, —version 打印版本并退出。
常用命令
```bash构建(重构)项目中的服务容器
docker-compose build [options] [SERVICE…]
命令说明: —force-rm 删除构建过程中的临时容器。 —no-cache 构建镜像过程中不使用 cache(这将加长构建过程)。 —pull 始终尝试通过 pull 来获取更新版本的镜像。
停止 up 命令所启动的容器,并移除网络
docker-compose down
重启项目中的服务
docker-compose restart
删除停止状态的容器
docker-compose rm
后台执行
docker-compose up -d
停止已经处于运行状态的容器,但不删除它
docker-compose stop
查看各个服务器内运行的进程
docker-compose top
<a name="Lek79"></a>
### Compose模版文件
默认的模板文件名称为 docker-compose.yml ,格式为 YAML 格式。<br />**注意每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)等来自动 构建生成镜像。**<br />文件中常见指令的用法如下。
- build:指定Dockerfile所在文件夹的路径
```yaml
#docker-compose.yml
web:
build: ./djangosite # 使用当前目录下的Dockerfile
container_name: djangosite_web
depends_on:解决容器的依赖、启动先后的问题,以下例子中会先启动 db 再启动 web
#docker-compose.yml
web:
build: ./djangosite # 使用当前目录下的Dockerfile
container_name: djangosite_web
networks:
- nginx_network
- db_network
depends_on: # 依赖关系
- db
environment:设置环境变量。你可以使用数组或字典两种格式,可以用来防止泄露不必要 的数据 ```yaml
docker-compose.yml
environment:
- DEBUG=False
- TZ=Asia/Shanghai # 设置容器时区与宿主机保持一致
environment:
- MYSQL_ROOT_PASSWORD=root # 数据库密码
- MYSQL_DATABASE=mysite # 数据库名称
- TZ=Asia/Shanghai # 设置容器时区与宿主机保持一致 ```
- expose:暴露端口,但不映射到宿主机,只被连接的服务访问 ```yaml
#docker-compose.yml
expose:
- "8000" # 暴露端口给nginx访问
- networks:配置容器连接的网络
```yaml
# #docker-compose.yml
networks: # 自定义网络(默认桥接), 不使用links通信
nginx_network:
driver: bridge
db_network:
driver: bridge
services:
db:
image: mysql:5.7
container_name: djangosite_msq # 指定容器名称
networks:
- db_network
- volumes:数据卷所挂载路径设置。可以设置宿主机路径 ( HOST:CONTAINER ) 或加上访问模式 ( HOST:CONTAINER:ro )或加上读写模式(HOST:CONTAINER:rw)
```yaml
#docker-compose.yml
volumes: # 自定义数据卷,位于宿主机/var/lib/docker/volumes内 djangosite_db_vol: # 定义数据卷同步容器内mysql数据 djangosite_media_vol: # 定义数据卷同步media文件夹数据
web: build: ./djangosite # 使用当前目录下的Dockerfile container_name: djangosite_web expose:
- "8000" # 暴露端口给nginx访问
volumes:
- ./djangosite:/var/www/ui_test_platform # 挂载项目代码
- djangosite_media_vol:/var/www/djangosite/media # 以数据卷挂载容器内用户上传媒体文件
- ./log/uwsgi:/tmp/uwsgi # 挂载uwsgi日志
- 模拟一个伪终端
```yaml
tty: true