使用docker构建并部署MySQL5.7镜像

这篇具有很好参考价值的文章主要介绍了使用docker构建并部署MySQL5.7镜像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

这几天在研究如何将服务器和数据库迁移至docker容器,中间遇到了许多问题,特此写篇博客记录一下。


提示:本篇文章主要讲解如何在docker容器中构建及部署MySQL

一、docker中部署MySQL主要有哪几种方式?

  1. 从 CentOS 镜像中构建 MySQL 容器
  2. 从 MySQL 官方镜像中构建容器

从 CentOS 镜像中构建 MySQL 容器可以更好地控制操作系统的版本和配置,而从 MySQL 官方镜像中构建容器则可以更方便地获取最新版本的 MySQL。具体选择哪个镜像,可以根据自己的需求和实际情况来决定。

下面我们来尝试上面两种构建MySQL容器的方式

二、CentOS 镜像中构建 MySQL 容器

1.编写Dockerfile

Dockerfile(示例):

# 1. 镜像基于centos7
FROM centos:7

# 2. 更改镜像时区
RUN echo 'Asia/Shanghai' >/etc/timezone
MAINTAINER 作者

# 3. 安装必要的软件包
RUN yum -y install epel-release 
RUN yum install initscripts -y

# 4. 安装jdk
RUN yum install java-1.8.0-openjdk.x86_64 -y

# 5.安装wget
RUN yum -y install wget

# 6. 安装MySQL
## 6.1 wget下载MySQL5.7 
RUN wget http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
注:【MySQL5.6地址】:http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

## 6.2 安装MySQL5.7 
RUN rpm -ivh mysql57-community-release-el7-7.noarch.rpm
注:【MySQL5.6包】:rpm -ivh mysql-community-release-el7-5.noarch.rpm

## 6.3 安装MySQL5.7 所需秘钥【MySQL5.6则无需秘钥】
RUN rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

## 6.4 执行安装 && 赋予mysql安装目录访问权限
RUN yum -y install mysql-community-server
RUN chown -R root:root /var/lib/mysql

# 7. 将数据库初始化脚本放入镜像
COPY ./mysqlinit/init.sql /usr/local/mysql/init.sql

# 8. 暴露端口
EXPOSE 80 3306 443 6379

# 9. 启动服务
CMD ["/usr/sbin/init"]

2.初始化MySQL

1. docker build 生成MySQL镜像

docker build -t 镜像名称 -f Dockerfile .

2. docker volume 创建数据卷

docker volume create mysql_data

3. docker run 运行容器

docker run --privileged=true -d --name 容器别名 -p 3306:3306 -v mysql_data:/var/lib/mysql 运行的容器ID

注: --privileged=true 参数的意思是以特权的身份去运行容器,否则在容器中运行MySQL【systemctl restart mysqld.service】时会提示无权限
-v 参数的意思是将宿主机的目录/数据卷和容器目录进行挂载

4. 进入docker容器

docker exec -it 容器名/容器id bash

5. 启动mysql

先使用命令查询mysql是否运行
ps -ef|grep mysql
如果未启动则执行
systemctl restart mysqld.service

6. 查看mysql初始密码

grep ‘temporary password’ /var/log/mysqld.log

7. 登录mysql并修改密码

1. 修改密码
ALTER USER 'root'@'%' IDENTIFIED BY '你的密码';
配置新账号参考:
grant all privileges on *.* to 你的账号@'%' identified by '你的密码' with grant option;
2. 刷新密码改动
flush privileges;

8. mysql一些常见指令

1. 创建数据库
CREATE DATABASE IF NOT EXISTS 数据库名称 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
2. 开启mysql语句执行记录【但是并不建议用户开启 需定期清理 否则会造成日志堆积】
set global general_log=1;
3. 找到日志存放目录
show variables like 'general%';

三、MySQL 官方镜像中构建容器

1. 拉取官方镜像

docker pull mysql:5.7

2. 运行镜像

创建数据卷

docker volume create mysql_data7

运行镜像并挂载数据卷

