1 docker compose简介

Compose是 Docker 的服务编排工具,主要用来构建基于Docker的复杂应用Compose 通过一个配置文件来管理多个 -Docker 容器,非常适合组合使用多个容器进行开发的场景。
docker-compose 是编排容器的。例如,你有一个 php 镜像,一个 mysql 镜像,一个 nginx 镜像。
如果没有 docker-compose ,那么每次启动的时候,你需要敲各个容器的启动参数,环境变量,容器命名,指 定不同容器的链接参数等等一系列的操作,相当繁琐。
而用了 docker-composer 之后,你就可以把这些命令一次性写在 docker-composer.yml 文件中,以后每次启动这一整个环境(含3个容器)的时候,你只要敲一个 docker-composer up命令就ok了。
dockerfile 的作用是从无到有的构建镜像。它包含安装运行所需的环境、程序代码等。这个创建过程就是使用 dockerfile 来完成的。 Dockerfile -为 docker build 命令准备的,用于建立一个独立的 image ,在 docker-compose 里也可以用来实时 build

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

如果你还不了解 YML 文件配置,可以先阅读 YAML 入门教程

Compose 使用的三个步骤:

  • 使用 Dockerfile 定义应用程序的环境。
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

2 mac安装docker compose

Docker for Mac 和 Docker Toolbox 已经包含了 Compose 了, 所以 Mac 用户不用单独安装Compose了。

mac安装docker学习链接

docker compose使用教程

3 docker-compose配置内容详解

docker compose配置配置内容详解

Docker-Compose标准模板文件应该包含version、services、networks 三大部分,最关键的是services和networks两个部分。

详细使用介绍2

如所示为一个典型docker-compose示例

version: '2'
services:
  web:
    image: dockercloud/hello-world
    ports:
      - 8080
    networks:
      - front-tier
      - back-tier
 
  redis:
    image: redis
    links:
      - web
    networks:
      - back-tier
 
  lb:
    image: dockercloud/haproxy
    ports:
      - 80:80
    links:
      - web
    networks:
      - front-tier
      - back-tier
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock 
 
networks:
  front-tier:
    driver: bridge
  back-tier:
driver: bridge

4 docker-compose常用命令

常用命令参考链接

docker-compose常用命令2

#### 开始构建 -d打印详细信息
docker-compose up
#### 查看状态
docker-compose ps
# 亦或者
docker ps
#### 停止服务
ocker-compose stop
# 亦或者
docker-compose dwon
#### 重启服务
docker-compose restart

5 异常说明

关于docker-compose.yaml异常-service ‘volumes’ must be a mapping not an array

通常异常都是由于编写的docker-compose文件没有符合相关要求,这里需要参考第三小节的内容,严查清楚yaml的层级关系和语法是否正常。

docker-compose - service 'volumes' must be a mapping not an array

bash进入异常starting container process caused “exec: “bash”: executable file not found in $PATH”: unknown

(⎈ |context-cluster1-read:business)☁  01-learning-for-mybatis [master] ⚡  docker exec -it c92ad832cc2d bash
OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused "exec: \"bash\": executable file not found in $PATH": unknown

这通常是容器镜像不支持bash shell或者环境变量没有bash,可以换成sh如下所示

docker exec -it c92ad832cc2d sh