Docker容器数据卷详解(共享数据)

一、数据卷(Data Volumes)

宿主机和容器是两个不同的名称空间,如果想进行连接 需要用ssh,exec和attch也类似于ssh这种方式登录,在企业中ssh这种登陆方式会比较危险,安全漏洞很大,尽量减少ssh这种,杜绝了频繁使用exec,因此使用数据卷的方式把容器内部的文件目录挂载到宿主机指定目录下进行修改,当容器里的文件频繁需要修改时不需要登陆进去,直接使用数据卷方式在宿主机指定的目录下进行修改即可。方便又安全

原理:将容器内部的配置文件目录,挂载到宿主机指定目录下

它可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响到镜像
  • 数据卷默认 会一直存在,即使容器被删除

1.作用

①修改配置文件例如,nginx. conf /usr/local/nginx/ conf/nginx.conf —> /container_ nginx/ conf/nginx. conf
②容器内部产生的日志,如何收集将容器内部存方日志文件的目录挂载到宿主机指定目录下/container_ nginx/ log/access_ 1og/access_ log
③传入变量挂载到宿主机在宿主机上添加变量内容,将变量放入共享目录,在容器中/etc/profile 直接加载就可以
export xxdir=/data/data1/xx.

2.创建数据卷

宿主机目录 /var/www 挂载容器中的 /data1
docker run -it -v /var/www/html:/data1 --name test1 centos:7 /bin/bash

mark

mark

验证:在容器目录下创建新文件,去宿主机上验证是否同步

mark

mark

验证:在宿主机上修改此文件,去容器目录下验证是否同步修改

mark

mark

  • exit 和 stop 两种退出方式不同,返回状态也不同

mark

二、数据卷容器

如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器

数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载

原理:让两个容器实现数据共享

1.新建数据卷容器

docker run -it --name xjj -v /data1 -v /data2 centos:7 /bin/bash 
     注:-v 后面接的共享数据真实存放路径
  • 用容器db1测试数据卷容器是否可用
[root@xjj html]# docker run -it --name db1 --volumes-from xjj centos:7 /bin/bash
[root@3fea8199ee77 /]# ls
anaconda-post.log  data2  home   media  proc  sbin  tmp
bin                dev    lib    mnt    root  srv   usr
data1              etc    lib64  opt    run   sys   var
[root@3fea8199ee77 /]# touch data1/1.txt
[root@3fea8199ee77 /]# touch data2/2.txt

验证:
[root@xjj docker]# docker run -it --name xjj -v /data1 -v /data2 centos:7 /bin/bash 
[root@441165bdb9ed /]# ls /data1
1.txt
[root@441165bdb9ed /]# ls /data2
2.txt

随便创建一个1.txt 2.txt文件就可以查看效果了

效果:上面例子中 db1 通过 xjj 来共享了数据

三、把宿主机的文件传入到容器内部

#linux  复制:
cp 原文件路径 目标文件路径
#容器:
docker cp /opt/abc 容器ID:/opt/abc

四、在宿主机环境执行容器内命令

docker exec -it 容器ID /bin/bash -c 'nginx'
docker exec 容器ID/容器name  执行的命令

五、暴露端口

-p  自定义端口(宿主机端口: 容器内端口)
-P  随机端口 (-P 49153起始   49153到65535 )
docker run -itd -p 333:80 nginx /bin/bash (docker 0)
docker run- itd -P nginx /bin/bash

六、自定义网络固定IP

docker network create --subnet=172.18.0.0/16 mynetwork
docker run - itd --name test2 --het mynetwork --ip 172.18.0. 100 centos: latest /bin/bash

猜你喜欢

转载自blog.csdn.net/weixin_53560205/article/details/121570053