安装docker(目标机为centos7)
卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装Docker Engine-Community
在新主机上首次安装Docker Engine-Community之前需要设置Docker 仓库,之后可以从仓库安装和更新Docker
安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
使用以下命令来设置稳定的仓库
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安装Docker Engine-Community 最新版本 或者 按照下一步安装特定版本
sudo yum install docker-ce docker-ce-cli containerd.io
列出存储库中可用版本。按照版本号从高到底排列
yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
指定软件包名称 安装docker-ce 和docker-ce-cli
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
启动docker
sudo systemctl start docker
docker 基本命令
# 查看下载的镜像
docker images
# 查看运行中的容器
docker ps
# 查看所有容器包含没有运行
docker ps -a
# 移除镜像
docker rm <容器id/容器名称>
# 启动停止容器
docker start/stop <容器id/容器名称>
利用docker搭建mysql主从服务器(例子中采用一主一从)
首先拉取MySQL镜像
docker pull mysql:5.7
利用此镜像启动主从容器
# master 主库
docker run -p 3339:3306 --name master -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
# slave 从库
docker run -p 3340:3306 --name slave -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
说明:-p port1:port2
其中port1 为容器对外映射的端口号(宿主机端口),因为docker容器是相互独立的,每个容器有自己的独立ip,所以不同容器使用相同的端口不会冲突,这里的port2 我们尽量使用MySQL默认的3306,否则可能会出现无法通过IP连接docker容器的mysql。
使用 docker -ps 查看容器运行情况
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce752c99a010 mysql:5.7 "docker-entrypoint.s…" 6 hours ago Up 5 hours 33060/tcp, 0.0.0.0:3341->3306/tcp slave2
701ccedc1e95 mysql:5.7 "docker-entrypoint.s…" 6 hours ago Up 5 hours 33060/tcp, 0.0.0.0:3340->3306/tcp slave1
此时还不能用客户端连接,需要MySQL进行远程连接授权
进入容器
docker exec -it <容器id/名称> bash
登录mysql
mysql -uroot -p
进入MySQL后执行授权操作
-- 对远程连接进行授权
GRANT ALL ON *.* TO 'root'@'%';
-- 更改密码的加密规则
ALTER USER 'root'@'%' IDENTIFIED BY 'root' PASSWORD EXPIRE NEVER;
-- 更改root的密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
-- 刷新权限
flush privileges;
配置master
通过 docker exec -it <容器id/名称> bash进入容器内部。使用vim /etc/mysql/my.cnf 修改MySQL配置
会出现如下问题。
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package vim
需要首先执行 apt-get update 然后执行 apt-get install vim 即可
在my.cnf 中添加如下配置
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
配置完成后重启即可生效 ,在容器内部 使用命令 service mysql restart,此时容器会停止,我们还需要 docker start <容器id/容器名称>
启动容器。
配置slave
my.cnf中添加配置
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
连接master 和 slave
首先进入master mysql 执行 show master status
;
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.25 sec)
记录File 和 position 值。
然后,从slave进入MySQL执行
change master to master_host='172.17.0.2', master_user='root', master_password='root', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 154, master_connect_retry=30;
master_host 说明 :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' <容器名称|容器id查询容器的ip>
[root@localhost ~]# docker inspect --format='{{.NetworkSettings.IPAddress}}' mymysql
172.17.0.2
执行命令 start slave
启动slave。
查看slave状态 show slave status \G
;