一、docker安装
1.1 前提条件
Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker。
shell> uname -r
使用root权限登录 Centos。确保yum包更新到最新.
shell> sudo yum update
如果安装过旧版本的话:
shell> sudo yum remove docker docker-common docker-selinux docker-engine
1.2 安装软件包
shell> sudo yum install -y yum-utils device-mapper-persistent-data lvm2
yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的。
1.3 设置yum源
shell> vi /etc/sysconfig/network-scripts/ifcfg-ens33 DNS1=114.114.114.114 DNS2=8.8.8.8 shell> systemctl restart network
(推荐)设置阿里云yum源
shell> sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(或者)设置官方yum源
shell> sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
添加成功: 已加载插件:fastestmirror adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo grabbing file https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo repo saved to /etc/yum.repos.d/docker-ce.repo
1.4 安装docker
可以查看所有仓库中所有docker版本,并选择特定版本安装。
shell> yum list docker-ce --showduplicates | sort -r
docker安装所需依赖包,配置CentOS源 EPEL
shell> wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo shell> yum install epel-release -y
安装最新版本的docker
shell> sudo yum install -y docker-ce
(或者)安装指导版本的docker
shell> sudo yum install docker-ce-17.12.0.ce
1.5 启动docker
shell> sudo systemctl start docker shell> sudo systemctl enable docker
1.6 验证安装
有client和service两部分表示docker安装启动都成功了。
shell> docker version Client: Docker Engine - Community Version: 20.10.1 API version: 1.41 Go version: go1.13.15 Git commit: 831ebea Built: Tue Dec 15 04:37:17 2020 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.1 API version: 1.41 (minimum version 1.12) Go version: go1.13.15 Git commit: f001486 Built: Tue Dec 15 04:35:42 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.4.3 GitCommit: 269548fa27e0089a8b8278fc4fc781d7f65a939b runc: Version: 1.0.0-rc92 GitCommit: ff819c7e9184c13b7c2607fe6c30ae19403a7aff docker-init: Version: 0.19.0 GitCommit: de40ad0
二、docker mysql安装
2.1 下载镜像
严格来说,无需在单独的步骤中下载服务器映像。但是,在创建Docker容器之前执行此步骤可确保本地映像是最新的。要下载MySQL Community Edition映像,请运行以下命令:
shell> docker pull mysql/mysql-server:tag 8.0: Pulling from mysql/mysql-server 03e20c09154c: Pull complete be7ba00cd800: Pull complete 218845b603a2: Pull complete 0807146aa37b: Pull complete Digest: sha256:5dfceab2e53e7dac983168c5f5d611d9d8e85c3bee7297c24c931d77fbeeaac3 Status: Downloaded newer image for mysql/mysql-server:8.0 docker.io/mysql/mysql-server:8.0
该tag是你想拉的图像版本的标签,例如5.6, 5.7,8.0或 latest。如果省略,则使用标签,并下载MySQL Community Server的最新GA版本的图像。
参考:https: //hub.docker.com/r/mysql/mysql-server/tags/?page=1&ordering=last_updated
可以使用以下命令列出下载的Docker映像:
shell> docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql/mysql-server 8.0 c8552d79a138 8 weeks ago 405MB
2.2 启动MySQL主库实例
shell> mkdir /docker/master/date -p shell> vi /docker/master/my.cnf [mysqld] user=mysql port=3308 datadir=/var/lib/mysql log_error=myerror.log server_id=1 log-bin=mysql-bin binlog_format=ROW shell> docker run --name master -p 3308:3308 -v /docker/master/date:/var/lib/mysql -v /docker/master/my.cnf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=mysql -d mysql/mysql-server:8.0
--name用于为服务器容器提供自定义名称的选项是可选的。如果没有提供容器名称,则会生成一个随机的容器名称。
-p 3306:3306 将容器的 3306 端口映射到主机的 3306端口
--privileged=true:容器内的root拥有真正root权限,可选
-v /mysql/data:/var/lib/mysql 将主机data目录挂载到容器的/var/lib/mysql
-v /docker/mysql/my.cnf:/etc/my.cnf将主机my.cnf 挂载到容器的my.cnf
-e mysql_root_password=mysql 设置mysql的root用户的初始密码
-d 保持后台运行,image_name:tag可以使用docker images命令获得,如mysql/mysql-server:8.0
2.3 登录MySQL实例
使用docker ps根据STATUS检查MySQL启动情况,服务器准备就绪后,您可以在刚启动的MySQL Server容器中运行 mysql客户端,并将其连接到MySQL Server。
shell> docker ps CONTAINER ID 8e565e79b7e5 IMAGE mysql/mysql-server:8.0 COMMAND "/entrypoint.sh mysq…" CREATED 2 minutes ago STATUS Up 2 minutes (healthy) PORTS 3306/tcp, 33060-33061/tcp, 0.0.0.0:3308->3308/tcp NAMES master
使用docker exec -it命令在已启动的Docker容器内启动 mysql客户端:
shell> docker exec -it master mysql -uroot -pmysql
(或者)要对您的MySQL Server容器具有shell访问权限,请使用 docker exec -it命令在容器内部启动bash shell:
使用bash shell登录到容器内,可查看目录信息。
shell> docker exec -it master bash bash-4.2# mysql -uroot -pmysql
2.5 启动MySQL从库
shell> mkdir /docker/slave/date -p shell> vi /docker/slave/my.cnf [mysqld] user=mysql port=33081 datadir=/var/lib/mysql log_error=myerror.log server_id=2 log-bin=mysql-bin binlog_format=ROW shell> docker run --name slave -p 33081:33081 -v /docker/slave/date:/var/lib/mysql -v /docker/slave/my.cnf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=mysql -d mysql/mysql-server:8.0
使用docker exec -it命令在已启动的Docker容器内启动 mysql客户端:
shell> docker ps shell> docker exec -it slave mysql -uroot -pmysql
2.6 查看主库IP
[root@mysql2 ~]# docker inspect master | grep "IPAddress" "SecondaryIPAddresses": null, "IPAddress": "172.17.0.2", "IPAddress": "172.17.0.2",
三、搭建传统主从
3.1 创建复制用户
创建一个slave用户用于主从间的复制。
shell> docker exec -it master mysql -uroot -pmysql mysql> create user slave@'%' identified by 'slave'; mysql> grant replication slave on *.* to 'slave'@'%';
3.2 搭建主从
主库查看binlog信息
mysql> show master status; mysql-bin.000003 | 691
从库根据主库的信息搭建复制关系
shell> docker exec -it slave mysql -uroot -pmysql mysql> change master to master_host='172.17.0.2',master_port=3308,master_user='slave',master_password='slave',master_log_file='mysql-bin.000003',master_log_pos=691, get_master_public_key=1;
注意:MySQL8.0搭建主从需要get_master_public_key=1,而其他版本不需要。