网络基础

Docker Network

单机网络

Bridge Network
Host Network
None Network

多机网络:overlay Network

网络的分层

公有IP和私有IP

Public IP:互联网上的唯一标识,可以访问internet

Private IP:不可在互联网上使用,仅供机构内部使用

A类10.0.0.0--10.255.255.255(10.0.0.0/8)

B类172.16.0.0--172.31.255.255(172.16.0.0/12)

C类192.168.0.0--192.168.255.255(192.168.0.0/16)

网络地址转换NAT

Ping和telnet

Ping(ICMP):验证IP的可达性

Linux网络命名空间

Linux Network Namespace

查看当前网络命名空间
[root@docker-node1 vagrant]# ip netns list
添加网络命名空间
[root@docker-node1 vagrant]# ip netns add test1
[root@docker-node1 vagrant]# ip netns add test2
[root@docker-node1 vagrant]# ip netns list
test2
test1
[root@docker-node1 vagrant]# sudo ip netns exec test1 ip link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
[root@docker-node1 vagrant]# sudo ip netns exec test1 ip link set dev lo up
[root@docker-node1 vagrant]# sudo ip netns exec test1 ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 [root@docker-node2 vagrant]# ip netns exec test1 ip link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
[root@docker-node2 vagrant]# sudo ip link set veth-test1 netns test1
[root@docker-node2 vagrant]# ip netns exec test1 ip link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
6: veth-test1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether 36:2d:2a:23:8e:af brd ff:ff:ff:ff:ff:ff

添加网络命名空间

添加了一个test2的网络命名空间
[root@docker-node2 vagrant]# ip netns add test2
绑定到veth-test2的设备
[root@docker-node2 vagrant]# sudo ip link set veth-test2 netns test2
查看命名空间的ip link
[root@docker-node2 vagrant]# ip netns exec test2 ip link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
5: veth-test2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether 2e:00:77:8a:33:57 brd ff:ff:ff:ff:ff:ff 给网络命名空间添加ip并绑定
sudo ip netns exec test1 ip addr add 192.168.1.1/24 dev veth-testl
sudo ip netns exec test2 ip addr add 192.168.1.2/24 dev veth-test2 将两个网络命名空间绑定的ip设备启动
sudo ip netns exec test1 ip link set dev veth-testl up
sudo ip netns exec test2 ip link set dev veth-test2 up 查看完整的命名空间ip信息
[root@docker-node2 vagrant]# ip netns exec test1 ip a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
6: veth-testl: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 36:2d:2a:23:8e:af brd ff:ff:ff:ff:ff:ff
inet 192.168.1.1/24 scope global veth-testl
valid_lft forever preferred_lft forever
inet6 fe80::342d:2aff:fe23:8eaf/64 scope link
valid_lft forever preferred_lft forever
[root@docker-node2 vagrant]# ip netns exec test2 ip a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
5: veth-test2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 2e:00:77:8a:33:57 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.2/24 scope global veth-test2
valid_lft forever preferred_lft forever
inet6 fe80::2c00:77ff:fe8a:3357/64 scope link
valid_lft forever preferred_lft forever 测试命名空间的 互通性 ping
[root@docker-node2 vagrant]# ip netns exec test2 ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.050 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.110 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.202 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=0.052 ms
64 bytes from 192.168.1.1: icmp_seq=5 ttl=64 time=0.040 ms

Docker Bridge0详解

每个容器之间有独立的命名空间(ip),相互之间可以ping 通,

Docker Bridge0 在宿主机上桥接出来的一块命名空间,通常为 172.17.0.2, 里面容器的ip一般在该网段随机分布。除非容器暴露了外面的,否则外面宿主机不能访问

[root@docker-node2 ~]# sudo docker run -d --name test1 busybox /bin/sh -c "while true;do sleep 3600;done"
8f7cbad560db6d4c604395f3ee16c15d6fc4073e3010134e2520aed780b6198d

[root@docker-node2 ~]# docker exec test1 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
9: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever

查看网桥
brctl show

新创建一个容器,新增了一个命名空间

Bridge Network 网桥

查看网桥

新创建一个容器后,会在网桥上有一个新的接口

通信

在docker0网桥上面创建的容器关联

[vagrantedocker-node1~]# sudo docker run -d --name test2 --link test1 busybox /bin/sh -c "while true;do
sleep 3600;done"
test2 link test1 容器test2 link 容器test1
2 --> 1 ping 通
1 --> 2 ping 不通 创建网桥
[root@docker-node2 ~]# docker network create -d bridge my-bridge
d7b1a39ddd6cd0fff8a7f2ff57a3391e9ac68f8bf09b05460f7d1200c712bc78
[root@docker-node2 ~]# brctl show
bridge name bridge id STP enabled interfaces
br-d7b1a39ddd6c 8000.0242ed73f4fa no
docker0 8000.02420e28dc52 no veth8bb0084
vethced44cb