docker run -d -e MYSQL_ROOT_PASSWORD=root --name mysql57 -d -p 13307:3306 -v mysql_data7:/var/lib/mysql -v /usr/local/docker/mysql5.7/log:/var/log/ mysql:5.7

3. 配置镜像外网访问

进入镜像

docker exec -it mysql57 bash

登录mysql设置允许外网访问

use mysql;
update user set host = ‘%’ where user = ‘root’;
FLUSH PRIVILEGES;

注意:update user set host = ‘%’ where user = ‘root’; 这一行可能会报错 但是不用管 依然会生效的

四、MySQL 容器初始化脚本

1. 将sql文件放入docker

docker build 构建容器时放入sql文件

COPY ./mysqlinit/init.sql /usr/local/mysql/init.sql

docker启动后放入sql文件

docker cp init.sql 容器id:/usr/local/mysql/init.sql

2. 执行sql文件

执行文件前可以开启sql执行日志

set global general_log=1;

查询sql执行日志输出目录

show variables like 'general%';

docker mysql 5.7,docker,mysql,容器
执行sql文件

mysql -uroot -p 数据库名 < /usr/local/mysql/init.sql

五、MySQL 容器本地化部署

本地化部署含义:将MySQL镜像(含数据)打成包保存到本地,然后部署到需要这台MySQL的服务器上。
要求MySQL镜像、MySQL镜像中的数据库、mysql配置文件都部署到新服务器上。
我们来看看具体应该如何操作

1. 打包mysql镜像

1. 打包镜像

docker save -o <image_file_name>.tar <image_name>

比如执行:docker save -o mysql7.tar mysql7 就是将mysql7这个镜像打包成名称为mysql7.tar的压缩包下

2. 找到镜像挂载数据卷

docker volume inspect mysql_data7

docker mysql 5.7,docker,mysql,容器

注:什么是挂载数据卷?我们知道 docker镜像每次重启后数据是会重置的。但是MySQL作为数据库,对它的任何改动都应该是要被持久化的,这个时候只需在宿主机创建一个数据卷,然后通过-v指令将容器映射到这个数据卷上,这样容器内MySQL的改动就会保留到宿主机的数据卷上,下次重启容器时,改动就会被保留

3. 进入挂载目录

cd /var/lib/docker/volumes/mysql_data7

4. 压缩镜像目录

tar -czvf mysql7.tar.gz _data/

5. 找到原mysql配置文件 my.cnf

[mysqld]
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
# 表名大小写不敏感,根据项目实际要求来配置即可
lower_case_table_names=1

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

#log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

上述操作处理完生成三个文件 :
docker mysql 5.7,docker,mysql,容器
6. 将这三个文件放入目标服务器

2. 部署MySQL镜像

1. 加载镜像

docker load -i mysql7.tar

加载后即可看到镜像
docker mysql 5.7,docker,mysql,容器

2. 创建数据卷

docker volume create mysql_data7

3. 查询数据卷目录并进入

docker volume inspect mysql_data7

docker mysql 5.7,docker,mysql,容器

3.进入数据卷目录

cd /var/lib/docker/volumes/mysql_data7

4. 复制备份压缩包到目录下 并解压
docker mysql 5.7,docker,mysql,容器

tar -zxvf mysql7-volume.tar.gz

5.启动docker镜像

docker run -d -e MYSQL_ROOT_PASSWORD=root --name mysql7 -d -p 3306:3306 -v mysql_data7:/var/lib/mysql -v /root/my.cnf:/etc/my.cnf mysql7

-e MYSQL_ROOT_PASSWORD代表mysql初始密码
--name 代表容器启动别名 -d代表后台启动 -p 代表端口映射
-v代表文件/数据卷映射 比如 -v mysql_data7:/var/lib/mysql 代表将宿主机的mysql_data7数据卷映射到容器的/var/lib/mysql目录下

总结

以上就是今天要讲的内容,本文主要介绍了如何使用docker构建及部署mysql5.7镜像,后续会介绍更多的docker内容,如有疑问可以在评论区留言。文章来源地址https://www.toymoban.com/news/detail-768230.html

