Happy3w

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是容器中路径,不同工具需要映射的内部路径不一样需要参照对应说明文档 上一篇  下一篇