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会报错

     4、Docker挂载主机目录的默认权限是读写,用户也可以通过增加 readonly 指定为只读
 

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    有待整理

posted @ 2019-11-14 21:06  凡人半睁眼  阅读(561)  评论(0编辑  收藏  举报