Docker学习——MySQL主从复制、DockerFile编写、Docker网络、Docker-compose容器编排

Docker学习——MySQL主从复制、DockerFile编写、Docker网络、Docker-compose容器编排

MySQL主从复制

什么是MySQL主从复制

​ MySQL主从复制是MySQL数据库的一种复制方式,它允许数据从一个MySQL数据库服务器(主服务器)复制到一个或多个MySQL数据库服务器(从服务器)。此方法广泛用于提供数据的副本,实现数据备份、分流读请求、故障恢复等。

主从复制的原理

1. 二进制日志(Binary Log)

主服务器在执行完增删改等操作后,会在二进制日志中记录下这些操作事件。这些日志包含了改变数据库数据所需的全部信息。

2. I/O线程

从服务器启动后,会启动一个I/O线程,连接到主服务器,读取主服务器的二进制日志,并将读取到的日志信息写入到从服务器的中继日志(Relay Log)。

3. SQL线程

从服务器会启动一SQL线程,用来读取中继日志中的事件,按照事件的顺序逐一执行,至此完成了一次数据的复制。

​ 主从复制默认是异步的,即主服务器写入二进制日志后即认为操作已完成,无需等待从服务器更新。这样就可以在主服务器上快速完成事务,但也可能导致主从服务器的数据在某个时间点不一致。

Docker上MySQL主从搭建的流程

1.搭建主服务器容器实例3307
docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7

注意,进入/mydata/mysql-master/conf目录下新建my.cnf,在配置文件中要加入下面内容:

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101 
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能
log-bin=mall-mysql-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

进入mysql-master容器

docker exec -it mysql-master /bin/bash

mysql -uroot -proot

然后,在master容器实例内创建数据同步用户

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
2.搭建从服务器容器实例3308
docker run -p 3308:3306 --name mysql-slave \
-v /mydata/mysql-slave/log:/var/log/mysql \
-v /mydata/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7

同样也要加配置文件

进入/mydata/mysql-slave/conf目录下新建my.cnf并加入下面内容

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062  
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin  
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
## slave设置为只读(具有super权限的用户除外)
read_only=1
3.配置主从同步

主数据库中查看主从同步状态

show master status;

从数据库中配置主从复制

change master to master_host='宿主机ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;

参数说明:

master_host:主数据库的IP地址;

master_port:主数据库的运行端口;

master_user:在主数据库创建的用于同步数据的用户账号;

master_password:在主数据库创建的用于同步数据的用户密码;

master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;

master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;

master_connect_retry:连接失败重试的时间间隔,单位为秒。

从数据库中查看主从同步状态

show slave status \G;

从数据库中开启主从同步

start slave;

主机新建库-使用库-新建表-插入数据

从机使用库-查看记录

成功查看到记录则同步成功。

DockerFile编写

什么是DockerFile

Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。

构建三步骤

· 编写Dockerfile文件

· docker build命令构建镜像

· docker run依镜像运行容器实例

常用保留字指令

· FROM

基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from

· RUN

容器构建时需要运行的命令

· EXPOSE

当前容器对外暴露出的端口

· MAINTAINER

镜像维护者的姓名和邮箱地址

· WORKDIR

指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点

· ADD

将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包

· VOLUME

容器数据卷,用于数据保存和持久化工作

· CMD

指定容器启动后的要干的事情

· ENV

· 用来在构建镜像过程中设置环境变量

FROM centos

MAINTAINER zzyy<zzyybs@126.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

EXPOSE 80

CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

Docker网络

什么是Docker网络

Docker启动后,会产生一个名为docker0的虚拟网桥

Docker网络的种类

· bridge模式:使用–network bridge指定,默认使用docker0

· host模式:使用–network host指定

· none模式:使用–network none指定

· container模式:使用–network container:NAME或者容器ID指定

自定义网络

​ 容器挂了后ip会变,docker容器内部的ip是有可能会发生改变的,所以要使用自定义网络来维护好主机名和ip的对应关系(ip和域名都能ping通)

通过在docker run指令中加入–network选项来创建,如:

docker run -d -p 8081:8080 --network 自定义网络名称  --name tomcat81 billygoo/tomcat8-jdk8

常用指令

docker network --help

固定格式

docker network +
	connect     Connect a container to a network
	create      Create a network
	disconnect  Disconnect a container from a network
	inspect     Display detailed information on one or more networks
	ls          List networks
	prune       Remove all unused networks
	rm          Remove one or more networks

Docker-Compose容器编排

什么是Compose

​ Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器

​ Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建。解决了容器与容器之间如何管理编排的问题。

安装步骤

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

chmod +x /usr/local/bin/docker-compose

再输入

docker-compose --version

出现版本号即为安装成功。

当然,现在docker自带compose,不需要下载

核心概念

· 一文件

​ docker-compose.yml

· 两要素

​ 服务(service)

​ 一个个应用容器实例,比如订单微服务、库存微服务、mysql容器、nginx容器或者redis容器

​ 工程(project)

​ 由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

使用步骤

· 编写Dockerfile定义各个微服务应用并构建出对应的镜像文件

· 使用 docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务。

· 最后,执行docker-compose up命令 来启动并运行整个应用程序,完成一键部署上线

常用命令

以下为经常使用的compose命令

docker-compose -h              	# 查看帮助
docker-compose up              	# 启动所有docker-compose服务
docker-compose up -d            # 启动所有docker-compose服务并后台运行
docker-compose down             # 停止并删除容器、网络、卷、镜像。
docker-compose config     		# 检查配置
docker-compose restart   		# 重启服务
docker-compose start     		# 启动服务
docker-compose stop      		# 停止服务

ll
docker-compose -h # 查看帮助
docker-compose up # 启动所有docker-compose服务
docker-compose up -d # 启动所有docker-compose服务并后台运行
docker-compose down # 停止并删除容器、网络、卷、镜像。
docker-compose config     # 检查配置
docker-compose restart   # 重启服务
docker-compose start     # 启动服务
docker-compose stop      # 停止服务


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值