因为容器删除后,数据不会保留。所以采用宿主机数据卷挂载到容器中,可以避免这种情况
Docker提供三种方式将数据从宿主机挂载到容器中
- volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式。
- bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中
- tmpfs:挂载存储在主机系统的内存中,而不会写入主机的文件系统。如果不希望将数据持久存储在任何位置,可以使用tmpfs,同时避免写入容器可写层提高性能。
例子:
创建volume
[root@docker ~]# docker volume create nginx-vol
nginx-vol
[root@docker ~]# docker run -d -v nginx-vol:/usr/share/nginx/html nginx
查看宿主机的挂载路径
- 使用docker inspect #容器id
- 使用docker volume inspect #volume名
如果宿主机的内容修改,容器的内容也会修改
根据上述,继续完成例子
通过docker inspect #容器ID获得IP
重定义宿主机的主页
注意:如果容器删除,然后又使用该数据卷,宿主机数据卷内容不会被覆盖,但容器的文件会保持跟宿主机的数据卷内容一致。大致命令如下。
shell>docker ps
shell>docker stop #容器id
shell>docker rm -f #容器id
shell>docker run -d -v nginx-vol:/usr/share/nginx/html nginx
shell>docker inspect #容器id 得到对应的IP
shell>curl #上命令得到的ip
管理volume命令
创建:docker volume create #volume_name
列表:docker volume ls
明细:docker volume inspect #volume_name
清理挂卷volume
停止容器:docker stop #containerid
移除容器: docker rm #containerid
清除挂卷:docker volume rm #volume_name
注意:如果没有创建卷,会自动帮忙创建
Bind Mounts 一定要绝对路径
shell>docker run -d -v $PWD/wwwroot:/usr/share/nginx/html nginx
shell>docker ps
shell>docker inspect #容器id 获得id
shell>curl #ip 会提示403错误,因为wwwroot是新建的,没有index.html
shell>echo 222 >> /wwwroot/index.html
shell>curl #ip ##这时就会得到内容
注意:如果挂载的是空目录,会清空容器的原有配置,导致容器运行不成功。例如安装RocketMq的时候。
下面我们讲解docker的网络