[root@docker-node2 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
0e7556320fdd bridge bridge local
0b32df326904 host host local
d7b1a39ddd6c my-bridge bridge local
e2db49527111 none null local


[root@docker-node2 ~]# sudo docker run -d --name test3 --network my-bridge busybox /bin/sh -c "while true;do sleep 3600;done"
7eb76c6ca9f6123811fc75cae03e571f669b308c2b6bad0cfbdd598508629f0d
[root@docker-node2 ~]# brctl show
bridge name bridge id STP enabled interfaces
br-d7b1a39ddd6c 8000.0242ed73f4fa no vethee72a47
docker0 8000.02420e28dc52 no veth8bb0084
vethced44cb

docker network inspect my-bridge

sudo docker run -d --name test3 --network my-bridge busybox /bin/sh -c "while true;do sleep 3600;done"

test2 和 test 3 在同一个网桥my-bridge (自己创建的),可以通过名称ping

docker inspect my-bridge

总结

docker network connect my-bridge test1

tes2和test 1在docker 默认的bridge上

但是互相只能通过ip来ping通

不能通过名字

自己创建的bridge 能够解决互相ip,名字都ping通

容器的端口映射

docker run --name web -d -p 80:80 nginx

Container Port Map 端口映射

容器网络之host和none

1. none 没有ip,只有宿主可以访问

[vagrant@docker-node1~]$ sudo docker run -d --name test1 --network none busybox /bin/sh -c "while true;do sleep 3600;done"
da2143722efb01827070a4aa5ce52857f9269f5ed20f65f4cb39977d39141913

谁都不能访问,只能 sudo docker exec -it test1 /bin/sh

2. host 共享主机的网络

[vagrant@docker-node1 ~]$ sudo docker run -d --name test1 --network host busybox /bin/sh -c "while true;do sleep 3600;done"
18e175e07b5e15c941f848fa5d4105357d70dd0f03f8bdb55791c0997875074b

容器内部网络跟宿主机一样

s4 Docker 网络1的更多相关文章

  1. s4 docker 网络2进阶

    多容器复杂应用的部署 基于 flask容器,链接外部另一个redis 容器 docker pull redis sudo docker run -d --name redis redis # redi ...

  2. 理解Docker(5):Docker 网络

    本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  3. docker网络配置方法总结

    docker启动时,会在宿主主机上创建一个名为docker0的虚拟网络接口,默认选择172.17.42.1/16,一个16位的子网掩码给容器提供了65534个IP地址.docker0只是一个在绑定到这 ...

  4. 【转】Docker网络详解及pipework源码解读与实践

    好文必转 原文地址: http://www.infoq.com/cn/articles/docker-network-and-pipework-open-source-explanation-prac ...

  5. Docker网络模式

    [编者的话] 本文是<Docker网络及服务发现>一书的一个章节,介绍了搭建Docker单主机网络的基础内容.关于Docker网络的更多内容,包括多主机的网络,请参考该书的其他章节. @C ...

  6. docker网络-如何让外部网络访问容器资源

    docker网络-如何让外部网络访问容器资源 安装httpd 服务: docker:/root# docker exec -it f63b2633d146 bash bash-4.1# yum ins ...

  7. docker网络解析

    Docker概念和默认网络 什么是Docker网络呢?总的来说,网络中的容器们可以相互通信,网络外的又访问不了这些容器.具体来说,在一个网络中,它是一个容器的集合,在这个概念里面的一个容器,它会通过容 ...

  8. docker网络访问(三)

    docker网络访问 ifconfig查看网卡,启动docker的时候,docker会帮我们创建一个docker0的网桥. 1.随机映射 docker run -P 2.指定映射 -p hostPor ...

  9. [Docker网络]模拟一台交换机的拓扑

    [Docker网络]模拟一台交换机的拓扑 本例主要对Docker网络进行实际运用. 背景介绍 一台虚拟机如何模拟成一台多端口交换机分别连接多台虚拟机? bridge网桥技术 实验准备 docker d ...

随机推荐

  1. Linux背背背(2)

    目录: 1.简单命令 2.目录切换命令 3.扩展命令 简单命令 ls 语法1:#ls [路径]            表示列出指定路径下的文件夹和文件的名字,如果路径没有指定则列出当前路径下的 语法2 ...

  2. docker 在window10下的安装

    在win10下安装docker 打开下载页面 https://store.docker.com/editions/community/docker-ce-desktop-windows 打开控制面板 ...

  3. 异常处理,MD5

    异常处理. try except raise try: 代码 except 异常类: 除了错, 如何处理异常 except 异常类: 除了错, 如何处理异常 except 异常类: 除了错, 如何处理 ...

  4. WPF dev 获取gridControl筛选后的数据

    GridControl.DataController.GetAllFilteredAndSortedRows();

  5. for...in的改进版for...of

    for...in 用起来似乎还不错,为什么又弄个 for...of 呢? 来看个例子: 'user strict' var arr = [12,13,14,15,16]; for(var i in a ...

  6. java.lang.NoClassDefFoundError: org/apache/tomcat/util/res/StringManager

    一个比较老的web项目,  IDEA 导入后不能用,  出现了各种问题, 但是, 别人用eclipse 导入就不会有问题,  我折腾了半天, 还是各种问题,  真是郁闷了.  哎, 承认很难配置吧, ...

  7. Optional 的基本用法

    参考: https://www.cnblogs.com/xingzc/p/5778090.html http://www.runoob.com/java/java8-optional-class.ht ...

  8. 《面向对象程序设计(java)》第七周学习总结

    1.实验目的与要求 (1)进一步理解4个成员访问权限修饰符的用途: (2)掌握Object类的常用API用法: (3)掌握ArrayList类用法与常用API: (4)掌握枚举类使用方法: (5)结合 ...

  9. 【转】修改mysql数据库的用户名和密码

    修改mysql数据库的用户名和密码 更改密码 mysql -u root -p Enter password:*** mysql>use mysql; 选择数据库 Database change ...

  10. leetcode300

    本题使用回溯法,深度优先搜索.使用隐式条件来进行加速. public class Solution { ; int[] x; Dictionary<int, int> dic = new ...