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