到了这里,关于使用docker构建并部署MySQL5.7镜像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker使用mysql:5.6和 owncloud 镜像,构建一个个人网盘,安装搭建私有仓库 Harbor

    在网页中输入本机的IP地址 在网页中输入本机的IP地址加上:8080,用户名admin密码Harbor12345。登录成功页面如下:

    2024年02月11日
    浏览(34)
  • docker-compose部署nacos2.3.0+mysql5.7

    docker-compose-nacos.yml my.cnf 启动docker 数据库启动成功之后执行nacos脚本创建表 如果需要迁移老版本数据 导入csv格式好使

    2024年02月19日
    浏览(29)
  • 【Docker构建MySQL8.0镜像】

    拉取成功后就可以看到镜像了: 这里我们选择 MySQL 8.0.35 版本,因为在 8.0.33 及其之前的版本被扫出 多个漏洞 ,所以决定使用比较新版本的 8.0.35 。 最好在启动时自己准备好配置文件 3.1 启动脚本 注意:上述启动命令需要修改 密码 、 日志目录 、 配置文件目录 等内容后才能

    2024年01月18日
    浏览(46)
  • Docker实践笔记7:构建MySQL 8镜像

    本教程将指导您使用Dockerfile构建和运行一个MySQL 8容器。让我们开始吧! 在您的项目根目录下创建一个名为Dockerfile的文件。以下是Dockerfile的示例内容: 在src文件夹下创建一个名为my.cnf的文件,该文件包含MySQL的配置信息。您可以根据自己的需求进行配置。以下是一个示例配

    2024年02月03日
    浏览(40)
  • 【Docker】MySQL 源码构建 Docker 镜像(基于 ARM 64 架构)

    以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号!  公众号原文链接:MySQL 源码构建 Docker 镜像(基于 ARM 64 架构) 背景介绍 近期,笔者正推进公司 MySQL 适配 ARM 64 架构工作,由于一直使用 Docke

    2024年04月15日
    浏览(40)
  • 基于mysql5.7制作自定义的docker镜像,适用于xxl-job依赖的数据库,自动执行初始化脚本(ddl语句和dml语句)

    xxl-job-admin依赖mysql数据库,且需执行初始化脚本,包括ddl和dml语句。 具体的步骤总结如下: 1、新建数据库xxl_job 2、创建mysql表table 3、执行dml语句,包括新建admin用户及密码,创建执行器和任务。 毫无疑问,人工每次去操作这些,不仅耗费人力和时间,还容易出错。 所以,本

    2024年02月11日
    浏览(42)
  • Docker安装Nginx并部署&MySQL容器构建

    将配置文件上传到conf文件夹(数据库配置文件已放到置顶资源中) /soft/mysql/conf/my.cnf:/etc/my.cnf目录为我们配置绑定的目录 /soft/mysql/data:/var/lib/mysql 是将data目录与MySQL目录进行绑定 进入到我们的MySQL容器中(m1为容器名)  进入容器后登录到MySQL 输入密码后进入到MySQL赋予权限 

    2024年01月19日
    浏览(38)
  • 《Docker系列》Docker安装MySQL 5.7

    docker pull mysql 拉取最新MySQL docker pull mysql:5.7 拉取指定版本MySQL 1 拉取mysql 5.7镜像 2 检查镜像 -p 33061:3306 左边是服务器端口,右边是容器内端口 --name mysql01 容器名称 -v /zxy/apps/docker_mysql/mysql01/log:/var/log/mysql 指定日志文件目录,左边是服务器目录,右边是容器内目录 -v /zxy/apps/

    2024年02月05日
    浏览(37)
  • docker 启动mysql:5.7报错

    docker 启动mysql容器报错 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.41-1.el7 started. 2023-04-17 09:41:14+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config         command was: mysqld --verbose --help --log-bin-index=/tmp/tmp.QXg3gZVFVb         mysqld: Can\\\'t read dir of \\\'/etc/mysql/conf.d/\\\' (Errcode: 2

    2024年02月11日
    浏览(61)
  • 使用mysql:5.6和owncloud镜像构建个人网盘

    使用docker拉取mysql:5.6和owncloud的镜像 运行镜像生成容器实例 输入ip加端口号 设置密码并登录,就成功进入了    

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包