原创声明:本人所发内容及涉及源码,均为亲手所撸,如总结内容有误,欢迎指出
唠嗑部分
本节我们来说说Docker-Compose,下面先看官方介绍
Compose项目是Docker官方的开源项目,负责实现对 Docker容器集群的快速编排。
其代码目前在https://github.com/docker/Compose 上开源。
Compose中有两个重要的概念:
-
服务( service ):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
-
项目( project ):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
Compose的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
Compose 项目由 Python编写,实现上调用了Docer服务提供的API来对容器进行管理。
因此,只要所操作的平台支持Docer APl,就可以在其上利用Compose来进行编排管理。
既然有了docker,为什么还要用docker-compose呢,我们来说一下,首先docker每次只能启动一个容器,随着服务高可用的要求,企业级项目都会要求集群部署,同一个服务会部署很多个实例,实际是多台服务为用户提供服务
假如部署10个实例,使用docker就需要执行10次run命令,如果是10个微服务,每个微服务部署10份,那就是100份,噩梦...
docker-compose是对容器集群的快速编排工具,可以同时启动多个实例,下面我们来介绍一下
言归正传
安装(在安装了docker的前提下安装docker-compose)
# 安装 curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` >/usr/local/bin/docker-compose # 授权 sudo chmod +x /usr/local/bin/docker-compose
测试安装结果
docker-compose version
yml规范
docker-compose需要维护一个docker-compose.yml,学过SpringBoot的同学们都应该知道这种格式,就不多说了,自行百度哈
能写什么
-
build 构建镜像
-
command 用来覆盖容器启动的默认命令
-
container_name 容器名
-
depends_on 依赖于哪个容器,多个容器启动注意顺序
-
env_file 以配置文件的形式替换enviroment中的配置,因为直接写太敏感
-
enviroment 用来给容器中的某些环境赋值
-
healthcheck 心跳机制,检测容器是否存活
-
image 指定使用的镜像
-
networks 指定网络
-
ports 端口映射
-
volumes 数据卷
-
version 版本,大于等于3.0即可
docker-compose常用命令总结
说明:一个docker-compose.yml对应一个服务,下文说的服务代表yml中配置的所有容器
-
docker-compose up 启动命令,加-d选项表示后台启动 相当于docker run
-
docker-compose down 卸载yaml中的所有服务,包括网络、数据卷 相当于docker rm
-
docker-compose ps 查看服务中的所有容器 相当于docker ps
-
docker-compose stop 停止服务 相当于docker stop
-
docker-compose start 启动服务 相当于docker start
-
docker-compose restart 重启服务 相当于docker restart
-
docker-compose logs 查看服务日志,加-f选项会实时监听 相当于docker logs
-
docker-compose bulid 构建镜像,一般会使用下面代替 相当于docker build
-
docker-compose up -d --build 构建镜像+后台启动
-
docker-compose exec id bash 进入容器 相当于docker exec -it id bash
-
docker-compose -h 查看帮助
案例搭建
我们启动3台容器作为案例,搭建两台mysql,一台nginx
提前创建挂载目录并授权
mkdir -p /home/mysql-1/data mkdir -p /home/mysql-2/data chmod -R 777 /home/mysql-1/data chmod -R 777 /home/mysql-2/data
docker-compose.yml
version: "3.0" services: nginx: container_name: cxs-nginx image: nginx ports: - "80:80" networks: - cxs-network mysql-1: container_name: cxs-mysql-1 image: mysql:5.7 ports: - "3307:3306" volumes: - mysqlconf1:/etc/mysql/conf.d - /home/mysql-1/data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=root networks: - cxs-network mysql1-2: container_name: cxs-mysql-2 image: mysql:5.7 ports: - "3308:3306" volumes: - mysqlconf2:/etc/mysql/conf.d - /home/mysql-2/data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=root networks: - cxs-network volumes: mysqlconf1: mysqlconf2: networks: cxs-network:
启动(在docker-compose.yml目录执行)
docker-compose up -d
访问测试
nginx
连接mysql1,mysql将端口改为3308即可
