docker-compose项目是docker官方的开源项目, 负责实现对docker容器集群的快速编排。
docker-compose将所管理的容器分为三层, 分别是工程(project),服务(service)以及容器(containner)
docker-compose运行目录下的所有文件(docker-compose.yml文件、extends文件或环境变量等)组成一个工程,如无特殊指定,工程名即为当前目录名。
一个工程当中,可以包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。
一个服务中可以包括多个容器实例,docker-compose并没有解决负载均衡的问题。因此需要借助其他工具实现服务发现及负载均衡,比如consul。
docker-compose的工程配置文件默认为docker-compose.yml。可以通过环境变量COMPOSE_FILE -f 参数自定义配置文件,其自定义多个有依赖关系的服务及每个人服务运行的容器
使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况,
例如要实现一个web项目,除了web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。
compose允许用户通过一个单独docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)
docker-compose项目由pypthon编写,调用docker服务提供的API来对容器进行管理,因此, 只要所操作的平台支持docker-API,就可以在其上利用conpose来进行编排管理。
简单来说:就是来管理多个容器的,定义启动顺序的,合理编排,方便管理。
?$ docker network create --subnet=172.18.0.1/24 mynet
查看网络信息
? $ docker network list
查看指定网络的详细信息
?
?$ docker network inspect mynet
删除指定网络
?$ docker network rm mynet
创建容器并测试自定义网络?
?$ docker run -it --name t1 --net mynet \
? ? ? ?--ip 172.18.0.2 --restart=always centos:latest /bin/bash
?向docker compose移植
?$ mkdir /docker-compose
? $ rz
后台启动服务
? $ docker-compose up -d ?//启动
? $ docker-compose stop ? //停止
? $ docker-compose down ? //下线及停止+删除
部署mysql主从集群
??
? 1.mysql-master主库
? ??
? ? 1.1 在宿主机中创建相关目录,用于挂载容器的相关数据
? ??
? ? $ mkdir -p /data/mysql-master/{conf,data}
? ??
? ? 1.2 上传主数据库容器的配置文件my.cnf到/data/mysql-master/conf目录下
? ??
? ? $ cd /data/mysql-master/conf
? ? $ rz将课件mysql/mysql-master目录下的conf上传
启动master节点
? ??
? ? $ docker run \
? ? ? ? ? --name mysql-master \
? ? ? ? ? --net mynet \
? ? ? ? ? --ip 172.18.0.3 \
? ? ? ? ? -v /data/mysql-master/conf/my.cnf:/etc/my.cnf \
? ? ? ? ? -v /data/mysql-master/data:/var/lib/mysql \
? ? ? ? ? --privileged=true \
? ? ? ? ? --restart=always \
? ? ? ? ? -e MYSQL_ROOT_PASSWORD=123456 \
? ? ? ? ? -d mysql/mysql-server:5.7?
-p 3306:3306 可以不要?
删除mysql-master容器并向docker compose移植
?$ docker stop $(docker ps -aq) && docker rm $(docker ps -aq)
进入主库容器配置远程连接
$ docker-compose exec --index=1 mysql-master /bin/sh
? 或者
? ?$ docker exec -it mysql-master /bin/sh
登录mysql服务器,之后输入mysql密码:123456 ?
mysql -u root -p
给用户授权并更新
?grant all privileges on *.* to root@'%' identified by '123456';
? ? flush privileges;
mysql-slave从库
在宿主机中创建相关目录,用于挂载容器的相关数据
?$ mkdir -p /data/mysql-slave/{conf,data}
上传从数据库容器的配置文件my.cnf到/data/mysql-slave/conf目录下
? ?$ cd /data/mysql-slave/conf
? ? $ rz
将课件mysql/mysql-slave目录下的conf上传
向docker compose移植
docker-compose/docker-compose-v2.yml
进入从库容器配置远程连接
进入mysql容器
$ docker-compose exec --index=1 mysql-slave /bin/bash
?或者
?$ docker exec -it mysql-slave /bin/bash
登录mysql服务器,之后输入mysql密码:123456 ?
? ? mysql -u root -p给用户授权并更新
? ? grant all privileges on *.* to root@'%' identified by '123456';
? ? flush privileges;
实现mysql主从集群
先进入mysql-master容器
$ docker exec -it mysql-master /bin/bash
登陆mysql-master主节点
mysql -u root -p?
查看主节点关键参数
?show master status;