Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的。在很多版本的CentOS中是不支持更新最新的一些补丁包的。
如果docker安装在centos上面建议用Centos7版本,在CentOS6.x的版本中,安装前需要安装其他很多的环境而且Docker很多补丁不支持更新。
# 更新原有安装包
yum -y update
# 安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 安装docker
sudo yum install docker-ce
# 查看docker版本
docker -v
# 启动
service docker start
# 停止
service dockerstop
# 重启
service docker restart
# 开机启动
systemctl enable docker
# 重启docker
systemctl restart docker
# 搜索java镜像
docker search java
#拉取java镜像
docker pull java
# 修改docker配置文件
vi /etc/docker/daemon.json
#配置加速器命令(复制粘贴执行即可)Ps:此命令仅克用于Linux操作系统
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
# 修改docker配置文件
vi /etc/docker/daemon.json
# 导出镜像
docker save 镜像名>导出路径
docker sava tomcat > /home/tomcat.tar.gz
# 导入镜像
docker load<镜像文件路径
docker load < /home/mysql.tar.gz
#查看docker已有镜像
docker images
# 删除镜像
docker rmi 镜像名
docker rmi reids
#修改镜像名
docker tag 原镜像名 修改后镜像名
docker tag docker.io/percona/percona-xtradb-cluster pxc
# 创建并且启动一个容器
# -it表示启动容器后开启一个交互的界面 --name 给容器起一个名字不取就没有可通过id辨别 bash代表启动程序后运行什么样的成员bash=bash命令行
docker run -it --name myTomcat tomcat bash
# 开启容器并且映射端口 -p 8088:8080代表将容器8080端口映射到宿主机8088上面 可以映射多个端口
docker run -it --name myTomcat -p 8088:8080 -p 8089:3306 tomcat bash
# 开启容器并且映射目录或者文件
# -v宿主机目录映射到容器中/home/data:/mysqlData冒号之前是宿主机的目录集将目录/home/data映射到/mysqlData
# --privileged这个是代表容器操作映射目录使用的是最高权限,即可读可写可执行
docker run -it --name myTomcat -v /home/data:/mysqlData --privileged tomcat bash
# 三条命令合一
docker run -it -p 8088:8080 -p 8089:3306 -v /home/data:/mysqlData --privileged --name myTomcat tomcat bash
# 停止容器 myTomcat是容器名字没有可以通过容器id识别
docker pause myTomcat
# 恢复容器
docker unpauser myTomcat
# 彻底停止容器
docker stop myTomcat
# 重新启动容器
docker start -i myTomcat
# 退出交互页面开启容器-it执行的(同时会彻底关闭容器)
exit
# 删除容器
docker rm myTomcat
# 进入容器
docker exec -it 容器名 bash
# 重命名容器名
docker rename 原容器名称 新容器名称
PS:
以上仅仅是Docker基础命令
Docker后面还有
容器数据卷
DockerFile(制作镜像使用)
Docker Compose (多容器管理)
Docker Swarm (docker集群)
# docker拉去安装PXC
# 这边使用的nysql是5.7.21版本的,我现在部署的项目使用的数据库就是这个版本,用mysql8就需要修改一些配置
# 需要注意的是,如果你使用的是mysql8,pxc是需要设置一个ssl秘钥的,否则启用第二个节点会爆错
docker pull percona/percona-xtradb-cluster:5.7.21
# docker本地安装PXC
doker load < 镜像压缩文件路径
# docker自带网段172.17.0....多个网段一次类推
docker network create network1
docker network create network2
docker network create network3
# 创建自定义ip 网段--subnet=172.19.0.0/24指定网段为172.19.0.0子网掩码24位
docker network create --subnet=172.19.0.0/24 network1
# 查看已经创建网段
docker network inspect 网段名
# 删除已有网段
docker network rm 网段名
# 创建docker卷
docker volume create --name 卷名
# 查看数据卷具体位置
docker inspect 卷名
# 删除数据卷
docker volume rm 卷名
# 创建第1个MySQL节点
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -v v1:/var/lib/mysql --privileged --name=pxcnode1 --net=network1 --ip 172.19.0.2 pxc
# 创建第2个MySQL节点
# 需要注意,只有当第一个节点的mysql完全启动后(在本地连接成功后)才可以创建第二个,第三个
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=pxcnode1 -v v2:/var/lib/mysql --privileged --name=pxcnode2 --net=network1 --ip 172.19.0.3 pxc
# 创建第3个MySQL节点
docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=pxcnode1 -v v3:/var/lib/mysql --privileged --name=pxcnode3 --net=network1 --ip 172.19.0.4 pxc
# 创建第4个MySQL节点
docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=pxcnode1 -v v4:/var/lib/mysql --privileged --name=pxcnode4 --net=network1 --ip 172.19.0.5 pxc
# 创建第5个MySQL节点并映射数据库热备数据卷用于后面热备数据
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=pxcnode1 -v v5:/var/lib/mysql -v backupv:/data --privileged --name=pxcnode5 --net=network1 --ip 172.19.0.6 pxc
PXC容器全部启动成功
容器启动失败
当你在其中一个数据库中添加表或者数据,其他四个数据库也会同步添加
当你把其中一个节点关闭后,数据库将无法插入数据,(强一致性)
复制均衡的中间件,常用的有4个
Haproxy,Nginx,Apache,LVS对比
Nginx最近几年才支持tcp协议
Apache不支持tcp无法使用
LVS其实性能最好的,但是无法在虚拟机使用
Haproxy不支持插件,但是对比其他几个,个人感觉这个比价合适
不使用负载均衡的弊端
使用负载均衡的优点
#拉去Haproxy镜像
docker pull docker.io/haproxy:2.0
mkdir /home/soft/haproxy
vi /home/soft/haproxy/haproxy.cfg
haproxy.cfg
global
#工作目录
chroot /usr/local/etc/haproxy
#日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级info
log 127.0.0.1 local5 info
#守护进程运行
daemon
defaults
log global
mode http
#日志格式
option httplog
#日志中不记录负载均衡的心跳检测记录
option dontlognull
#连接超时(毫秒)
timeout connect 5000
#客户端超时(毫秒)
timeout client 50000
#服务器超时(毫秒)
timeout server 50000
#监控界面
listen admin_stats
#监控界面的访问的IP和端口
bind 0.0.0.0:18081
#访问协议
mode http
#URI相对地址
stats uri /dbs
#统计报告格式
stats realm Global\ statistics
#登陆帐户信息
stats auth admin:123456
#数据库负载均衡
listen proxy-mysql
#访问的IP和端口
bind 0.0.0.0:3306
#网络协议
mode tcp
#负载均衡算法(轮询算法)
#轮询算法:roundrobin
#权重算法:static-rr
#最少连接算法:leastconn
#请求源IP算法:source
balance roundrobin
#日志格式
option tcplog
#在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测
#server LmhcBlogDB1 172.19.0.2:3306 check weight 1 maxconn 2000
#LmhcBlogDB1名字随意 172.19.0.2:3306容器ip端口 check发送心跳监测 weight 1权重采用权重算法才会生效 maxconn 2000最大连接数
option mysql-check user haproxy
server LmhcBlogDB1 172.19.0.2:3306 check weight 1 maxconn 2000
server LmhcBlogDB2 172.19.0.3:3306 check weight 1 maxconn 2000
server LmhcBlogDB3 172.19.0.4:3306 check weight 1 maxconn 2000
server LmhcBlogDB4 172.19.0.5:3306 check weight 1 maxconn 2000
server LmhcBlogDB5 172.19.0.6:3306 check weight 1 maxconn 2000
#使用keepalive检测死链
option tcpka
# 创建Haproxy容器
# 注意:不同版本的haproxy映射的目录是不一样的,如果容器创建成功后没有启动或者处于创建状态先去看他的log,haproxy的log会给你一个可以执行的目录
docker run -it -d -p 5000:18081 -p 5001:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name lmhcblogh1 --privileged --net=network1 --ip 172.19.0.7 124f5f3f731b
# 进入容器 指明配置文件位置
docker exec -it lmhcblogh1 bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg
/usr/local/etc/haproxy
# Haproxy 后台登录
宿主机ip:5000/dbs
-- 创建haproxy账号创建这个账号是无法连接,haproxy要用这个账号去向pxc发送心跳监测
create user 'haproxy'@'%' IDENTIFIED BY '';
单节点Haproxy是不具备高可用的 当Haproxy出现故障宕机,应用将无法在于数据库做交互,
利用Keepalived实现双击热备
安装Keepalived
# 进入Haproxy容器
docker exec -it lmhcblogh1 bash
# Keepalived只能安装在Haproxy容器中
# Haproxy 以Ubuntu创建出来的 Ubuntu命令以apt-get
# 更新apt-get
apt-get update
# 安装Keepalived
apt-get install keepalived
# 安装vim编辑器用来编写keepalived配置文件
apt-get install vim
# 进入Keepalived配置文件
vim /etc/keepalived/keepalived.conf
Keepalived配置文件
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
172.19.0.200
}
}
启动Keepalived
service keepalived start
查看Keepalived IP172.19.0…200与宿主机的之间通信是否有问题
常见的数据库备份方案
安装 XtraBackup
# 在前面创建pxcnode5容器是已经映射了用于备份的数据库backupv
# pxc容器安装XtraBackup
# 更新atp-get
apt-get update
# 安装XtraBackup
apt-get install percona-xtrabackup-24
# 备份数据user=数据库用户吗 password=数据库密码 备份路径/date/backup/full
innobackupex --user=root --password=lmhcblog2020 /date/backup/full
删除原有pxc容器删除数据卷并重新创建pxc容器清除数据然后还原数据
#删除数据
rm -rf /var/lib/mysql/*
#清空事务
innobackupex --user=root --password=abc123456 --apply-back /data/backup/full/2021-03-20-11_08-05-06/
#还原数据
innobackupex --user=root --password=abc123456 --copy-back /data/backup/full/2021-03-20-11_08-05-06/
# 解决命令
echo "net.ipv4.ip_forward=1" >>/usr/lib/sysctl.d/00-system.conf
# 重启network 和docker
systemctl restart network && systemctl restart docker
作者:泪梦红尘
文章出处:泪梦红尘BLOG