docker入门教学(超详细)(用docker实现mysql主从复制)

一、docker解决什么问题

快速构建:构建方式更加简单。一个命令就可以搞定
环境隔离:可以隔离服务的使用环境。比如同一台机器上要运行jdk8和jdk18.没有docker是非常麻烦的。
快速移植:在服务挂掉时候可以快速启动,环境可以进行版本管理。在需要一个新的环境时候可以快速部署。比如再弄一个测试环境。有了docker改改配置文件一键就能启动。
弹性部署有了k8s的管理可以做到弹性部署,监控等等。

二、docker的优缺点

优点
隔离服务运行环境。
可快速移植环境,对环境进行版本控制
弹性部署。监控隔离。
缺点
浪费了服务器资源(docker的运行也是需要资源的)
增加了运维的复杂度。

三、docker介绍与重要概念

简介:

docker是种Linux容器技术, 基于Go 语言实现。理念“一次镜像,处处运行”。可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化

概念

**仓库(Repository)**是集中存放镜像文件的场所。
类似于代码仓库存放代码。docker仓库是存放docker模板的地方也分为共有仓库和私有仓库
**Docker 镜像(Image)**是环境构建的模板。类似于代码仓库里面代码。有各种提交组成,有版本管理。可以通过命令构建成一个docker容器
**Docker 容器(Container)**容器是用镜像创建的运行实例。类似于代码构建后的服务。一个镜像可以构建成多个容器。容器是隔离的个个服务环境。
在这里插入图片描述
在这里插入图片描述

四、docker常用命令

帮助启动类命令

启动docker: systemctl start docker
停止docker: systemctl stop docker
重启docker: systemctl restart dockel
查看docker状态:systemctl status docker
开机启动: systemctl enable docker
查看docker概要信息: docker info
查看docker总体帮助文档: docker --help
查看docker命令帮助文档:docker 具体命令 --help

镜像类命令

查看全部镜像: docker images
查询远程仓库镜像:docker search 某个XXX镜像名字
拉去某个镜像: docker pull 某个xXX镜像名字
查看镜像空间: docker system df 查看镜像/容器/数据卷所占的空间
删除某个镜像: docker rmi 某个XXX镜像名字ID

容器类命令

启动容器:docker run -it centos /bin/bash
-i: 交互式操作。
-t: 终端。
centos : centos 镜像。
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
要退出终端,直接输入 exit:
查看容器(包括运行中和停止的):docker ps -a
a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
退出容器
-exit run进去,exit出来,容器停止
-ctrl+p+q run进去,ctrl+p+q出来,容器不停止
启动停止运行的容器:docker start 容器名字或者id
重启容器:docker restart 容器名字或者id
停止容器:docker stop 容器名字或者id
强制停止容器:docker kill 容器ID或容器名
删除已停止的容器:docker rm 容器ID
docker rm -f S(docker ps -a -q)
查看容器日志:docker logs 容器ID
查看容器内部进程:docker top 容器ID
拷贝文件到宿主机上:docker cp 容器ID:容器内路径 目的主机路径
导出文件:docker export 容器ID > 文件名.tar
导入文件:cat 文件名.tar| docker import - 镜像用户/镜像名:镜像版本号
提交容器:docker commit -m="提交的描述信息”-a=”作者”容器ID 要创建的目标镜像名:[标签名]

在这里插入图片描述

五、docker安装mysql主从复制实践

1)启动mysql-mast容器(data,conf,logs)卷轴外挂
说明:3307是宿主机的端口,3306是容器中docker的接口
-v 后面是容器卷映射比如/mydata/mysql-master/log是宿主机目录,/var/log/mysql是容器目录
-e后面是设置容器中的环境变量,用于设置mysql的账号密码。

docker pull mysql:5.7
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

注意:启动后docker ps 没有查看到master的容器,docker ps -a看到没有起来。用docker logs [容器id]查看到是缺少了/etc/mysql/conf.d文件那么。我们先不要用外挂起一个mysql把里面的配置文件拷贝出来

docker run -it 3b85be0b10d3 /bin/bash
docker ps
docker cp e02c31d2e98d:/etc/mysql/conf.d /mydata/mysql-master/conf
docker cp e02c31d2e98d:/etc/mysql/mysql.conf.d /mydata/mysql-master/conf

2)配置my.cnf
说明:宿主机的/mydata/mysql-master/conf已经和master的中mysql的/etc/mysql绑定。所以在宿主机修改会影响到容器中的mysql,配置内容详情请看

vi /mydata/mysql-master/conf/my.cnf

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

3)重启mysql-master

docker restart 9d42587acb46

4)进入master,验证登录

docker exec -it 9d42587acb46 /bin/bash
mysql -uroot -proot

5)master创建同步用户slave

create user 'slave'@'%' identified by '123456';
grant replication slave,replication client on *.* TO 'slave'@'%';

6)建立从服务slave

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


7)设置slave的my.cnf

vim /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

8)重启slave

docker restart b2e0363903aa

9)在master查看主从同步状态

show master status;

10)进入slave配置数据库的主从复制
change master参数讲解
master_host:master的ip
master_user:账户名称
master_password:账户密码
master_port:master的端口
master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态master下show master status命令中File对应
master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态master下show master status命令中Position对应
master_connect_retry:连接失败重试的时间间隔,单位为秒。

docker exec -it b2e0363903aa /bin/bash
mysql -uroot -proot

change master to master_host='172.16.16.55',master_user='slave',master_password='123456',master_port=3307,master_log_file='mysql-bin.000004',master_log_pos=617,master_connect_retry=30;

11)进入slave配置slave查看主从复制状态

 show slave status \G;

在这里插入图片描述

12)进入slave开启主从同步

start slave;

13)查看同步状态

两个都是yea才是ok

show slave status;

在这里插入图片描述

14)测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值