Docker部署MySQL
(一)安装Docker
首先需要准备一个Linux虚拟机系统,我这里选择CentOS7发行版的作为演示,并使用MobaXterm连接虚拟机。
①卸载旧版本的Docker
需要先进入root权限,再执行以下执行
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
②配置Docker的yum库
首先安装一个yum工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
安装成功后执行命令,配置Docker的yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
③安装Docker引擎
sudo yum install -y docker-ce docker-ce-cli containerd.io
④验证Docker版本
docker -v
⑤启动与设置Docker服务
//启动Docker进程
sudo systemctl start docker
//停止Docker进程
sudo systemctl stop docker
//设置开机自启
sudo systemctl enable docker
⑥校验Docker服务
//查看是否开启Docker进程
docker images
如下图所示则是成功开启
⑥配置阿里云/腾讯云镜像加速器
进入阿里云官网并找到 容器镜像服务ACR
获取到个人的镜像加速器
- 创建配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
// 替换为你的阿里云控制台获取的专属加速地址
"registry-mirrors": ["https://(your-aliyun-mirror.mirror).aliyuncs.com"]
}
EOF
- 重启Docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
安装成功!!
- 常用指令
//查看Docker版本
docker --version
//查看运行中的容器
docker ps
//停止所有容器
docker stop $(docker ps -aq)
- 镜像库推荐
官方镜像库:Docker Hub (https://hub.docker.com)
国内加速源:{
中科大镜像:https://docker.mirrors.ustc.edu.cn
网易镜像:https://hub-mirror.c.163.com
腾讯云镜像:https://mirror.ccs.tencentyun.com
阿里云镜像(需登录控制台获取专属地址)
}
(二)部署MySQL
一、安装Mysql
①创建并运行容器
docker run -d \
--name mysql \
//部署在端口3307上(防止与以前Linux虚拟机上非使用Docker安装的Mysql所占端口冲突)
-p 3307:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \ //设置密码
mysql
②验证容器状态
//查看容器是否运行
docker ps -a | grep mysql
若显示Up则是成功运行
③检查启动日志
//查看容器启动日志
docker logs mysql
④连接MySQL验证服务
- 在虚拟机上进行连接Mysql
//从宿主机连接(使用映射的端口)
mysql -h 192.168.xxx.xxx -P 3307 -u root -p123456
- 使用DataGrip或其他客户端在Windows系统上进行远程连接
⑤设置开机自启
//设置容器随Docker服务自动启动
docker update --restart=always mysql
二、安装解析
隔离环境指的是运行该程序时它与其他进程之间是互相隔离的、互相不干扰的,也就可以在一台服务器上部署多个应用,甚至去部署一个Mysql集群都没有问题。
我们也就可以在该公共仓库中找到各种各样常用软件的镜像,也可以把自己构建好的镜像上传上去。
(三)命令解读
一、创建并运行容器的命令解析
①端口为什么需要"映射":
假如现在有一台服务器(类似我们的虚拟机),我们可以随意地使用主机对它进行访问。现在它在内部的一个容器中部署了MySQL数据库,且它的端口号为3306。但是因为容器的隔离环境让它获得了自己独立的内存空间、文件系统以及网络空间,所以该MySQL容器里的进程启动后甚至还能获得自己的IP地址,而该网络空间对外是不可访问的。
根据一个指令来获取该MySQL服务器的IP地址
当我们直接去访问该地址会发现访问不通,因为它是对外隔离的
因此如果我们的客户端想要去直连该容器的端口是会被拒绝的。
那么我们就需要去连接外边的这台服务器(或虚拟机),也就是容器所在的该及机器(称之为宿主机)。再去做端口映射,把宿主机的3306端口与容器的3306端口做映射,因为Docker内部可以帮助我们做好该映射。当我们去访问外部机器的3306端口时,Docker就会把该请求转到容器内的3306端口,也就相当于间接地访问到了该容器。
而-p 3306:3306指令前面的端口指的是宿主机端口,后面的端口指的是容器内端口(它取决于进程,是不需要进行改动的,安装的是MySQL,它的容器内端口就永远都是3306)。假设在该虚拟机上有两台MySQL数据库,那么它们的容器内端口都是3306,因为它们互相不冲突,可以共享该端口;而宿主机端口需要进行变化,两台数据库映射的宿主机端口不同。
②-e 参数的环境变量是由该镜像制作者来决定的
我们要通过查看镜像文档来获取该参数
可以直接在官网上进行查询