docker:安装mysql以及最佳实践

文章目录

    • 1、拉取镜像
    • 2、运行容器
    • 3、进入容器
      • 方式一
      • 方式二
      • 方式三
      • 容器进入后连接mysql和在宿主机连接mysql的区别
    • 持久化数据
    • 持久化数据最佳实践

1、拉取镜像

docker pull mysql

2、运行容器

docker run -d -p 3307:3306 --name mysql-container -e MYSQL_ROOT_PASSWORD=123456 mysql

-p 3307:3306:将主机的3307端口映射到容器的3306端口,因为我主机还有一个 mysql 使用了 3306。
-d:后台运行
--name mysql-container:给容器起一个名字叫 mysql-container
-e MYSQL_ROOT_PASSWORD=123456: 设置 MySQL 的 root 用户密码
mysql:latest: 使用 MySQL 镜像,并指定使用最新版本。你也可以指定特定版本号,例如 mysql:8.0。

执行后会生成一串 hash,也就是这个容器的 id,然后我们使用 docker ps 查看所有容器的运行状况
在这里插入图片描述

3、进入容器

方式一

docker exec -it mysql-container /bin/bash
mysql -u root -p

在这里插入图片描述

-it 是 Docker 命令中用于设置交互式终端的参数。具体含义如下:
-i: 表示保持标准输入打开,即允许你通过键盘输入。
-t: 表示分配一个伪终端(pseudo-TTY),即为容器分配一个伪终端设备。

方式二

你也可以直接运行命令

docker exec -it mysql-container mysql -uroot -p

在这里插入图片描述
退出一般使用 exit 或者 quit

方式三

直接在客户端远程连接,这里注意要指定端口号为 3307

mysql -h 127.0.0.1 -P 3307 -u root -p

在这里插入图片描述
直接用一些客户端工具,注意这里的端口号填写刚刚设置的端口号

在这里插入图片描述

容器进入后连接mysql和在宿主机连接mysql的区别

可以看到,方式一和方式二是进入容器后才连接的mysql,方式三是在宿主机连接的 mysql,那么有什么不同吗?

容器环境隔离:

进入容器并在容器内运行 MySQL 客户端命令可以让你直接与容器内的 MySQL 服务进行交互。这有助于在容器环境中调试和执行数据库相关操作。

数据卷挂载:

如果容器内使用了数据卷挂载(Volume Mounting),即容器内的 MySQL 数据存储在宿主机上的某个目录,你可能需要进入容器来查看或操作这些数据。

容器内环境:

有时容器内可能配置有一些特定的环境或工具,进入容器可以方便你直接使用这些环境。

执行其他容器内操作:

进入容器还允许你执行其他容器内的操作,例如查看容器内部的文件结构、执行脚本等。

然而,在一些简单的情况下,直接在宿主机上使用 MySQL 客户端连接容器内的 MySQL 服务也是可行的。这通常适用于只需要执行一些简单的查询或操作而不涉及到容器内部的详细环境时。

持久化数据

我们修改一下运行容器的命令,添加 -v 参数

docker run -d -p 3307:3306 --name mysql-container -e MYSQL_ROOT_PASSWORD=123456 -v /Users/zhangyu/web/web-all/mysql-all/docker-sourcedata:/var/lib/mysql mysql

-v /Users/zhangyu/web/web-all/mysql-all/docker-sourcedata:/var/lib/mysql:使用数据卷将 MySQL 数据目录 (/var/lib/mysql) 映射到宿主机的一个路径 (/Users/zhangyu/web/web-all/mysql-all/docker-sourcedata)。这样做可以使 MySQL 数据持久化,即使容器停止和删除后,数据仍然保存在宿主机上。
在这里插入图片描述
可以看到我运行完之后,立马就有初始化的数据了,而且我删除这个容器后数据依然存在宿主机目录

但是这样做,如果我已经启动了一个容器,数据库也使用了,那么我必须删除掉这个容器才能重新启动和这个一样的,因为在 Docker 中,一旦容器启动,通常来说,其文件系统和数据是在容器内部的。有一个比较好的实践是这样的

