越来越多的服务通过docker启用,每次系统重启后需要查看容器是否启动,测试的时候需要操作容器。docker-compose解决了这个问题。

1.介绍

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack 中的 Heat 十分类似。

Compose 定位是 “定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)”,其前身是开源项目 Fig,目前仍然兼容 Fig 格式的模板文件。

2.安装docker-compose(mac)

brew install docker-compose

3.使用docker-compose进行管理

#查看帮助
docker-compose -h

# -f  指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
docker-compose -f docker-compose.yml up -d 

#启动所有容器,-d 将会在后台启动并运行所有的容器
docker-compose up -d

#停用移除所有容器以及网络相关
docker-compose down

#查看服务容器的输出
docker-compose logs

#列出项目中目前的所有容器
docker-compose ps

#构建(重新构建)项目中的服务容器。服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db。可以随时在项目目录下运行 docker-compose build 来重新构建服务
docker-compose build

#拉取服务依赖的镜像
docker-compose pull

#重启项目中的服务
docker-compose restart

#删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。
docker-compose rm 

#在指定服务上执行一个命令。
docker-compose run ubuntu ping docker.com

#设置指定服务运行的容器个数。通过 service=num 的参数来设置数量
docker-compose scale web=3 db=2

#启动已经存在的服务容器。
docker-compose start

#停止已经处于运行状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。
docker-compose stop

4.使用docker-compose.yml管理docker服务

以下是自用的配置,作为参考,涵盖日常使用的配置。

version: '2'
services:
#####################################################################################
#docker registry docker 私有仓库 对外5000 端口
# 将本地alpine镜像提交docker私有仓库
# docker images
# docker tag 7328f6f8b418 127.0.0.1:5000/alpine
# docker push 127.0.0.1:5000/alpine
# docker pull 127.0.0.1:5000/alpine
# docker images
  docker-registry:
    image: registry:latest
    restart: always
    ports:
      - "5000:5000"
    expose:
      - "5000"
    volumes:
       - /opt/docker_data/registry:/tmp/registry
#####################################################################################
#consul 服务发现
  consul:
    image: consul:latest
    restart: always
    ports:
      - "8500:8500"
    expose: 
      - "8500"
#####################################################################################
#gitea golang开发,xorm作者,类似github
  gitea:
    image: gitea/gitea:latest
    restart: always
    ports:
      - "10080:3000"
      - "10022:22"
    expose: 
      - "10080"
    volumes:
      - /opt/docker_data/gitea:/data
#####################################################################################
#postgresql mysql 数据库,adminer 数据库web可视化管理
  postgresql:
    image: sameersbn/postgresql:9.6-2
    environment:
      DB_NAME: pgdb
      DB_USER: root
      DB_PASS: 111111
    restart: always
    # ports:
    #   - "5432:5432"
    # expose: 
    #   - "5432"
    volumes:
      - /opt/docker_data/postgresql:/var/lib/postgresql
  mysql:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: 111111
    # ports:
    #   - "3306:3306"
    # expose: 
    #   - "3306"
    volumes:
      - /opt/docker_data/mysql/mysql:/var/lib/mysql
  adminer:
    image: adminer:latest
    # image: nanjishidu/adminer
    # build: ./docker-adminer/4.3
    ports:
      - 8080:8080
    links:
      - mysql:mysql
      - postgresql:postgresql
#####################################################################################
#nsq golang开发消息队列
  nsqlookupd:
    image: nsqio/nsq
    command: /nsqlookupd
    ports:
      - "4160"
      - "4161"
  nsqd:
    image: nsqio/nsq
    command: /nsqd --lookupd-tcp-address=nsqlookupd:4160
    ports:
      - "4150"
      - "4151"
  nsqadmin:
    image: nsqio/nsq
    command: /nsqadmin --lookupd-http-address=nsqlookupd:4161
    ports:
      - "4171"
#####################################################################################
#alpine linux基础镜像 只有不到4M 后期docker会将ubuntu转为alpine
  alpine:
    image: alpine:latest
    restart: always
    # dns:
    #   - 8.8.8.8
    #   - 9.9.9.9
    # dns_search:
    #   - dns1.gophper.com
    #   - dns2.gophper.com
    # env_file:
    #   - ./app.env
    #   - ./web.env
    # entrypoint: ./entrypoint.sh
    command: top