有一些知识点在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容器被删除了,运行创建新容器的时候,只要挂载的文件还是我们自定义的这个文件,数据就不会丢失,不需要其他的迁移操作等