Docker-分配资源
2017.01.08在前一篇Mysql已经运行起来了,细心的人可能发现两个问题
1.我本地已经安装了一个Mysql,3306端口已经占用,怎么办?
2.我的mysql数据存在哪里?如何能保证mysql在启停的过程中不丢失数据?万一我要删除Mysql,能保留数据吗?
问题1.我本地已经安装了一个Mysql,3306端口已经占用,怎么办?
我相信细心的人应该也已经注意到启动Mysql的命令行
docker run --name my-mysql-server -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
docker:这是docker控制台程序
run:docker控制台的一个命令,负责运行一个image,运行的时候可以指定一些参数
"-name my-mysql-server":这个是run命令的参数,这个参数制定了一个名字给通过image启动的container。如果不提供名字docker daemon会随机分配一个名字,这个名字不能重复
"-p: 3306:3306":这是run命令的参数,表示系统image启动后container的3306端口会被映射到本机的3306端口
"-e MYSQL_ROOT_PASSWORD=123456":-e会传递一个环境变量到容器中,这个环境变量不同的应用不同,现在这个变量是Mysql设置root密码的变量,具体参见https://hub.docker.com/_/mysql
-d:这是run命令的参数,表示这个程序会是一个后台程序
"mysql":这个是run命令的参数,是需要运行的image的名字和版本号。这里并没有给版本号,默认为latest,也没有指定repository,那么也会使用默认的repository。
所以修改-p参数就可以解决和本地mysql端口号冲突的问题;如果本地要运行多个mysql还需要修改容器名字,当然这个名字也可以忽略,如果要操作这些容器的时候除了使用名称,也可以使用id,参见命令docker ps的第一列,e5ba75509bf3就是刚刚启动容器的id,docker的命令在需要填写name的地方,填写id也一样管用。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e5ba75509bf3 mysql "docker-entrypoint..." 11 hours ago Up 11 hours 0.0.0.0:3306->3306/tcp my-mysql-server
问题2.我的mysql数据存在哪里?如何能保证mysql在启停的过程中不丢失数据?万一我要删除Mysql,能保留数据吗?
2.1 我的msql数据存在哪里?
默认数据存放在容器中,容器被删除,容器中的数据会跟着被删除,有些容器会自动将数据映射到一个系统目录中,但还是会跟着容器一起被删除。
2.2 如何保证mysql在启停的过程中不丢失数据?
在执行命令docker stop my-mysql-server的时候容器被停止,但数据已经被写到硬盘上,再次启动,执行docker start my-mysql-server的时候,数据还会在
2.3 万一我要删除Mysql,能保留数据吗?
如果执行了命令docker rm -f my-mysql-server,容器将被删除,数据丢失。要保留数据,需要引入另外一个参数-v。
这个-v参数可以将本地目录映射到容器中,这样容器删除的时候数据就能留下,重新启动新的容器时,只要将这个目录映射进去,就能得到以前的数据。
docker run --name my-mysql-server -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d -v /my/own/datadir:/var/lib/mysql mysql
这里的/my/own/datadir就是本地用于保存数据的路径,必须是绝对路径,目录可以不存在
/var/lib/mysql是容器中路径,不同工具需要映射的内部路径不一样需要参照对应说明文档
上一篇 下一篇