当前位置: 首页 > news >正文

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.lryc.cn/news/256807.html

相关文章:

  • uniapp实战 —— 自定义顶部导航栏
  • 中国移动频段划分
  • 《PySpark大数据分析实战》-01.关于数据
  • Qt/C++视频监控拉流显示/各种rtsp/rtmp/http视频流/摄像头采集/视频监控回放/录像存储
  • Vue.js - 界面设计工具和UI组件库
  • 【贪心算法】 Opponents
  • 【git 相关操作】
  • 流媒体音视频/安防视频云平台/可视化监控平台EasyCVR无法启动且打印panic报错,是什么原因?
  • H264之NALU结构详解
  • 快速整合EasyExcel实现Excel的上传下载
  • MongoDB的条件操作符
  • 【Linux】探索Linux进程状态 | 僵尸进程 | 孤儿进程
  • 大数据股票简单分析
  • 从零开始搭建链上dex自动化价差套利程序(11)
  • 2023.12面试题汇总小结
  • Linux权限命令详解
  • 【Android】Glide的简单使用(下)
  • TCP对数据的拆分
  • 面试问题--计算机网络:二层转发、三层转发与osi模型
  • kubectl获取ConfigMap导出YAML时如何忽略某些字段
  • 复制粘贴——QT实现原理
  • (一)五种最新算法(SWO、COA、LSO、GRO、LO)求解无人机路径规划MATLAB
  • LED透镜粘接UV胶是一种特殊的UV固化胶,用于固定和粘合LED透镜。
  • C语言 题目
  • CDN 内容分发网络
  • Android : Xui- RecyclerView+BannerLayout 轮播图简单应用
  • Java网络通信-第21章
  • Leetcode 345. Reverse Vowels of a String
  • [linux] 用命令行wget下载google drive的大文件
  • Docker Network(网络)——8