docker-compose使用介绍
越来越多的服务通过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