欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

docker、k8s基础:mysql容器化部署,挂载data到宿主机

程序员文章站 2022-07-13 21:10:59
...

前言

最近开发项目过程中,遇到一个问题。自己用docker起了一个mysql的容器,然后由于只是用来测试一下,就不会再用这个数据库了,所以就没有把mysql的数据目录挂载出来。其实也是因为我得mysql记录的数据对我没什么用,所以菜没有挂载数据。

但是,意想不到的是,我用docker启的mysql所在的磁盘空间竟然被用满了。这是由于服务器是大家共享使用的,很多项目都在这台机器上布,还有一些同学没有删除无用镜像的习惯,所以很快1T的空间就用满了。要想扩容还要去找运维。

然后我就看了看其他的磁盘,发现有块磁盘的剩余空间还很大,所以果断把mysql的data数据挂载到那块磁盘上去。

趁着热乎,今天就把如何启动mysql的容器和如何挂载一起说了。

参考了网上的文章

一、下载mysql镜像

对于连着互联网的机器,直接查找docker hub,下载你想要的mysql版本的镜像,如下

[[email protected] ~]# docker search mysql
NAME                                DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                               MySQL is a widely used, open-source relation…   8178                [OK]                
mariadb                             MariaDB is a community-developed fork of MyS…   2785                [OK]                
mysql/mysql-server                  Optimized MySQL Server Docker images. Create…   610                  

2、执行命令下载镜像

docker pull mysql:8.0

 但是这个步骤如果在公司开发环境是不可能的,因为公司的开发环境一般都是不联网的,但是他们给会你个仓库,可以直接下载。这里跳过

3、查看一下,下载成功没

[[email protected] ~]# docker images | grep mysql
mysql           8.0                 990386cbd5c0        7 days ago          443MB

4、创建你想挂载mysql-data的宿主机目录

[[email protected] ~]# mkdir -p /home/data/mysql/data /home/data/mysql/conf /home/data/mysql/logs

五. 启动容器

options说明:
–restart=always: 重启策略
-d: 后台运行容器,并返回容器ID
-p: 端口映射,格式为:主机(宿主)端口:容器端口
–name: 为容器指定一个名称
-v: 给容器挂载存储卷,挂载到容器的某个目录
–mount: 绑定数据目录和服务器配置文件
-e MYSQL_ROOT_PASSWORD: 设置数据库密码
–character-set-server: 设置编码
–collation-server: 设置编码

[[email protected] ~]# docker run --restart=always --name=mysql8.0 -p 3306:3306 \
--mount type=bind,src=/home/data/mysql/conf/my.cnf,dst=/etc/my.cnf \
--mount type=bind,src=/home/data/mysql/data,dst=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
# 检查配置信息
[[email protected] ~]# docker inspect mysql8.0
...
"Mounts": [
	{
		"Type": "bind",
		"Source": "/home/data/mysql/conf/my.cnf",
		"Target": "/etc/my.cnf"
	},
	{
		"Type": "bind",
		"Source": "/home/data/mysql/data",
		"Target": "/var/lib/mysql"
	}
],
...
# 查看镜像服务是否启动成功
[[email protected] ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
0bab4245d067        mysql:8.0           "docker-entrypoint.s…"   41 minutes ago      Up 41 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql8.0

六、创建用户和密码

下面命令表示你把root 用户的密码设置未123456

以root用户身份进入mysql
命令: docker exec -it mysql8.0 mysql –user=root –password=123456

进入后创建一个用户

grant all privileres on *.* to 'test_user'@'%' identified by '11111' 

上面语句代表创建一个可以用于远程登录的用户。name: test_user   password:11111

相关标签: k8s/docker部署