一、Docker四种网络模式

  1. 第一种网络模式host
    host模式: 使用--net=host指定docker使用的网络实际上和宿主机一样,在容器内看到的网卡ip是宿主机上的ip.
bash-3.2# docker run -it --rm --name network_host --net=host new_centos:01 bash
### --rm: 退出后删除该容器
### 宿主机执行ifconfig 与 容器执行ifconfig后进行ip对比,得到容器里的ip信息和宿主机的ip信息一样
bash-3.2 /# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.1.40  netmask 255.255.255.0  broadcast 192.168.1.255inet6 fe80::be5f:f4ff:fe5e:4aad  prefixlen 64  scopeid 0x20<link>ether bc:5f:f4:5e:4a:ad  txqueuelen 0  (Ethernet)RX packets 274360905  bytes 286715259393 (267.0 GiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 136254081  bytes 11227340887 (10.4 GiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
…………………………………………………………………………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………………………………………………………………………
vethe82752b: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet6 fe80::d496:d3ff:feb0:3c93  prefixlen 64  scopeid 0x20<link>ether d6:96:d3:b0:3c:93  txqueuelen 0  (Ethernet)RX packets 7  bytes 558 (558.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 117  bytes 9042 (8.8 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  1. 第二种网络模式container
    container模式: 使用--net=container:container_id/container_name多个容器使用共同的网络,看到的ip是一样的.
bash-3.2# docker exec -it 1e4cf0c7b5dc bash     #进入任意一个容器
1e4cf0c7b5dc# yum -y install net-tools      #安装ifconfig命令
1e4cf0c7b5dc#  ifconfig |grep -A1 "eth0"
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.17.0.19  netmask 255.255.0.0  broadcast 0.0.0.0
bash-3.2# docker run -it --rm --name network_container --net=container:dced5597366d new_centos:01 bash
dced5597366d# ifconfig |grep -A1 "eth0"
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.17.0.19  netmask 255.255.0.0  broadcast 0.0.0.0
### 可以看到,两个容器id、ip都一样.
  1. 第三种网络模式none
    none模式: 使用--net=none, 这种模式下,不会配置任何网络
bash-3.2# docker run -it --rm --name network_none --net=none new_centos:01 bash
c3af5c1d7616# ifconfig |grep -E 'eth0|lo'
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536loop  txqueuelen 0  (Local Loopback)
c3af5c1d7616# ping baidu.com
ping: unknown host baidu.com
### 该模式创建容器后是没有网络的      
  1. 第四种网络模式bridge
    bridge模式: 使用--net=bridge.创建完容器默认为这种网络模式.类似与vmware的nat网络模式.

二、外部访问容器

  1. 进入容器,安装httpd服务
bash-3.2# docker exec -it 8e25 bash
8e2547638bb3# yum -y install httpd
8e2547638bb3# /usr/sbin/httpd       #启动http服务
8e2547638bb3# lsof -i:80
COMMAND PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
httpd   124 root    4u  IPv6 5118010      0t0  TCP *:http (LISTEN)
  1. 把该容器保存为镜像
bash-3.2# docker commit -m "centos_with_httpd" -a "90root" 8e2547638bb3 centos_with_httpd:v1      #容器保存为镜像
bash-3.2# docker images         #查看镜像
REPOSITORY                  TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos_with_httpd           v1                  aa7cc183e588        18 seconds ago      366.6 MB
bash-3.2#  docker run -itd -p 5123:80 centos_with_httpd:v1 bash       #将容器的80端口映射到宿主机的5123端口
bash-3.2# docker exec -it 23ecd12c7a10 bash     #进入容器
23ecd12c7a10# /usr/sbin/httpd           #启动http
23ecd12c7a10# echo "www.90root.com" > /var/www/html/1.html
23ecd12c7a10# curl 127.0.0.1/1.html
www.90root.com
bash-3.2# curl 192.168.1.40:5123/1.html
www.90root.com
### 后者浏览器访问192.168.1.40:5123/1.html

三、容器互联

  1. 安装mysql镜像
bash-3.2# docker run -itd centos-6-x86_minimal bash            #创建容器
bash-3.2# docker exec -it 94b61b9ad0e9 bash
94b61b9ad0e9# yum -y install mysql-server
94b61b9ad0e9# /etc/init.d/mysqld start
  1. 把mysql容器保存为镜像
bash-3.2# docker commit -m "centos_6_with_mysql" -a "90root" 94b61b9ad0e9 centos6_mysql:v1
bash-3.2# docker images
REPOSITORY                            TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos6_mysql                         v1                  0cc0a9a0001a        8 seconds ago       457.1 MB
  1. 以centos6_mysql、centos_with_httpd镜像分别创建两个容器并端口映射
bash-3.2# docker run -itd -p 13306:3306 --name centos6_mysql centos6_mysql:v1 bash     #创建mysql容器.
bash-3.2# docker exec -it centos6_mysql bash
8606d161d004# /etc/init.d/mysqld start      #启动mysql
bash-3.2# docker run -itd -p 10080:80 --name centos6_web --link centos6_mysql:db centos_with_httpd:v1 bash       #创建web容器. --link 容器名:别名
bash-3.2# docker exec -it centos6_web bash
08bd05fd9517# telnet db 3306
Trying 172.17.0.23...
Connected to db.
Escape character is '^]'.
DHost '172.17.0.24' is not allowed to connect to this MySQL serverConnection closed by foreign host.
08bd05fd9517# cat /etc/hosts
172.17.0.23 db 8606d161d004 centos6_mysql

四、配置网桥(centos6)

为了使本地网络中的机器和Docker容器更方便的通信,我们经常会将Docker容器配置到和主机同一网段的需求… 我们只需要将Docker容器和宿主机的网卡桥接起来,再给Docker容器配上IP即可.

  1. 宿主机配置桥接网卡
bash-3.2# cd /etc/sysconfig/network-scripts/
bash-3.2# cp ifcfg-eth0 ifcfg-br0
bash-3.2# vim ifcfg-eth0
DEVICE=eth0
HWADDR=BC:5F:F4:5E:4A:AD
TYPE=Ethernet
UUID=b64d5263-4f16-453b-9971-ab052f101c9e
ONBOOT=yes
NM_CONTROLLED=yes
#BOOTPROTO=static
#IPADDR=192.168.1.40
#NETMASK=255.255.255.0
#GATEWAY=192.168.1.254
#DNS1=192.168.1.254
#DNS2=114.114.114.114
BRIDGE=br0
bash-3.2# vim ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.40
NETMASK=255.255.255.0
GATEWAY=192.168.1.254
DNS1=192.168.1.254
DNS2=114.114.114.114
MTU=1500
bash-3.2# /etc/init.d/network restart
  1. 安装pipework
bash-3.2# git clone https://github.com/jpetazzo/pipework
bash-3.2# cp pipework/pipework /usr/local/bin/
  1. 使用桥接pipework创建一个新容器
bash-3.2# docker run -itd --net=none --name 90root_pipework centos_with_httpd:v1 bash
bash-3.2# rpm -Uvh https://repos.fedorapeople.org/openstack/EOL/openstack-grizzly/epel-6/iproute-2.6.32-130.el6ost.netns.2.x86_64.rpm
bash-3.2# pipework br0 90root_pipework 192.168.1.54/24
bash-3.2# docker exec -it 90root_pipework bash
ac16957506cc# ifconfig |grep -A1 "eth1"
eth1      Link encap:Ethernet  HWaddr 9A:C6:E8:5E:8C:B8inet addr:192.168.1.54  Bcast:192.168.1.255  Mask:255.255.255.0
### ping通外网即可.

转载于:https://www.cnblogs.com/migongci0412/p/5966375.html

7. Docker - 网络管理相关推荐

  1. Docker | Docker技术基础梳理(五) - Docker网络管理

    Docker | Docker技术基础梳理(五) - Docker网络管理 链接: 原文链接 原文链接: https://gitbook.cn/books/5b8f3c471966b44b00d265 ...

  2. docker 指定网卡_Docker | Docker技术基础梳理(五) Docker网络管理

    为什么需要容器的网络管理? 容器的网络默认与宿主机.与其他容器相互隔离,且容器中可以运行一些网络应用,比如nginx.web应用.数据库等,如果需要让外部也可以访问这些容器中运行的网络应用,那么就需要 ...

  3. 容器云系列之Docker网络管理及容器互联

    Docker网络有bridge.host.overlay.macvlan和none五种模式,本文对这几种网络模式进行验证并测试容器间的互联通信. 1.Docker网络管理 Docker有5种网络模式, ...

  4. 【汇智学堂】docker网络管理之二

    1.创建自定义网络 在Docker主机上可以使用docker network create指令来创建网络. 其中 --driver bridge可省略 查看是否成功 查看新建网络的详情 dock ...

  5. 【汇智学堂】docker网络管理之一

    非集群网络模式 bridge(单主机互联) overlay(可跨主机互联) docker network ls bridge网络管理 创建并启动容器. docker run -itd --nam ...

  6. docker常用命令 | game2048网页游戏 | nginx镜像 | 数据卷管理 | docker网络管理 | 构建apache镜像 | Dockerfile常用的命令

    DOCKER https://www.docker.com http://www.runoob.com/docker/docker-command-manual.html docker命令大全 镜像用 ...

  7. 【汇智学堂】docker网络管理之三(容器之间的网络通讯)

    1.创建容器 创建两个使用默认的bridge网络的容器. docker run -itd --name=a1 busybox docker run -itd --name=a2 busybox 创 ...

  8. Docker系统六:Docker网络管理

    Docker网络 I. Docer的通信方式 默认情况下,Docker使用网桥(brige)+ NAT的通信模型. Docker启动时会自动创建网桥Docker0,并配置ip 172.17.0.1/1 ...

  9. Docker网络管理

    Docker之容器网络配置 1.Linux内核实现名称空间的创建 ip netns命令 可以借助ip netns命令来完成对 Network Namespace 的各种操作.ip netns命令来自于 ...

最新文章

  1. 使用Struts2标签遍历集合
  2. 25个面试中最常问的问题和答案
  3. 网站优化之各个页面的关键词密度的把控
  4. Nginx-Nginx配置文件详细说明
  5. odoo12 mysql_odoo12从零开始:二、1)个性化定制odoo12之修改数据库创建页面
  6. 如何修复会话固定漏洞_PHP安全漏洞:会话劫持,跨站点脚本,SQL注入以及如何修复它们...
  7. 美国团购巨头是怎样衰落的
  8. java web初级面试题_Java Web应用程序初学者教程
  9. 还在使用集合类完成这些功能?不妨来看看 Guava 集合类!!!
  10. 基于特征点检测的人脸融合技术
  11. 小白也能搞通UDP通信(88E1111 RGMII 接口)
  12. 小米盒子尚“健在”傍CNTV挑逗广电总局
  13. 无法安装冰点还原_怎样手动ghost还原系统 手动ghost还原系统方法【详解】
  14. 攻城狮还是产品运营?
  15. Python获取指定月份的所有天数
  16. 被割裂的数据思维(古代战争中的应用)
  17. android 广告轮播图片+视频+音频
  18. win10+Ubuntu双系统安装/卸载/扩容/同步时间
  19. steam 无法连接远程计算机,steam联机连不上 steam联不上网
  20. 团队管理24--团建活动

热门文章

  1. 计算机视觉开源库OpenCV梯度之Sobel算子
  2. 服务器响应时延,服务器响应时延
  3. layui 怎么设置点击图片放大_layui实现一个图片点击放大
  4. css3宽度变大动画_不会仪表?太尴尬了。14种动画让你轻松掌握各种流量计工作原理...
  5. Jquery validate验证表单只验证第一个input元素
  6. 046_byte的值在计算机中的表示
  7. 007_Redis的Set数据类型
  8. 分布式锁和mysql事物扣库存_这个是真的厉害,高并发场景下的订单和库存处理方案,讲的很详细了!...
  9. python时间序列因果检验_用python做时间序列预测八:Granger causality test(格兰杰因果检验)...
  10. html手机和电脑显示内容不同,同一个网站,手机端跟电脑端显示不同是怎么实现的?...