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

news2025/4/19 13:39:19

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

  • 前言
  • 一、docker中部署MySQL主要有哪几种方式?
  • 二、CentOS 镜像中构建 MySQL 容器
    • 1.编写Dockerfile
    • 2.初始化MySQL
  • 三、MySQL 官方镜像中构建容器
    • 1. 拉取官方镜像
    • 2. 运行镜像
    • 3. 配置镜像外网访问
  • 四、MySQL 容器初始化脚本
    • 1. 将sql文件放入docker
    • 2. 执行sql文件
  • 五、MySQL 容器本地化部署
    • 1. 打包mysql镜像
    • 2. 部署MySQL镜像
  • 总结


前言

这几天在研究如何将服务器和数据库迁移至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%';

在这里插入图片描述
执行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作为数据库,对它的任何改动都应该是要被持久化的,这个时候只需在宿主机创建一个数据卷,然后通过-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/

上述操作处理完生成三个文件 :
在这里插入图片描述
6. 将这三个文件放入目标服务器

2. 部署MySQL镜像

1. 加载镜像

docker load -i mysql7.tar

加载后即可看到镜像
在这里插入图片描述

2. 创建数据卷

docker volume create mysql_data7

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

docker volume inspect mysql_data7

在这里插入图片描述

3.进入数据卷目录

cd /var/lib/docker/volumes/mysql_data7

4. 复制备份压缩包到目录下 并解压
在这里插入图片描述

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内容,如有疑问可以在评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/524819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一不小心,你就掉进了Spring延迟初始化的坑!

前言 书接上回&#xff0c;之前我们有聊到 Spring 的延迟初始化机制&#xff0c;是什么&#xff0c;有什么作用。今天跟各位大佬分享一下&#xff0c;我在使用 Spring 延迟初始化踩过的一些坑。 List<坑> 坑列表 new ArrayList<>(2); 首先&#xff0c;让我们回顾…

STM32-单通道ADC采集(DMA读取)实验

关于ADC的一些原理和实验我们已经有了2篇笔记&#xff0c;链接如下&#xff1a; 关于ADC的笔记1_Mr_rustylake的博客-CSDN博客 STM32-ADC单通道采集实验_Mr_rustylake的博客-CSDN博客 实验要求&#xff1a;通过ADC1通道1&#xff08;PA1&#xff09;采集电位器的电压&#x…

专升本资料怎么找?可以通过哪些渠道找到?

统招专升本专科生每个人只有一次考试的机会&#xff0c;近年来越来越多的人注意到学历的重要性&#xff0c;报考的人也越来越多&#xff0c;竞争激烈。 所以想要成功上岸&#xff0c;光靠靠努力可不行&#xff0c;拥有一个好的复习资料你就成功了一半。 随着粉丝量越来越大&am…

让思维结构化: 美团四大名著之 <金字塔原理>

目录 什么是金字塔原理 纵向结构 横向结构 如何构建金字塔模型 纵向结构 自上而下法 自下而上法 总结 自下而上思考 自上而下表达&#xff0c;结论先行 横向结构 时间顺序 空间顺序 重要性顺序 演绎推理 SCQA方法 序言&#xff08;前言/引言&#xff09;&#x…

如何降低OBS推流直播延迟的问题?

使用推流OBS工具进行直播推流操作时&#xff0c;默认的推流关键帧间隔是10秒&#xff0c;而客户端在播放时&#xff0c;通常需要3个关键帧的数据才会开始播放&#xff0c;为了实现更低的延迟&#xff0c;您需要在推流时将关键帧的间隔设置的小一些&#xff0c;您可以逐步调整这…

Netty(4)

Netty 文章目录 Netty6 Netty 核心模块6.1 EventLoopGroup 与 NioEventLoopGroup6.2 Bootstrap/ServerBootstrap6.3 ChannelPipline、ChannelHandler、ChannelHandlerContext6.3.1 三者的关系6.3.2 ChannelPipline6.3.3 ChannelHandler6.3.4 ChannelHandlerContext6.3.5 三者创…

微服务---Redis实用篇-黑马头条项目-优惠卷秒杀功能(使用java阻塞队列对秒杀进行异步优化)

Redis实用篇-黑马头条项目-优惠卷秒杀功能(使用java阻塞队列对秒杀进行异步优化) 1、秒杀优化 1.1 秒杀优化-异步秒杀思路 我们来回顾一下下单流程 当用户发起请求&#xff0c;此时会请求nginx&#xff0c;nginx会访问到tomcat&#xff0c;而tomcat中的程序&#xff0c;会进…

LeetCode_Day1 | 关于数组双指针及二分法查询

LeetCode_数组 704.二分查找1.题目描述2. 做题前要想明白什么3. 左闭右闭代码4.左闭右开代码5. 关于中间值溢出问题6. 图解举例(左闭右闭) 27.移除元素1. 题目描述2. 暴力法3. 快慢指针法4. 双向双指针法 704.二分查找 1.题目描述 给定一个 n 个元素有序的&#xff08;升序&a…