持久化数据最佳实践

1、创建一个数据卷容器:

docker run --name mysql-data-container -v /path/to/mysql/data:/var/lib/mysql busybox

这个命令创建了一个名为 mysql-data-container 的容器,并将宿主机上的 /path/to/mysql/data 目录挂载到容器内的 /var/lib/mysql。这样,mysql-data-container 将成为一个专门用于持久化 MySQL 数据的数据卷容器。

2、创建一个 MySQL 容器并挂载数据卷:

docker run --name mysql-container --volumes-from mysql-data-container -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 -d mysql:latest

这个命令启动了一个名为 mysql-container 的 MySQL 容器,并使用了 --volumes-from 参数,将 mysql-data-container 的数据卷挂载到了 MySQL 容器中。

–volumes-from:用于将容器的卷挂载到另一个容器的参数。
语法:docker run --volumes-from <source_container> ...

这种方法允许你在容器已经启动的情况下为其添加数据卷。请注意,在 Docker 中,一旦容器启动后,其文件系统通常是不可更改的,因此通过这种方式挂载数据卷是一种常见的实践。

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

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

相关文章

Botton进一步了解(点击事件)

点击事件和长按事件 监听器&#xff1a;专门监听控件的动作行为。只有控件发生了指定的动作&#xff0c;监听器才会触发开关区执行对应的代码逻辑。按钮控件有两种常用的监听器&#xff1a; 点击监听器&#xff1a;通过setOnClickListener方法设置。按钮被按住少于500ms时会触…

2023济南大学acm新生赛题解

通过答题情况的难度系数&#xff1a; 签到&#xff1a;ACI 铜牌题&#xff1a;BG 银牌题&#xff1a;EF 金牌题&#xff1a;DHJKO 赛中暂未有人通过&#xff1a;LMNP A - AB Problem 直接根据公式计算就行。 #include<stdio.h> int main(){int a,b;scanf("%…

安卓MediaRecorder(2)录制源码分析

文章目录 前言JAVA new MediaRecorder() 源码分析android_media_MediaRecorder.cpp native_init()MediaRecorder.java postEventFromNativeandroid_media_MediaRecorder.cpp native_setup() MediaRecorder 参数设置MediaRecorder.prepare 分析MediaRecorder.start 分析MediaRec…

当前 .NET SDK 不支持面向 .NET X.0 (如8.0)问题的解决方案

如果您加载方案或运行时出现如下错误时&#xff1a; 当前 .NET SDK 不支持面向 .NET 8.0。请面向 .NET 7.0 或更低版本&#xff0c;或者使用支持 .NET 8.0 的 .NET SDK 版本。从 https://aka.ms/dotnet/download 下载 .NET SDK (项目名称).Domain C:\Program Files\dotnet\…

Windows在cmd中执行bat脚本

在Linux中执行脚本常用的是sh或者直接输入脚本名称即可。 sh shell脚本.sh # 或者 shell脚本.sh在Windows中类似&#xff0c;使用start或者直接输入脚本名称。 start bat脚本.bat :: 或者 bat脚本.bat

【Angular开发】Angular在2023年之前不是很好

做一个简单介绍&#xff0c;年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【架构师酒馆】…

SSL证书更新

首先&#xff0c;我们需要理解为什么需要更新SSL证书。SSL证书的有效期通常为一年。一旦证书过期&#xff0c;浏览器会显示警告&#xff0c;提示用户该网站的SSL证书已经过期&#xff0c;这可能会导致用户对网站的信任度下降&#xff0c;甚至直接离开网站。此外&#xff0c;一些…

【Python】手把手教你用tkinter设计图书管理登录UI界面(一)

下一篇&#xff1a; 本项目将分段设计“图书管理登录UI界面”的用户登录、用户注册、用户账号找回等。主要围绕GUI标准库tkinter、以及类的继承&#xff08;重点&#xff09;来设计本项目。 首先新建一个文件夹命名为“图书管理系统项目”&#xff0c;并在其目录下新建文件夹…

