No zuo no die ,用Docker安装Mysql

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 话说,小哥接触Mysql也有几年了,但总是感觉Mysql有很多神秘的特性,一直也不太敢折腾这家伙。昨天准备动动手,可安装过程就花了2天时间。期间,错误的以为必须要给mysql server挂载本地目录,对数据进行持久化。

话说,小哥接触Mysql也有几年了,但总是感觉Mysql有很多神秘的特性,一直也不太敢折腾这家伙。昨天准备动动手,可安装过程就花了2天时间。
期间,错误的以为必须要给mysql server挂载本地目录,对数据进行持久化。最终,还是看了docker文档才搞清楚Docker Volume的使用方法。

先讲案例

一、docker 安装 Mysql

1.在docker shell 下载mysql-server

docker pull mysql/mysql-server:8.0
## 8.0 可以设为7.0 5.6 5.5

2. 启动镜像

docker run --name=mysql1 -d mysql/mysql-server:8.0

3. 等待镜像完成初始化,用docker ps 命令查看状态。由于dokcer -d是后台执行,无法观察系统执行情况。当docker ps输出status 为healthy的时候,系统启动完成。

docker ps

4.获取root密码

docker logs mysql1 2>&1 | grep GENERATED

回显,GENERATED ROOT PASSWORD: Axegh3kAJyDLaRuBemecis&EShOs

5.获得mysql shell,用docker获取镜像里的进程

docker exec -it mysql1 mysql -uroot -p

输入 4步获得的密码。

6.修改root密码

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';

完成以上6步,就可以得到一个mysql虚拟机,你可以通过docker exec -it mysql1 mysql -uroot -p 连接到虚拟机内部。

以上步骤,来源于docker hub上mysql server的文档。
https://hub.docker.com/r/mysql/mysql-server/

二、docker 数据持久化

如果docker 不能持久化数据,重新启动docker,那么写入mysql的数据就都丢失了?

1. 测试,关闭虚拟机

我们采用命令, 重启虚拟机,发现写入的数据没有丢失。

docker stop mysql1
docker start mysql1

2. Docker 为什么不是持久化

在docker 官方文档上,介绍了docker存储原理。docker的一种重要特性,就是分层存储,这个在编译、传输docker时都带来很大优势。

运行的docker容器也是分层的,“writeable container layer”可写层位于docker容器的最顶端,这个层的特点就是不能持久化。

docker运行过程中的写操作都保存在“writeable layer”上,但当容器停止时,这些数据是没有保存,下一次启动docker,就好像启动一块有还原卡的主机,之前操作都没有保存下来。

By default all files created inside a container are stored on a writable container layer. This means that:

  • The data doesn’t persist when that container is no longer running, and it can be difficult to get the data out of the container if another process needs it.
  • A container’s writable layer is tightly coupled to the host machine where the container is running. You can’t easily move the data somewhere else.
  • Writing into a container’s writable layer requires a storage driver to manage the filesystem. The storage driver provides a union filesystem, using the Linux kernel. This extra abstraction reduces performance as compared to using data volumes, which write directly to the host filesystem.
    https://docs.docker.com/storage/

3.docker Volume 概念

volume

docker 提供了三种数据持久化的方案

  1. volume
  2. bind mount
  3. tmpfs mount

官网文章 https://docs.docker.com/storage/#good-use-cases-for-volumes 给出了Good use cases for (volume;bind mount;tmpfs)。

官网的图片就可以说明三中类型区别:

  1. volume 卷,由Docker维护,保存在Filesystem中,即宿主机的文件系统中,但宿主机通常无法管理volume。
  2. bind mount,磁盘挂载,将宿主机的目录挂载到docker中。我们将源码保存在工程目录里,docker挂载工程目录,实现发布测试,就是用的这种方式。
  3. tmpfs是基于内存的。

三、卷的使用方法

1. bind mount挂载一个卷,将当前目录下的html文件夹挂载到docker nginx的发布目录

docker run -v $PWD/html:/usr/share/nginx/html -d nginx 

2. Volume 分为两种类型,匿名Volume和非匿名Volume

使用非匿名Volume,首先要创建一个,

docker volume create mydataVolume

挂载Volume,也是-v volume名字:docker路径

docker run --name=nginx -v mydataVolume:/usr/share/nginx/html -d nginx

匿名Volumn,在docker run的时候,创建一个volume并和镜像路径和绑定。

docker run --name=nginx -v /usr/share/nginx/html -d nginx

查看所有的Volume,每次创建新的容器,都会创建新的Volume。注,docker run创建新容器,docker stop可以运行已经停止的容器。

docker volume ls

下图,019 734等都是匿名卷,而wangsen是非匿名卷。


docker volume list

3. 卷的操作

如果镜像被删除了,匿名卷是不会被删除的,调用docker volume rm 卷名

如果挂载卷的docker被删除,其他镜像可以挂载这个卷。

一个卷没有任何的镜像挂载,那么它就成了无用的卷,命令docker volume prune可以批量删除无用卷。

4.挂载卷

不能直接 -v一个已经被其他docker挂载的volume,但是可以挂载docker,-volumes-from命令。

四,终于要揭开谜底 Mysql如何实现的持久化

在Mysql的Dockerfile,定义了匿名卷 VOLUME /var/lib/mysql

dockfile

