13. Docker实战之安装MySQL

目录

1、前言

2、部署MySQL

2.1、Docker仓库查看镜像

2.2、拉取MySQL镜像

2.3、创建持久化目录

2.4、启动MySQL容器

2.5、查看宿主机上的MySQL目录

2.6、本地MySQL测试

2.7、新建MySQL用户,配置远程访问

2.8、本地Navicat连接测试

3、为什么数据库不适合Docker容器化

3.1、数据安全性

3.2、硬件资源争用

3.3、网络带宽占用

3.4、数据额外隔离

4、小结


1、前言

开发中,通常会自建MySQL数据库方便个人开发测试。这里利用Docker安装MySQL 5.7。

2、部署MySQL

2.1、Docker仓库查看镜像

上镜像仓库:https://hub.docker.com/ 搜索mysql。

搜索结果第一条,就是我们要的结果。

点击进去查看详情,可以看到关于MySQL镜像相关的所有信息。我们需要安装的是MySQL5.7版本,因此我们进入到Tags中。

找到我们要的5.7版本。

后面的黑框里的命令,就是我们可以拉取该版本的命令。

2.2、拉取MySQL镜像

从Docker Hub中复制拉取镜像命令,执行。

docker pull mysql:5.7

2.3、创建持久化目录

MySQL数据库部署时,一定要考虑数据持久化的问题。如果没有挂在持久化数据卷,一旦MySQL容器被销毁,则数据将会全部丢失。

# 用于存放mysql配置文件
mkdir -p mysql/conf
# 用于存放mysql数据
mkdir -p mysql/data

2.4、启动MySQL容器

docker run -d -p 33066:3306 \-v /home/pengyaohuang/mysql/conf:/etc/mysql/conf.d  \-v /home/pengyaohuang/mysql/data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=root \--name mysql mysql:5.7

-v将MySQL的配置文件和数据文件挂在到宿主机上。

2.5、查看宿主机上的MySQL目录

tree -d -L 3 /home/pengyaohuang/mysql/

2.6、本地MySQL测试

先进入docker容器内

docker exec -it mysql /bin/bash

再通过命令进入MySQL:

mysql -uroot -p

2.7、新建MySQL用户,配置远程访问

创建一个admin_rw账户:

# 创建用户
mysql> create user 'admin_rw'@'%' identified by '123456';
# 赋予所有权限
mysql> grant all privileges on *.* to 'admin_rw'@'%';
# 刷新权限
mysql> flush privileges;

2.8、本地Navicat连接测试

由于我映射到宿主机端口为33066,因此我的MySQL连接信息为:192.168.74.128:33066

连接成功:

3、为什么数据库不适合Docker容器化

虽然我们按照前面步骤能够正常安装并使用我们的MySQL。但是实际项目中,我们MySQL很少会使用Docker安装,要么直接装在宿主机,要么使用云服务RDS。这是因为DOcker容器提供的是无状态的服务,所以不适合将有状态的服务(如数据库)部署到Docker容器中。原因有4:

3.1、数据安全性

尽管 Docker 可以通过数据卷的方式将容器中的数据持久化到宿主机上,但仍不能保证不丢失数据。如果容器崩溃了,且数据库未被正确关闭,则可能会丢失数据。

3.2、硬件资源争用

通常在一台 Docker 的宿主机上会启动多个容器,如果将数据库的容器与其他应用的容器部署在同一个宿主机上,由于它们对硬件资源的要求是不同的,则必然会造成资源争用的问题。

3.3、网络带宽占用

Docker 的网络都是虚拟网络,通过宿主机上的 docker0 网桥进行转发。而数据库通常对网络带宽的要求是比较高的。因此,将数据库的容器与其他应用的容器部署在同一个宿主机上,则网络带宽必然会成为数据库性能的瓶颈。

3.4、数据额外隔离

将数据库部署到容器中,毫无疑问会增加对容器的隔离,不利于数据库的水平扩展。

4、小结

使用 Docker 是为了更容易地构建新环境和重新部署应用。而在实际情况中,数据库一旦部署完成,则很少会对数据库进行升级或重新部署。因此,从这个角度来看数据库也不适合 Docker 容器化。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学校宿舍门禁:如何做好考勤管理?

随着科技的不断发展,传统的考勤方式逐渐显现出其局限性,而人脸识别技术作为一种快速、准确、无需直接接触的身份验证手段,为宿舍管理带来了全新的可能性。 宿舍管理能够让管理员随时通过系统监控宿舍内的人员流动情况,当系统检测到…

WebGL 变量uniform、gl.getUniformLocation、gl.uniform4f及其同族函数相关

目录 uniform变量命名规范 获取 uniform 变量的存储地址 gl.getUniformLocation 向uniform变量赋值 gl.uniform4f ​编辑 gl.uniform4f()的同族函数 demo:点击webgl坐标系的四个象限绘制各自不同颜色的点 uniform变量命名规范 var FSHADER_SOURCE uniform vec4…

word文件怎么免费转换为pdf格式?

大家在编辑word文件的时候,可能需要进行格式的转换,比如将word转换为pdf格式这时候需要使用工具软件。接下来小编就给大家介绍word文件怎么免费转换为pdf格式,免费word转pdf格式的方法。 免费word转pdf格式的方法 我们需要在电脑中安装并打开…

