Docker基础22--基于dockerfile文件添加MySQL服务
基于dockerfile文件添加MySQL服务
4.3基于dockerfile文件添加MySQL服务
step 1 配置centos8 yum源
wgethttps://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
step 2 创建容器自启动脚本
vim mysql_entrypoint.sh #容器启动的时候自动运行些脚本,对mysql做一些必要的配置
#!/bin/bash
chown -R mysql:mysql /var/lib/mysql/ #将mysql数据目录的所有权属性配置为mysql用户
mysql用户是在安装mysql的时候自动创建的。
chown mysql:mysql /usr/sbin/mysqld #将mysql的启动文件的所有权属性配置为mysql用户
echo user=mysql>> /etc/my.cnf.d/mysql-server.cnf #在 mysql的配置文件中加入一行“user=mysql”,表示使用mysql这个用户,来启动mysql服务
mysqld –initialize #初始化mysql系统
mysqld –D #在后台启动mysqld服务
MYPASSWORDTEMP=`tail /var/log/mysql/mysqld.log | grep password |awk '{print $NF}'`
#mysqld 8在初始化的时候,会在/var/log/mysql/mysqld.log这个文件中生成一个临时密码,这条命令的作用是将这个临时密码取出来,并将其赋予MYPASSWODTEMP这个变量
mysql -u root -p$MYPASSWORDTEMP -e "alter user user( ) identified by '$MYPASSWORDNEW';" --connect-expired-password
#使用临时密码来更改mysql的root用户密码,新密码使用MYPASSWORDNEW这个变量,这个变量的值,在启动容器的时候通过docker run –e 这个命令带进来
mysql -u root -p$MYPASSWORDNEW -e "update mysql.user set host='%' where user='root'"
#将mysql的root用户的host值改为‘%’,代表可以从何意主机连进来。
mysql -u root -p$MYPASSWORDNEW -e "flush privileges;"
#刷新数据库,让配置的内容立即生效。
step3 创建dockfile文件
vim dockerfile_mysql
FROM centos:latest #指定基础镜像文件
LABEL auto build mysql #自定义标签信息
EXPOSE 3306 #描述端口信息
COPY ./Centos-vault-8.5.2111.repo /root/Centos-vault-8.5.2111.repo #将yum源文件拷贝到容器
COPY ./mysql_entrypoint.sh /mysql_entrypoint.sh #将启动脚本拷贝到容器
RUN chmod 755 /mysql_entrypoint.sh \ #将启动脚本配置为可执行
&& ln -s /mysql_entrypoint.sh /usr/bin/mysql_entrypoint.sh \ #创建启动脚本软件软链接
&& rm -rf /etc/yum.repos.d/* \ #清除容器内原有的yum源文件
&& mv /root/Centos-vault-8.5.2111.repo /etc/yum.repos.d/ \ #将yum源文件拷贝到yum目录
&& yum makecache #创建yum缓存
RUN yum install mysql mysql-server -y \ #安装mysql
&& rm -rf /var/cache/yum/* #清除yum缓存文件
CMD mysql_entrypoint.sh;sleep infinity #配置容器自启动脚本为mysql_entrypoint.sh(就是上一步我们创建的那个脚本文件;sleep infinity这个命令的作用是让启动脚本执行完以后,不要中止,常驻内存。
step 4创建镜像
通过dockerfile-mysql这个dockerfile,创建一个名为mysql:1.0的镜像。
docker build -t mysql:1.0 -f ./dockerfile-mysql . #注意最后面那个“.”,代表当前目录
step 5 启动容器
先在宿主机上创建一个mysql的数据目录。(容器中只跑应用,数据目录直接挂载宿主机中的目录)
mkdir mysqldata
启动容器
docker run -d --name=mysql --hostname=mysql -v /root/dockerlab/mysqldata:/var/lib/mysql -e MYPASSWORDNEW='xxxxxxxx' –p 3306:3306 mysql:1.0
命令注解:
-d :让容器在后台运行
--name=mysql 容器命名为mysql
--hostname=容器的主机名为mysql
-v /root/dockerlab/mysqldata:/var/lib/mysql将宿主机的/root/dockerlab/mysqldata这个目录挂载到容器的/var/lib/mysql目录(此目录为mysql 默认的数据目录)
-e MYPASSWORDNEW='xxxxxxxxx'将MYPASSWORDNEW带入到容器中,它的值就是设置容器中mysql系统的root密码)
-p 3306:3306 将宿主机的3306端口映射到容器的3306端口(3306为mysql的默认服务端口)
step6 测试容器中mysql是否启动成功
使用mysql连接工具去连接宿主机的3306端口
发现是可以连接的。
这样就说明我们的mysql已经成功在容器中运行起来了。
查看一下宿主机的mysqldata目录:
里面已经有数据了,这些数据就是容器中的mysql产生的数据库文件。
step 7 模拟容器崩溃后的数据恢复
由于容器中只跑了mysql的应用,mysql的数据目录其实是在宿主机的,所以就算容器崩溃了,数据目录其实还是存在的,也很容易恢复。
1)使用mysql工具,在数据库中创建一个新的数据库,命名为test
2)我们先把刚创建的容器删掉;
3)看一下宿主机中的 mysql数据目录
虽然容器已被删除,但其实数据文件都还在,上图红框内的就是我们刚刚新创建的那个数据库test.
4)重新创建并启动容器
docker run -d --name=mysql --hostname=mysql -v /root/dockerlab/mysqldata:/var/lib/mysql -e MYPASSWORDNEW='xxxxxxxx' –p 3306:3306 mysql:1.0
5)再次用mysql连接工具,验证数据
这里我们发现,我们之前新建的那个test数据库,还是存在的。
更多推荐
所有评论(0)