【分治】最接近点对Python实现

文章目录 [toc]问题描述一维最接近点对算法Python实现 二维最接近点对算法分治算法时间复杂性Python实现 问题描述 给定平面上 n n n个点&#xff0c;找其中的一对点&#xff0c;使得在 n n n个点组成的所有点对中&#xff0c;该点对的距离最小 一维最接近点对算法 Python实…

LED透镜粘接UV胶是一种特殊的UV固化胶,用于固定和粘合LED透镜。

LED透镜粘接UV胶是一种特殊的UV固化胶&#xff0c;用于固定和粘合LED透镜。 它具有以下特点&#xff1a; 1. 高透明度&#xff1a;LED透镜粘接UV胶具有高透明度&#xff0c;可以确保光线的透过性&#xff0c;不影响LED的亮度和效果。 2. 快速固化&#xff1a;经过UV紫外线照射…

CPU、MCU、MPU、DSP、FPGA各是什么?有什么区别?

1、CPU 中央处理器&#xff0c;简称 CPU&#xff08;Central Processing Unit&#xff09;&#xff0c;中央处理器主要包括两个部分&#xff0c;即控制器、运算器&#xff0c;其中还包括高速缓冲存储器及实现它们之间联系的数据、控制的总线。 电子计算机三大核心部件就是CPU…

力扣257. 二叉树的所有路径(递归回溯与迭代)

题目&#xff1a; 给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,null,5] 输出&#xff1a;["1->2->5","…

[陇剑杯 2021]简单日志分析

[陇剑杯 2021]简单日志分析 题目做法及思路解析&#xff08;个人分享&#xff09; 问一&#xff1a;某应用程序被攻击&#xff0c;请分析日志后作答&#xff1a; 黑客攻击的参数是______。&#xff08;如有字母请全部使用小写&#xff09;。 题目思路&#xff1a; 分析…

C++牛客知识点2

提示&#xff1a;接上文 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0…

http与https的区别,以及生产环境配置https的几种方式

http HTTP(超文本传输协议)是一种用于传输和处理超文本文档的协议。HTTP使用客户端-服务器模型。客户端通过HTTP请求协议向服务器发送请求&#xff0c;服务器则使用HTTP响应协议返回响应。HTTP协议通常使用TCP/IP作为底层传输协议&#xff0c;但它也可以使用其他传输协议。 H…

sql注入学习

基础查询语句&#xff1a; 给指定字段添加数据 insert into 表名(字段名1,字段名2,.....) values(值1,值2,......); 给全部字段添加数据 insert into 表名 values (值1,值2,.....);--无限制条件的修改,会修改整张表 update 表名 set 字段 值; --有限制条件的修改,只修改特定记…

软件设计师——计算机网络(二)

&#x1f4d1;前言 本文主要是【计算机网络】——软件设计师——计算机网络的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1…

Promise介绍和使用

Promise Promise是一门新的技术&#xff08;ES6规范&#xff09;&#xff0c;JS中进行异步编程的新解决方案。&#xff08;旧的方案是使用回调函数&#xff0c;比如AJAX请求&#xff09;。 从语法上来说Promise是一个构造函数。 从功能上来说Promise对象用来封装一个异步操作并…

生成式AI赋能千行百业加速创新,2023亚马逊云科技re:Invent行业盘点

2023亚马逊云科技re:Invent全球大会已于上周圆满闭幕&#xff0c;在本次大会中&#xff0c;亚马逊云科技又为大家带来了很多功能/项目迭代更新&#xff0c;也重磅发布了很多全新的功能。今天从行业视角来盘点回顾哪些重磅发布适用于垂直行业客户&#xff0c;以及面向汽车、制造…

ChatGLM3-6B和langchain阿里云部署

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、ChatGLM3-6B部署搭建环境部署GLM3 二、Chatglm2-6blangchain部署三、Tips四、总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; …