此外docker mysql/mysql-server官方文档关于持久化主题 https://dev.mysql.com/doc/refman/5.7/en/docker-mysql-more-topics.html#docker-persisting-data-configuration

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2天前
|
消息中间件 Docker 容器
消息中间件RabbitMQ---Docker安装RabbitMQ、以及RabbitMQ的基本使用【二】
这篇文章提供了RabbitMQ的安装和基本使用教程,包括如何使用Docker拉取RabbitMQ镜像、创建容器、通过浏览器访问管理界面,以及如何创建交换机、队列、绑定和使用direct、fanout和topic三种类型的交换器进行消息发布和接收的测试。
消息中间件RabbitMQ---Docker安装RabbitMQ、以及RabbitMQ的基本使用【二】
|
2天前
|
关系型数据库 MySQL Java
腾讯云服务器的使用、服务器中使用Docker安装常见的软件、如何将一个项目发布到服务器
这篇文章介绍了在腾讯云服务器上使用Docker安装常见软件的过程,包括安装MySQL、Redis和Tomcat,并提供了解决连接问题的方法。同时,还涉及了服务器中安装JDK 1.8的步骤和如何将项目打包部署到服务器上的指导,包括注意事项和操作提示。
腾讯云服务器的使用、服务器中使用Docker安装常见的软件、如何将一个项目发布到服务器
|
2天前
|
应用服务中间件 Docker 容器
在服务器中使用Docker安装Tomcat、同时实现目录挂载、并且部署War包到服务器
这篇文章介绍了在Docker中安装Tomcat的过程,包括搜索Tomcat镜像、拉取镜像、目录挂载的准备、创建并挂载容器,以及如何进入容器和进行测试。文中还说明了如何将WAR包部署到Tomcat服务器并访问部署的应用。
在服务器中使用Docker安装Tomcat、同时实现目录挂载、并且部署War包到服务器
|
2天前
|
关系型数据库 MySQL Java
centos7安装mysql教程及Navicat平替软件
【8月更文挑战第17天】本教程详述CentOS 7上安装MySQL的过程。首先确保移除任何预装的MySQL组件,然后通过wget获取并安装MySQL的YUM源。可以选择安装特定版本如5.7或8.0。安装MySQL服务器后,启动服务并查找初始密码。登录MySQL后应立即更改密码,并可根据需要设置远程访问权限。此外,还推荐使用免费开源的DBeaver作为数据库管理工具,提供了安装步骤以方便管理和操作MySQL数据库。
|
2天前
|
应用服务中间件 Linux nginx
Linux虚拟机磁盘扩容、Docker容器磁盘满的问题、Docker安装nginx
这篇文章讨论了Linux虚拟机磁盘扩容的方法,包括外部配置、具体扩容步骤和扩容后的效果验证。同时,文章还涉及了Docker容器磁盘满的问题及其解决方法,如删除不必要的镜像和容器,以及调整Docker的安装路径。此外,还提到了意外情况的处理,例如误删除停止的容器后的应对措施。最后,文章还提供了使用Docker安装nginx的步骤和成功访问的截图。
Linux虚拟机磁盘扩容、Docker容器磁盘满的问题、Docker安装nginx
|
2天前
|
数据可视化 Docker 容器
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
这篇文章提供了通过Docker安装Elasticsearch和Kibana的详细过程和图解,包括下载镜像、创建和启动容器、处理可能遇到的启动失败情况(如权限不足和配置文件错误)、测试Elasticsearch和Kibana的连接,以及解决空间不足的问题。文章还特别指出了配置文件中空格的重要性以及环境变量中字母大小写的问题。
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
|
2天前
|
关系型数据库 MySQL Linux
一文教会你如何在Linux系统中使用Docker安装Mysql 5.7版本 【详细过程+图解】
这篇文章提供了在Linux系统中使用Docker安装Mysql 5.7版本的详细过程和图解,包括安装指定版本、创建实例、启动、使用Navicat连接测试、文件挂载与端口映射、进入容器、配置文件修改以及重新启动容器等步骤。
一文教会你如何在Linux系统中使用Docker安装Mysql 5.7版本 【详细过程+图解】
|
1天前
|
Linux Docker 容器
在CentOS上安装Docker的指南:
【8月更文挑战第19天】介绍在CentOS上安装Docker的过程:首先确认CentOS版本兼容,建议使用7或更高版本,并通过`yum update -y`更新系统。安装Docker时推荐使用官方仓库方法,需安装`yum-utils`等工具,设置Docker仓库简化安装流程。可选配置国内镜像源(如阿里云)提升下载速度。亦可通过RPM包离线安装。安装后启动Docker服务并通过`systemctl enable docker`设为开机启动。最后,运行`docker run hello-world`验证安装。如遇问题,使用`sudo journalctl -u docker`查看日志排错。
46 0
|
2天前
|
关系型数据库 MySQL 数据库
成功解决:Navicat 连接虚拟机Docker中的mysql数据库失败(仅限某些特殊情况)
这篇文章介绍了在Ubuntu环境中使用Docker部署Flask项目的方法,包括创建测试项目、设置数据库、构建Flask和Nginx镜像以及容器编排,其中使用了MySQL 5.7作为数据库,Flask 2.0.2作为Web框架,Gunicorn 20.1.0作为应用服务器,Nginx 1.21.4作为反向代理,并解决了Navicat连接Docker中的MySQL数据库失败的问题。
|
2天前
|
NoSQL 数据可视化 Linux
一文教会你如何在Linux系统中使用Docker安装Redis 、以及如何使用可视化工具连接【详细过程+图解】
这篇文章详细介绍了如何在Linux系统中使用Docker安装Redis,并提供了使用可视化工具连接Redis的步骤。内容包括安装Redis镜像、创建外部配置文件、映射文件和端口、启动和测试Redis实例、配置数据持久化存储,以及使用可视化工具连接和操作Redis数据库的过程。

热门文章

最新文章