容器数据卷
(一)什么是容器数据卷
1、容器卷好处
以后修改只需要在本地修改即可,容器内会自动同步
(二)挂载方式一:使用命令来挂载 -v
docker run -it -v [宿主机目录]:[容器目录] [镜像名字] /bin/bash
1、启动并进入容器
#启动并进入容器
root@ubuntu-xenial:/home/wqx# docker run -it -v /home/ceshi:/home/ centos /bin/bash
#查看本机home目录,已经存在了ceshi目录,说明挂载成功了
2、查看宿主机home目录,已经有了/ceshi目录,说明挂载成功了
root@ubuntu-xenial:/home# ll
total 28
drwxr-xr-x 7 root root 4096 Aug 25 02:11 ./
drwxr-xr-x 26 root root 4096 Aug 24 02:34 ../
drwxr-xr-x 2 root root 4096 Aug 25 02:11 ceshi/
drwxr-xr-x 3 userftp userftp 4096 Aug 17 07:33 userftp/
drwxr-xr-x 4 vagrant vagrant 4096 Aug 25 02:11 vagrant/
drwxr-xr-x 3 root root 4096 Aug 24 07:50 wqx/
3、查看容器信息 docker inspect 0380f85ec7bb
root@ubuntu-xenial:/home# docker inspect 0380f85ec7bb
"Mounts": [
{
"Type": "bind",
"Source": "/home/ceshi", #主机内地址
"Destination": "/home", #docker容器内的地址
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
4、测试
在宿主机/home/ceshi目录下增加一个文件
#在宿主机/home/ceshi目录下增加一个文件
root@ubuntu-xenial:/home/ceshi# touch wqx.php
root@ubuntu-xenial:/home/ceshi# ll
total 8
drwxr-xr-x 2 root root 4096 Aug 25 02:19 ./
drwxr-xr-x 7 root root 4096 Aug 25 02:11 ../
-rw-r--r-- 1 root root 0 Aug 25 02:19 wqx.php
然后在容器内/home目录下查看,也已经出现了同样的一个文件。
[root@0380f85ec7bb home]# ls
wqx.php
[root@0380f85ec7bb home]#
5、Mysql数据持久化
(1)获取镜像
docker pull mysql:5.7
(2)运行容器,并做数据挂载
官方命令:docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
#启动我们自己的mysql
-d # 后台运行
-p # 端口映射
-v # 卷挂载
-e # 环境配置
--name # 容器名字
root@ubuntu-xenial:/home/ceshi# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
通过SQLyog连接容器中的mysql,测试成功,添加一个test数据库,在主机的/home/mysql/data目录下,可以看到已经有test信息
即使将容器删除,主机存放的数据还是存在,就可以实现Mysql的数据持久化了。
6、匿名挂载和具名挂载
(1)匿名挂载
docker run -d -v [容器内路径]
(2)具名挂载
docker run -d -v [卷名]:[容器内路径]
(3)查看卷(volume)信息
docker volume inspect [卷名]
所有的docker容器内的卷,没有指定目录的情况下,都是在/var/lib/docker/volumes/**/_data目录下。
通过具名挂载可以方便的找到我们的一个卷,大多数情况在使用的是具名挂载
(4)拓展
- ro readonly,只读
- rw readwrite,可读可写
docker run -d -P --name nginx -v wqx-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx -v wqx-nginx:/etc/nginx:rw nginx
一旦设置了容器权限,容器对我们挂载出来的内容就有限定了。如果设置了ro权限,就说明这个路径只能通过宿主机来操作,容器内部是无法操作的。
(三)挂载方式二:Dockerfile
Dockerfile就是用来构建dockr镜像的构建文件。
简单写一个dockerfile脚本。
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "---end---"
CMD /bin/bash
里面每一个命令,就是镜像的一层。
通过dockerfile启动容器 docker build -f /home/docker-test-volume/dockerfile -t wqx/centos:1.0 .
root@ubuntu-xenial:/home/docker-test-volume# docker build -f /home/docker-test-volume/dockerfile -t wqx/centos:1.0 .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM centos
---> 300e315adb2f
Step 2/4 : VOLUME ["volume01","volume02"]
---> Running in e8f889920880
Removing intermediate container e8f889920880
---> 51b9e3840f47
Step 3/4 : CMD echo "---end---"
---> Running in cabe2101c3b5
Removing intermediate container cabe2101c3b5
---> e262b693a79a
Step 4/4 : CMD /bin/bash
---> Running in c69bc9ca79ae
Removing intermediate container c69bc9ca79ae
---> 68a74b5c7007
Successfully built 68a74b5c7007
Successfully tagged wqx/centos:1.0
root@ubuntu-xenial:/home/docker-test-volume#
执行完成后,查看镜像
root@ubuntu-xenial:/home/docker-test-volume# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
wqx/centos 1.0 68a74b5c7007 2 minutes ago 209MB
启动自己的镜像
docker run -it wqx/centos /bin/bash