15天学习MySQL计划(运维篇)分库分表-监控-第十四天

15天学习MySQL计划分库分表-监控-第十四天 1.介绍 1.问题分析 ​ 随着互联网及移动互联网的发展&#xff0c;应用系统的数据量也是成指数式增加&#xff0c;若采用但数据进行数据存储&#xff0c;存在以下性能瓶颈&#xff1a; IO瓶颈&#xff1a;热点数据太多&#xff0c;数…

【2023/05/14】Apple I

Hello&#xff01;大家好&#xff0c;我是霜淮子&#xff0c;2023倒计时第9天。 Share I cannot choose the best.The best choose me. 译文&#xff1a; 我不能选择那最好的。 是那最好的选择我。 They throw their shadows before them who carry their lantern on thei…

MySQL基础-多表查询

本文介绍MySQL的多表查询 文章目录 多表关系一对多多对多一对一 查询内连接外连接自连接联合查询子查询标量子查询列子查询行子查询表子查询 多表查询案例 多表关系 一对多&#xff08;多对一&#xff09;多对多一对一 一对多 案例&#xff1a;部门与员工 关系&#xff1a;一…

Go Wails Docker图形界面管理工具 (4)

文章目录 1. 前言2. 效果图3. 代码 1. 前言 接上篇&#xff0c;本次添加Docker日志查看功能 2. 效果图 3. 代码 直接调用官方库 app.go func (a *App) Log(ID string) (string, error) {reader, err : Cli.ContainerLogs(context.Background(), ID, types.ContainerLogsOption…

最快鉴别网工能力的方法,就三个字

大家好&#xff0c;我是老杨。 可以投个票&#xff0c;让我了解了解你的近况。 转眼2023年都过去3天了&#xff0c;我这的人事部门又开始找我问招聘画像&#xff0c;每年这时候&#xff0c;我都得头痛一阵子。 从技术转管理之后&#xff0c;最明显的差异&#xff0c;就是从“…

TLS反调试

一、TLS概念 线程局部存储&#xff08;Thread Local Storage&#xff0c;TLS&#xff09;是一种线程级别的存储机制&#xff0c;它允许每个线程在运行时都拥有自己的私有变量&#xff0c;这些变量只能被该线程访问&#xff0c;而不会被其他线程所共享。 1、TLS的出现是为了解…

【 Python 全栈开发 ⑭ 】数据操作方法

文章目录 一、运算符&#xff08;1&#xff09;&#xff1a;加号二、运算符&#xff08;2&#xff09;&#xff1a;乘号三、in 与 not in四、len()五、del六、max() 与 min()七、数据类型转换 一、运算符&#xff08;1&#xff09;&#xff1a;加号 运算符 “” 的作用是 “合…

〖Web全栈开发②〗—网络编程基础(下)

〖Web全栈开发②〗—网络编程基础&#xff08;下&#xff09; &#xff08;一&#xff09;TCP 网络应用程序开发流程1. TCP 网络应用程序开发流程的介绍2. TCP 客户端程序开发流程的介绍3. TCP 服务端程序开发流程的介绍4. 小结 &#xff08;二&#xff09;socket之send和recv原…

4.LiCTF NSSCTF WEB方向部分 WriteUp

文章目录 0x01、我FLAG呢&#xff1f;【源码信息泄露js信息泄露】0x02、导弹迷踪【js信息泄露】0x03、Follow me and hack me【hackbarburp备份文件】0x04、PHP是世界上最好的语言&#xff01;&#xff01;【代码执行 getshell】0x05、Vim yyds【命令执行 getshell】0x06、作业…

孙鑫VC++第一章 Windows内部运行原理

1. Windows应用程序&#xff0c;操作系统&#xff0c;计算机硬件之间的相互关系 1箭头表示操作系统控制输出设备2箭头表示操作系统可以得到输入设备信息3箭头表示应用程序通知操作系统执行具体操作 操作系统提供给应用程序的接口 API4箭头表示输入设备变化告诉应用程序 Window…

线性表之双向链表(详解)

&#x1f355;博客主页&#xff1a;️自信不孤单 &#x1f36c;文章专栏&#xff1a;数据结构与算法 &#x1f35a;代码仓库&#xff1a;破浪晓梦 &#x1f36d;欢迎关注&#xff1a;欢迎大家点赞收藏关注 文章目录 &#x1f365;前言&#x1f352;双向链表1. 带头双向循环链表…

【C++】通序录管理系统

1、缘起 最近&#xff08;2023-04-24&#xff09;学习完了 C 编程语言的 基础语法&#xff0c;然后将这些基础语法的知识点整合到一起&#xff0c;实现一个 通讯录管理系统。以此来巩固以前所学习过的知识点&#xff0c;以求在后续的学习中能够灵活应用。 2、系统需求 通讯录是…