媚丶 發表於 2026-1-10 14:39:40

docker部署mysql及制作镜像压缩包实践

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">拉取mysql镜像</a></li><ul class="second_class_ul"><li><a href="#_lab2_0_0">1、需要先配置docker加速镜像</a></li><li><a href="#_lab2_0_1">2、制作压缩包</a></li><li><a href="#_lab2_0_2">3、用镜像部署mysql容器</a></li></ul><li><a href="#_label1">总结</a></li><ul class="second_class_ul"></ul></ul></div><p>前言:本次教程系统是基于centos7。</p>
<p class="maodian"><a name="_label0"></a></p><h2>拉取mysql镜像</h2>
<p class="maodian"><a name="_lab2_0_0"></a></p><h3>1、需要先配置docker加速镜像</h3>
<div class="jb51code"><pre class="brush:bash;">sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json &lt;&lt;EOF
{
    "registry-mirrors": ["https://docker.wctmd.us.kg"]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker</pre></div>
<p>如果不配置是无法拉取mysql镜像的,如下</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026011014394542.png" /></p>
<p>配置后执行拉取命令:</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026011014394538.png" /></p>
<p>执行如下命令可查看已拉取的镜像及版本</p>
<div class="jb51code"><pre class="brush:bash;">docker images</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026011014394595.png" /></p>
<p>也可设置特点版本下载所需要的mysql镜像,如:</p>
<div class="jb51code"><pre class="brush:bash;">docker pull mysql:5.7
</pre></div>
<p>我下载了mysql5.7版本的镜像</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026011014394524.png" /></p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026011014394527.png" /></p>
<p class="maodian"><a name="_lab2_0_1"></a></p><h3>2、制作压缩包</h3>
<div class="jb51code"><pre class="brush:bash;">docker save -o mysql.tar mysql</pre></div>
<p>mysql.tar&nbsp; 压缩包名称</p>
<p>mysql 本地mysql镜像名称</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026011014394561.png" /></p>
<p>删除mysql镜像</p>
<div class="jb51code"><pre class="brush:bash;">docker rmi mysql</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026011014394574.png" /></p>
<p>现在我本地只剩mysql5.7的镜像</p>
<p>切换到压缩包的目录,用本地压缩包加载镜像,这样就不用每次都远程去拉取镜像</p>
<div class="jb51code"><pre class="brush:bash;">docker load -i mysql.tar</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026011014394525.png" /></p>
<p class="maodian"><a name="_lab2_0_2"></a></p><h3>3、用镜像部署mysql容器</h3>
<p>需要把mysql配置文件my.cnf上传,my.cnf内容如下:</p>
<div class="jb51code"><pre class="brush:bash;"># For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.3/en/server-configuration-defaults.html


#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M

# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.3/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password
host-cache-size=0
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
default-time-zone='Asia/Shanghai'
pid-file=/var/run/mysqld/mysqld.pid

socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/
</pre></div>
<p>其中要注意设置mysql时区,上面的配置我加了时区,不然数据库默认是UTC时区</p>
<div class="jb51code"><pre class="brush:bash;">default-time-zone='Asia/Shanghai'</pre></div>
<p>把my.cnf上传到/usr/local/mysql目录下</p>
<p>执行下面命令即可部署mysql容器</p>
<div class="jb51code"><pre class="brush:bash;">docker run -d --restart=always --name mysql -p 3307:3306 -v /usr/local/mysql/data:/var/lib/mysql -v /usr/local/mysql/my.cnf:/etc/mysql/conf.d/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql</pre></div>
<p>注意3307是宿主机端口,3306是容器内部mysql端口,</p>
<p>--restart=always 表示把mysql容器设置到开机启动服务中,系统重启后,mysql容器随机启动</p>
<p>-v /usr/local/mysql/data:/var/lib/mysql -v /usr/local/mysql/my.cnf:/etc/mysql/conf.d/my.cnf 是把mysql数据库数据、配置文件挂载到宿主机中,即使删除了容器,mysql数据还存在,不丢失。每次用上面的命令重新部署容器,数据库数据和配置文件都会自动加载到容器中。</p>
<p>查看MySQL容器是否部署成功:</p>
<div class="jb51code"><pre class="brush:bash;">docker ps</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026011014394569.png" /></p>
<p>说明已经部署成功,且状态是正常的.</p>
<p>用命令进入容器,进入mysql,验证mysql是否正常运行</p>
<div class="jb51code"><pre class="brush:bash;">docker exec -it mysql /bin/bash</pre></div>
<div class="jb51code"><pre class="brush:bash;">mysql -uroot -p</pre></div>
<p>然后输入密码即可进入到mysql中:</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026011014394674.png" /></p>
<p>至此,mysql部署完成,远程访问,使用navicat或者phpmyadmin等工具,配置端口(我设置的宿主机端口是3307)。即可访问成功!</p>
<p class="maodian"><a name="_label1"></a></p><h2>总结</h2>
<p>以上为个人经验,希望能给大家一个参考,也希望大家多多支持琼殿技术社区。</p>
頁: [1]
查看完整版本: docker部署mysql及制作镜像压缩包实践