Docker基础22--基于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端口(3306mysql的默认服务端口)

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数据库,还是存在的。

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Docker是一种开源的容器化平台,它可以帮助开发者将应用程序和服务以容器的形式进行打包、分发和部署。而Gluster是一个分布式存储系统,它可以将多个服务器的存储空间整合在一起,形成一个统一的、可扩展的存储池。 CentOS是一种基于Red Hat Enterprise Linux(RHEL)的开源操作系统,它提供了稳定性和安全性,并且具备广泛的应用支持。 Dockerfile是用于构建Docker镜像的脚本文件,它可以定义容器的运行环境、设置启动命令等。 那么,docker-gluster-centos Dockerfile是指在CentOS系统上构建一个包含Gluster分布式存储系统的Docker镜像的脚本文件。 在docker-gluster-centos Dockerfile中,我们可以使用CentOS的官方镜像作为基础镜像,并在此基础上安装和配置Gluster分布式存储系统。可以通过使用适当的软件包管理工具(如yum)来安装Gluster软件包和依赖项。然后,可以使用Dockerfile中的指令来启动和配置Gluster节点、创建Gluster卷以及设置其他必要的参数和选项。 通过构建docker-gluster-centos Docker镜像,我们可以在任何支持Docker的环境中快速部署和运行Gluster分布式存储系统,而无需手动安装和配置。这样可以大大简化Gluster的部署过程,提高运维效率,并且能够实现更加轻量级、可移植和可扩展的存储解决方案。 总而言之,docker-gluster-centos Dockerfile是用于在CentOS系统上构建包含Gluster分布式存储系统的Docker镜像的脚本文件,使得Gluster的部署和运行变得更加简单、可靠和可扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暮毅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值