Failed to load property source from location ‘classpath:/application.yml‘

项目场景: 今天到公司启动项目,突然发现项目起不起来了 问题描述 出现 Failed to load property source from location ‘classpath:/application.yml’ 错误 原因分析: 刚开始以为是 application.yml 中格式错误,但是发现同…

python matlab 画坐标图

画一个坐标系,同时显示两条直线,效果图如下: 功能点: 同时显示两个纵坐标数据 显示图片名称 图片最大化保存 到本地 在图片某个位置显示字符信息 不同的线名称提示 代码如下: import matplotlib.pyplot as pltde…

uniapp微信小程序点击右上角菜单分享功能权限配置

个人项目地址: SubTopH前端开发个人站 (自己开发的前端功能和UI组件,一些有趣的小功能,感兴趣的伙伴可以访问,欢迎提出更好的想法,私信沟通,网站属于静态页面) SubTopH前端开发个人站…

ubuntu18.04安装keil5并迁移stm32项目(踩坑)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、安装winewine的总结 二、安装Keil5总结 前言 切记看完再享用,别直接上手,不然安装的时候会和我一样踩坑的(走了很多弯路…

七夕特辑(一)浪漫表白方式 用神经网络生成一首情诗

目录 一、准备工作二、用神经网络生成一首诗,代码说明 牛郎织女相会,七夕祝福要送来。祝福天下有情人,终成眷属永相伴。 七夕是中国传统的情人节,也是恋人们表达爱意的好时机。在这个特别的日子里,送上温馨的祝福&…

社科院与美国杜兰大学金融管理硕士项目——畅游于金融世界

随着社会经济的不断发展,职场竞争愈发激烈,很多同学都打算通过报考研究生来实现深造,提升自己的综合能力和竞争优势,获得优质的证书。而对于金融专业的学生和在职人员来说,社科院与美国杜兰大学金融管理硕士项目是一个…

12.串,串的存储结构与模式匹配算法

目录 一. 一些术语 二. 串的类型定义 (1)串的顺序存储结构 (2)串的链式存储结构 三. 串的模式匹配算法 (1)BF算法 (2)KMP算法 四. 案例实现 串(String)---零个或多个任意字符…

函数式编程-Stream流学习第一节

1 为什么学习 1.现在很多公司在编程中大量使用函数式编程-Stream流格式代码,所以为了能够看懂公司的代码 2.大量数据下处理集合效率高--因为有并行流 3.代码可读性高 4.消灭嵌套地狱 2 函数式编程思想 2.1 概念 面向对象编程是关注于用对象完成什么事情。而函数式…

pm4py使用指南(非机翻)

目录 1. 日志数据读取及预处理(1)查看case和event数量(2)查看起始事件和结束事件(3)时间戳格式的问题 2. 日志数据过滤3. 流程发现4. 模型转化5. 模型可视化 1. 日志数据读取及预处理 通过 pandas库 读取c…

数据结构-Java逆天操作

本文章会对Java线性表的相关知识进行讲解,也会以Java代码示例来进行解释 对线性表的讲解分析 定义 线性表是一种数据结构,它是由一系列具有相同类型的元素组成的有序集合。线性表中的元素按照线性的顺序 排列,每个元素只有一个前驱元素和一…

对于pycharm 运行的时候不在cmd中运行,而是在python控制台运行的情况,如何处理?

对于pycharm 运行的时候不在cmd中运行,而是在python控制台运行的情况,如何处理? 比如,你在运行你的代码的时候 它总在python控制台运行,十分难受 解决方法 在pycharm中设置下即可,很简单 选择运行点击…

python爬虫10:selenium库

python爬虫10:selenium库 前言 ​ python实现网络爬虫非常简单,只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点,方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论,并不会对网站产…

LeetCode--HOT100题(34)

目录 题目描述:94. 二叉树的中序遍历(简单)题目接口解题思路1代码解题思路2代码 PS: 题目描述:94. 二叉树的中序遍历(简单) 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 LeetCode做…

爆火「视频版ControlNet」开源了!靠提示词精准换画风,全华人团队出品

“视频版ControlNet”来了! 让蓝衣战神秒变迪士尼公举: 视频处理前后,除了画风以外,其他都不更改。 女孩说话的口型都保持一致。 正在插剑的姜文,也能“下一秒”变猩球崛起了。 这就是由全华人团队打造的最新视频处理…

性能调优篇 二、Jvm监控及诊断工具-命令行篇

目录 一、概述1、简单命令行工具 二、jps:查看正在运行的Java程序(掌握)1、是什么?2、测试3、基本语法 三、jstat:查看jvm统计信息(掌握)1、是什么?2、基本语法3、补充 四、jinfo&am…

记录Taro大坑2丢失api无法启动

现象 解决方案 看了很多。很多说要改成一致的版本号。其实没什么用。 正确方案 再新建一个模板跑起来对比config的配置,以及package.json发现关闭预编译即可。预编译导致api丢失

javaWeb差缺补漏(一)【针对于自身知识点掌握情况】

前端三大件部分 1、a标签的target属性iframe标签的name属性 2、textarea标签:表示多行文本输入。起始标签和结束标签中的内容是默认值。 rows:属性设置可以显示多少行。 cols:属性设置每行显示多少列。 3、form表单的action提交的时候&a…