系统环境:Centos8.0
默认运行docker最新版mysql镜像
一、安装docker
1.卸载旧版本及其相关依赖
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
注意:若是曾经安装过docker,之前存储在/var/lib/docker下的images、containers、volumes以及networks等资源并不会被连带删除(其实也没有删除的必要)
2.安装docker
推荐使用设置rpm仓库的方式进行安装,这种方式更为简便。当然也可以使用下载RPM包的形式或者安装脚本的形式进行安装。本文使用的是设置docker的rpm仓库链接,直接进行命令行安装。
2.1设置软件包管理器下载仓库地址
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#设置为阿里云国内镜像源——下载速度更快
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新yum软件包管理器缓存
yum makecache
2.2安装最新版docker
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
当然也可以安装指定版本,参见官方文档(见下方参考链接-1)
2.3启动docker
#设置开机自启动
systemctl enable docker
#启动docker
systemctl start docker
#查看docker服务状态
systemctl status docker
状态如下,说明安装成功
3.配置镜像加速
使用阿里云提供的免费私人镜像加速
开通阿里云账号之后进入ACR服务【可在搜索栏搜索ACR,下方会显示容器景象服务,见下图】
点击进入之后选择镜像工具中的镜像加速器,选择centos操作文档,按照相关步骤进行操作。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["换成你自己的加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
注意:根据Docker公司政策,2020年11月01日起将逐步向Docker Hub匿名和免费用户实施速率和拉取请求次数限制。但是一般我们个人使用没有什么影响。
至此,docker的安装与基本配置就完成了
4.docker的卸载
systemctl stop docker
sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
二、Docker安装MYSQL
1.拉取mysql镜像
docker pull mysql
因为我本地已经拉取过mysql镜像,所以其显示更新到最新版
2.docker 运行mysql镜像
运行容器的命令如下:
# -p表示端口映射 -e做一些环境变量的设置
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql
这样便成功跑起来mysql数据库容器。
但是这有一个很大的弊端,就是我们无法轻易修改容器内部的mysql配置文件,若是后期想要配置其中的配置信息,进入容器内部修改是极为麻烦的。因为docker容器中只包含其运行所必需的系统命令,是一个最小化的模拟系统 。很多缺失的命令我们无法使用(比如vim),要用只能在容器中进行安装,很是麻烦。所以我们需要将mysql的配置文件挂载到宿主机上进行操作。
3.挂载必要的文件或者是目录
主要是以下三种目录的挂载
mysql中的目录 | 宿主机的目录 | 作用 |
/etc/mysql/conf.d | /root/mysql/conf | 主要将mysql的配置文件挂载到宿主机,便于操作自定义配置文件 |
/var/lib/mysql | /root/mysql/data | 将mysql的数据文件挂载到宿主机指定位置。不挂载docker也会通过数据卷挂载至宿主机,但是其挂载的目录便不方便查找查看 |
/docker-entrypoint-initdb.d | /root/mysql/init | 将mysql初始化目录挂载至宿主机。当容器第一次启动的时候,将运行其下的.sh , .sql , .sql.gz等文件,这可用于进行大量数据库迁移时使用,能将所有数据库sql脚本一并运行,无需一个个导入。当然,这个方法一定要确保sql文件没有错误,不然mysql容器将无法初始化成功。同时,这个只能是run命令第一次启动有效。stop容器再start,新添入的sql是不会被执行的。 |
3.1在宿主机创建相应目录
mkdir -p /root/mysql/data /root/mysql/init /root/mysql/conf
3.2可做一些提前设置
- 将自定义的配置文件my.cnf放置/root/mysql/conf目录下
- 将待迁移的数据库脚本放置在/root/mysql/init目录下
本文自定义my.cnf进行字符集的基础配置,作为演示,内容如下
[client]
default_character_set=utf8mb4
[mysql]
default_character_set=utf8mb4
[mysqld]
init_connect='SET NAMES utf8mb4'
character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci
将my.cnf放置在/root/mysql/conf目录下
本文无需迁移其他数据库,仍以一个hello.sql作为演示,将其放置/root/mysql/init目录下
3.3删除之前的mysql容器
docker rm -f mysql
3.4 运行docker命令,重新启动一个容器
# -p表示端口映射 -v表示数据卷的挂载 -e做一些环境变量的设置
docker run -d \
--name mysql \
-p 3306:3306 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
-v /root/mysql/conf:/etc/mysql/conf.d \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql
运行
docker ps -a #查看所有docker容器
说明mysql容器正常运行了。
我们可以查看当前/root/mysql/data挂载目录下的内容,可以发现大量文件,同时包含hello文件夹,说明文件挂载成功,并且hello.sql已经成功导入数据库。
我们也可以使用navicat可视化连接查看,结果如下:
至此整个docker运行mysql就大功告成了。
我们可以通过以下命令查看mysql的运行日志
#logs后跟容器名称
docker logs mysql
参考文档: