Docker6
程序员文章站
2022-03-12 12:17:42
...
Docker高阶使用
容器数据卷
在我们使用docker时我们的数据不应该存在容器中
以MySQL
为例,容器删了,数据库还留着
产生了一个需求,容器之间的数据共享技术
卷技术(目录挂载)将容器内的目录,挂载到linux
上
#卷挂载
sudo docker run -it -v 主机目录:容器内目录
#查看容器详情信息,看卷挂载是否成功了
sudo docker inspect id
卷挂载成功后进行测试,从容器内创建文件,容器外进入挂载目录,可以查看到创建的文件,在容器外修改,容器内也被修改
注意!挂载目录是同步,而不是同一个文件,这意味着,数据的双份存储
练习MySQL
#首先拉取镜像,这里使用mysql5.7
sudo docker pull mysql:5.7
#运行容器,做数据挂载
sudo docker run -d -p 3310:3306 \ #后台启动并映射端口
-v /home/mysql5.7/conf:/etc/mysql/conf.d \ #将conf.d挂载到主机上
-v /home/mysql5.7/data:/var/lib/mysql \ #将数据库挂载到主机上
-e MYSQL_ROOT_PASSWORD=123123 \ #设置root用户密码
--name mysql01 mysql:5.7 #别名-镜像
#启动成功之后,使用mysql数据库工具连接我们的容器
#测试成功
#删除容器测试
sudo docker rm -f id
#查看主机目录,数据文件依然存在
匿名具名挂载测试
#匿名挂载
sudo docker run -d -P --name ng01 -v /etc/nginx nginx
#使用volume参数查看
sudo docker volume 参数
create #创建卷
inspect #查看一个卷
ls #列表查看所有卷
prune #删除没有使用的卷
rm #删除一个或多个卷
#查看
$ sudo docker volume ls
DRIVER VOLUME NAME
local 6fd729574455ff389d0ad03dc718021cd18333931ca7d037188f2a0dae16b1a6
local 09e5fcecbe8893172109feffe91fe050d63a326350e6e1a6a887566483b38e4f
#这些volume name很长的自动生成的这些都是匿名挂载的卷
#具名挂载
sudo docker run -d -P --name ng02 -v nginx02:/etc/nginx nginx
#查看参数
$ sudo docker volume ls
DRIVER VOLUME NAME
local 34cfea4d2dcb02372418594b91fc594ad3c1b8d8389a317ddd1c3b1da6c459c7
local b85ad861d79504e18faeb952d939dc6c30381d0643c2b26448c53c44c95c1923
local nginx02
#可以看到我们指定的名字 卷名:容器内目录
#下面查看卷的具体信息,里面有卷的目录
sudo docker volume inspect nginx02