简介

允许用户通过一个单独的 docker-compose.yml 模板文件 (YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
Compose 中有两个重要的概念:

  • 服务 ( service ):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
  • 项目 ( project ):由一组关联的应用容器组成的一个完整业务单元,在 dockercompose.yml 文件中定义。

    安装

    1. sudo pip install -U docker-compose

    Compose命令说明

    基本使用格式:

    1. 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

  1. <a name="Lek79"></a>
  2. ### Compose模版文件
  3. 默认的模板文件名称为 docker-compose.yml ,格式为 YAML 格式。<br />**注意每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)等来自动 构建生成镜像。**<br />文件中常见指令的用法如下。
  4. - build:指定Dockerfile所在文件夹的路径
  5. ```yaml
  6. #docker-compose.yml
  7. web:
  8. build: ./djangosite # 使用当前目录下的Dockerfile
  9. container_name: djangosite_web
  • depends_on:解决容器的依赖、启动先后的问题,以下例子中会先启动 db 再启动 web

    1. #docker-compose.yml
    2. web:
    3. build: ./djangosite # 使用当前目录下的Dockerfile
    4. container_name: djangosite_web
    5. networks:
    6. - nginx_network
    7. - db_network
    8. depends_on: # 依赖关系
    9. - 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

  1. expose:
  2. - "8000" # 暴露端口给nginx访问
  1. - networks:配置容器连接的网络
  2. ```yaml
  3. # #docker-compose.yml
  4. networks: # 自定义网络(默认桥接), 不使用links通信
  5. nginx_network:
  6. driver: bridge
  7. db_network:
  8. driver: bridge
  9. services:
  10. db:
  11. image: mysql:5.7
  12. container_name: djangosite_msq # 指定容器名称
  13. networks:
  14. - 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:

  1. - "8000" # 暴露端口给nginx访问
  2. volumes:
  3. - ./djangosite:/var/www/ui_test_platform # 挂载项目代码
  4. - djangosite_media_vol:/var/www/djangosite/media # 以数据卷挂载容器内用户上传媒体文件
  5. - ./log/uwsgi:/tmp/uwsgi # 挂载uwsgi日志
  1. - 模拟一个伪终端
  2. ```yaml
  3. tty: true