# docker-compose小结

docker-compose是基于docker的,可以组装docker镜像的工具,用来定义和运行由多个容器组成的应用。 可以使用 YML 文件来配置应用程序需要的所有服务。 使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

# 安装

windows各种坑,只说linux环境下安装 (opens new window)

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

$ docker-compose --version
docker-compose version 1.25.5, build 1110ad01

# 配置样例

正如docker的配置镜像文件是Dockerfiledocker-compose的配置文件是:docker-compose.yml

一个简单例子如下:

version: '3' # 指定的`docker-compose`对应的版本。以前用的是2,现在都改用3了。

services:
  qserver:
    build: ./dir  # 指定为构建镜像上下文路径,此处为 ./dir/Dockerfile 所构建的镜像
    restart: always # 重启策略,如果容器退出后,是否要重启,怎样重启
    ports:
      - "3000:3000"
      - "3001:3001"
    volumes: # 挂载文件,冒号前是本地,后面是docker容器内文件夹
      - /home/logs:/app/logs
      - /home/config:/app/config
    depends_on: # 依赖于下一个服务
      - db  
    environment: # 设置环境变量
      - NODE_ENV=production
  db:
    image: docker.io/mongo
    restart: on-failure:5
    ports:
      - "27018:27017"

这里使用了2个镜像,启动了2个服务,前者依赖于后者。 比如我这里使用了mongodb的镜像,在前者的生产代码里,db的地址是这样的:mongodb://db:27017/test。 也就是说,ip地址用这里服务的名称就可以,端口号用默认的27017,与暴露到外界的无关。 我这里故意暴露一个27018,来加深印象。

# 启动

docker-compose up

# 后台启动
docker-compose up -d

# 只启动某个服务,例如:qserver
docker-compose up qserver

# 停止

docker-compose stop

再复杂的配置,就需要参考官网 (opens new window)了。