有一些知识点在docker实践教程,nginx中使用数据卷映射修改前端网页(一),就不累述了。

下载mysql的镜像

docker pull mysql

创建容器

先去Docker Hub看看mysql是怎么使用的 可知,运行命令为:(该方式运行创建出的mysql基本上是默认的数据,有可能不符合我们所需)

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

some-mysql:mysql对应容器名称 my-secret-pw:mysql要设置的密码 tag:版本号

默认方式创建的mysql容器

修改一下密码为123456,其他的都保持默认,可以看见创建了一个名称为some-mysql,端口号为3306的mysql容器。 使用docker inspect some-mysql命令查看some-mysql的具体信息,可以知道当前some-mysql是以数据卷形式,挂载在宿主机框起来的这个路径下的,Name这一串是数据卷名称。 mysql等某些比较特殊的,容器会自动创建数据卷来挂载数据,这些自动生成的数据卷叫匿名卷,一般是一长串的代码符号。这个时候,mysql对应的数据就挂载在宿主机框起来的这个路径下 为什么mysql要自动创建一个数据卷将数据挂载在宿主机呢? 因为mysql运行时数据内容会原来越大,不方便数据迁移等操作,出于数据解耦的考虑,将数据挂载在宿主机是非常合理的。 但是如果我们不自己指定mysql数据卷及其的挂载的目录,这个时候生成的匿名卷名称非常的反人类。如果我们需要进行mysql升级,就需要删除原来的MySQL容器,再创建新的容器。对应的原来mysql容器的数据卷目录及其数据是还在的,但是新版本mysql容器自动生成新的的数据卷,新数据卷是没有数据的,相当于数据丢失了。除非你能找到老的数据卷,将内容迁移到新的卷中

自定义容器数据目录、配置文件、初始化脚本、端口号

在执行docker run命令时,使用-v 宿主机目录:容器目录就可以完成宿主机本地目录的挂载。 注意:宿主机目录必须以/或./开头,否则就会被识别为数据卷名,而非本地目录 容器中数据目录、配置文件、初始化脚本的目录可以在Docker Hub中找到。

/root/docker_data/mysql是我宿主机本地建立的文件夹,先删除原来的mysql,建立好我们需要的文件夹 这个时候先把初始化文件和配置文件放到对应目录中。 注意初始化文件只在mysql容器创建时第一次运行的时候初始化,后面放进去的就不能初始化了。

docker run -d \

--name mysql \

-p 3306:3306 \

-e TZ=Asia/Shanghai \

-e MYSQL_ROOT_PASSWORD=123456 \

-v /root/docker_data/mysql/data:/var/lib/mysql \

-v /root/docker_data/mysql/init:/docker-entrypoint-initdb.d \

-v /root/docker_data/mysql/conf:/etc/mysql/conf.d \

mysql

–name:运行创建的容器名称 -p:映射的端口号(宿主机端口号:容器端口号) -e:环境变量 ,TZ----设置mysql时区,MYSQL_ROOT_PASSWORD设置密码 -v:文件挂载 这个时候,就可以看见我们的data中有生成的初始mysql文件数据了 此时如果我们的mysql容器被删除了,运行创建新容器的时候,只要挂载的文件还是我们自定义的这个文件,数据就不会丢失,不需要其他的迁移操作等

参考阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。