docker数据卷Volumes
一、挂载共享目录:数据卷(Volumes)、本地目录(Bind mounts)
volume :需要注意的是,与bind mount不同的是,如果volume是空的而container中的目录有内容,那么docker会将container目录中的内容拷贝到volume中,但是如果volume中已经有内容,则会将container中的目录覆盖。
bind mount :不管host目录是否有值,都要覆盖容器映射的目录
1、数据卷
数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特性:
- 数据卷可以在容器之间共享和重用
- 对数据卷的修改会立马生效
- 对数据卷的更新不会影响镜像
- 数据卷默认会一直存在,即使容器被删除
注意:数据卷的使用,类似于Linux下目录的使用或文件进行mount,镜像中的被指定为挂载点的目录中的文件会隐藏掉,能显示看的是挂载的数据卷。
Docker中提供了两种挂载方式,-v 或--mount,推荐使用 --mount,因为--mount 更简洁易懂。
创建一个数据卷并查看:
# docker volume create nginx3 # docker volume ls DRIVER VOLUME NAME local nginx3 # docker volume inspect nginx3 [ { "CreatedAt": "2020-08-18T14:22:26+08:00", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/nginx3/_data", "Name": "nginx3", "Options": null, "Scope": "local" } ]
docker run 的时候,使用--mount 来将数据卷挂载到容器,在一次 docker run 中可以挂载多个数据卷。
docker run --name test-web -d -p 8080:8080 -v my-volume:/webapp test-web:latest docker run --name test-web -d -p 8080:8080 --mount source=my-volume,target=/webapp test-web:latest
2、挂载主机目录(Bind mounts)
docker run --name test-web -d -p 8080:8080 --mount type=bind,source=/src/webapp,target=/opt/webapp test-web docker run --name nginx-web -d -p 80:80 -v /usr/local/tomcat/webapps/:/usr/local/nginx/html nginx:latest
注:
1、-v参数 后面如果跟的不是本地的绝对路径,而只是一个目录名,docker会默认创建一个volume数据卷 。
如果 -v 参数是一个本地的绝对路径,则会挂载本地目录到容器里面。
2、docker volume 的默认路径在 /var/lib/docker/volumes/
3、使用 -v 参数时如果本地目录不存在,Docker会自动创建。使用 --mount 参数时,如果本地目录不存在,Docker会报错
3、确认 volume 挂载
$ docker inspect xxxx --format "{{ .Mounts }}" [{volume pre_install_nvidia-docker /mnt/data/docker-data/volumes/pre_install_nvidia-docker/_data /opt local z true }]
二、将war包放入容器
1、# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest 882487b8be1d 3 weeks ago 507MB
2、# docker run -p 8080:8080 --name test_tomcat --restart=always -d tomcat:latest
85da0208e1b1c8179849b1a383911f982eddba703dbc5c1cefbed9ce4f87ac94
3、# docker cp 网页.war 85d:/usr/local/tomcat/webapps/
4、# docker exec -it 85d bash (进入容器,正常的war包会被自动解压)
root@85da0208e1b1:/usr/local/tomcat# ls
BUILDING.txt LICENSE README.md RUNNING.txt conf lib native-jni-lib webapps
CONTRIBUTING.md NOTICE RELEASE-NOTES bin include logs temp work
5、若要断开与容器的连接,并且关闭容器:exit
如果只想断开和容器的连接而不关闭容器:快捷键:ctrl+p+q
三、docker命令
docker run —name="centos_kch" -itd centos tail -f /etc/hosts (tail -f /etc/hosts) 的作用夯住容器,pid=1的进程要让他保持着,防止容器退出
3、docker volume使用NFS存储
https://www.cnblogs.com/elvi/p/8463673.html 有待整理