设为首页 收藏本站
查看: 1390|回复: 0

[经验分享] Docker网络和存储

[复制链接]

尚未签到

发表于 2017-11-16 22:40:36 | 显示全部楼层 |阅读模式
  本节内容:


  • Docker网络访问
  • 端口映射
  • 数据管理

一、Docker网络访问
  1. docker自带的网络


  • docker network ls:列出当前docker中已有的网络
  • docker network inspect:查看网络详情,比如查看网络中有哪些容器
  • docker run --network=<NETWORK>:指定运行容器时使用哪个网络
  2. host网络
  容器的网络接口跟主机一样。
  3. none网络
  除了lo接口外,容器没有任何其他网络接口。
  4. bridge网络
  这是新建容器时默认使用的网络,也是使用得最多的网络。网络中的所有容器可以通过IP互相访问。
  bridge网络通过网络接口docker0跟主机桥接,可以在主机上通过ifconfig docker0查看到该网络接口的信息。
DSC0000.png

DSC0001.png


二、端口映射
  docker使用端口映射来让容器里面某一个端口对外。一种是随机映射,一种是指定端口映射。
  1. 随机映射



docker run -P
-P参数 随机映射端口。随机端口的好处是不会冲突。
  举个例子:



[iyunv@node1 ~]# docker pull nginx
[iyunv@node1 ~]# docker run -d -P nginx
DSC0002.png

DSC0003.png

  可以访问Docker日志:



[iyunv@node1 ~]# docker logs 1822a2ea3ff3
172.16.4.81 - - [22/Aug/2017:09:20:25 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36" "-"
2017/08/22 09:20:25 [error] 5#5: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 172.16.4.81, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "172.16.7.151:32768", referrer: "http://172.16.7.151:32768/"
172.16.4.81 - - [22/Aug/2017:09:20:25 +0000] "GET /favicon.ico HTTP/1.1" 404 571 "http://172.16.7.151:32768/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36" "-"
  2. 指定端口映射



docker run -p hostPort:containerPort
docker run -p ip:hostPort:containerPort
docker run -p ip::containerPort
docker run -p hostPort:containerPort:udp
    -p 指定端口映射,前面的是主机端口,后面的是容器端口。


[iyunv@node1 ~]# docker run -d -p 81:80 nginx
DSC0004.png


三、数据管理
  两种方式:


  • 数据卷
  • 数据卷容器
  1. 数据卷
  启动一个容器,把宿主机的某个目录挂载到容器目录上。


  • -v /data
  • -v src:dst 指定一个目录挂载进容器。
  【示例1】:未指定宿主机目录挂载



[iyunv@node1 ~]# docker run -it --name volume-test1 -v /data centos   
[iyunv@5d485979254b /]# ls -l /data
total 0
  这个容器里的/data 肯定在宿主机的某个位置。打开一个新的终端,查看这个位置:



[iyunv@node1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
5d485979254b        centos              "/bin/bash"              2 minutes ago       Up 2 minutes                                volume-test1                                 test
[iyunv@node1 ~]# docker inspect 5d485979254b
DSC0005.png

  在宿主机上的目录中创建文件:



[iyunv@node1 ~]# cd /var/lib/docker/volumes/7f37e83849f079275545b7d1f3381903795e946d113e1c43ff24fc1a7717e00f/_data
[iyunv@node1 _data]# ls -l
total 0
[iyunv@node1 _data]# touch test.txt
  回到容器中,查看/data目录下是否有刚才创建的文件:



[iyunv@5d485979254b /]# ls -l /data
-rw-r--r--. 1 root root 0 Aug 23 02:07 test.txt
  【示例2】:指定宿主机目录挂载



[iyunv@node1 ~]# docker run -it -v /opt:/opt centos
[iyunv@850031902bb7 /]# ls /opt/
ansible_playbooks  rh
[iyunv@850031902bb7 /]# exit
exit
  宿主机的/opt:



[iyunv@node1 ~]# ls /opt
ansible_playbooks  rh
  挂载的时候可以指定权限:



[iyunv@node1 ~]# docker run -it -v /opt:/opt:rw centos
rw: 读写
ro: 只读
  挂载单个文件到容器:



[iyunv@node1 ~]# docker run -it -v ~/.bash_history:/.bash_history centos
  2. 数据卷容器



--volumes-from  让一个容器访问另外一个容器的卷
  【示例3】:创建一个容器作为数据卷,启动其他容器访问这个容器的卷。



[iyunv@node1 ~]# docker run -it --name nfs -v /data centos /bin/bash
[iyunv@72bb5caa54db /]#
  Ctrl+P Ctrl +Q退出交互式容器的bash,这样容器就会在后台运行。



[iyunv@node1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
72bb5caa54db        centos              "/bin/bash"              37 seconds ago      Up 36 seconds                            nfs
[iyunv@node1 ~]# docker inspect 72bb5caa54db
[iyunv@node1 ~]# cd /var/lib/docker/volumes/8f1e1da837d5d86f79ac14e5d57c0e47243e3c68d5ca822d4f7a498386c07a59/_data
[iyunv@node1 _data]# touch test2.txt
  启动其他容器,访问这个容器的卷:



[iyunv@node1 _data]# docker run -it --name test1 --volumes-from nfs centos
[iyunv@9097c1af8e86 /]# ls /data/
test2.txt
[iyunv@9097c1af8e86 /]#
  这个数据卷容器可以用来作收容器间数据共享,哪怕这个数据卷容器nfs停了,依然可以通过其在宿主机上真实的目录访问里面的数据。这个数据卷容器创建后可以什么都不干,直接关闭,其他容器挂载过来。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-407744-1-1.html 上篇帖子: Linux CentOS7.0 (04)systemctl vs chkconfig、service 下篇帖子: 进程间通信——管道通信
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表