Docker 网络类型

前言

a. 本文主要为 Docker的视频教程 笔记。

b. 环境为 CentOS 7.0 云服务器

c. 上一篇:docker-compose 的使用和负载均衡的初探

1. None:不为容器配置任何网络功能

创建容器时指定:--net=none,容器将无法访问网络

2. Bridge:Docker 的 NAT 网络模型 (默认)

启动一个容器,并查看其详细信息:

[root@VM_0_2_centos ~]# docker run -it -d centos_with_nettool

4861cdf313bcca909b3009a86c57867f78c83aaa134fb16d6b487d7f5bed3196

[root@VM_0_2_centos ~]# docker inspect 4861cdf313bcca909b300

......

        "Networks": {

            "bridge": {

                "IPAMConfig": null,

                "Links": null,

                "Aliases": null,

                "NetworkID": "cb843ba162ad6185bb3c646d4a80dbff14bd223893231dfe3c6a7c252f0132e5",

                "EndpointID": "c8d5d5133d789058b89ea6294cb2448dcbf4d7bde2144a9c0206ae1eb3a3c230",

                "Gateway": "172.17.0.1",

                "IPAddress": "172.17.0.2",

                "IPPrefixLen": 16,

                "IPv6Gateway": "",

                "GlobalIPv6Address": "",

                "GlobalIPv6PrefixLen": 0,

                "MacAddress": "02:42:ac:11:00:02",

                "DriverOpts": null

            }

        }

......

可以看到 Docker 创建了一个网关地址为 172.17.0.1 的网络

查看所有网络,发现我们新建的容器使用的正是 bridge 类型的网络(ID 都为 cb843ba162ad6185bb3c6...):

[root@VM_0_2_centos ~]# docker network ls --no-trunc

NETWORK ID NAME DRIVER SCOPE

cb843ba162ad6185bb3c646d4a80dbff14bd223893231dfe3c6a7c252f0132e5 bridge bridge local

847bfe624f2b6db706b1d3527346c975537c4c9776ab1e22a1715613fbb458bf host host local

c4f5ad4d49d30b79d7f9e6ffda48522d0f405c18336a7d35114d6238d2c08bfa none null local

进入容器后,查看ip地址确实为 172.17.0.2,在容器中使用 ping 命令,可以 ping 通外网

[root@4861cdf313bc /]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255

ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)

RX packets 2078 bytes 11123467 (10.6 MiB)

RX errors 0 dropped 0 overruns 0 frame 0

TX packets 1368 bytes 92785 (90.6 KiB)

TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536

inet 127.0.0.1 netmask 255.0.0.0

loop txqueuelen 1000 (Local Loopback)

RX packets 0 bytes 0 (0.0 B)

RX errors 0 dropped 0 overruns 0 frame 0

TX packets 0 bytes 0 (0.0 B)

TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@4861cdf313bc /]# ping 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

64 bytes from 8.8.8.8: icmp_seq=2 ttl=110 time=41.9 ms

64 bytes from 8.8.8.8: icmp_seq=3 ttl=110 time=41.8 ms

64 bytes from 8.8.8.8: icmp_seq=4 ttl=110 time=41.5 ms

^C

--- 8.8.8.8 ping statistics ---

4 packets transmitted, 3 received, 25% packet loss, time 3003ms

rtt min/avg/max/mdev = 41.581/41.813/41.974/0.237 ms

在宿主机中查看网卡,发现 Docker 为我们创建了一块名为 docker0,地址为 172.0.0.1 的虚拟的网卡,以进行网络地址转换(NAT),因此容器可以访问外网

[root@VM_0_2_centos ~]# ifconfig

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255

ether 02:42:12:a1:91:2f txqueuelen 0 (Ethernet)

RX packets 575067 bytes 46549887 (44.3 MiB)

RX errors 0 dropped 0 overruns 0 frame 0

TX packets 638280 bytes 2075407385 (1.9 GiB)

TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

inet 172.21.0.2 netmask 255.255.240.0 broadcast 172.21.15.255

需要注意的是,Bridge 的网络和名为 docker0 的网卡没有因为容器的删除而被 Docker 删除,它们会一直存在

3. Host:与宿主机共享 Network Namespace,性能最高

使用 --network=host 启动一个容器,并进入该容器:

[root@VM_0_2_centos ~]# docker run -it -d --network=host centos_with_nettool

e034bcabdad0ebdd13af8d91c0bab438bf4817788cb6e889aa0937078a3188b8

[root@VM_0_2_centos ~]# docker exec -it e034bcabdad0 /bin/bash

[root@VM_0_2_centos /]# hostname

VM_0_2_centos

[root@VM_0_2_centos /]#

可以看到此时容器的主机名和宿主机的主机名一致,网络也与宿主机的网络一致(ifconfig命令结果一致)。因此如果在 Bridge 模式时原镜像需要将端口映射到宿主机,在使用 Host 模式时无需再进行端口映射(同时也不能与宿主机已有端口冲突)

4. Container:与另一个运行中的容器共享 Network Namespace,

先启动一个容器后,再使用 --network=container:<containerID> 启动另一个容器,并进入第二个容器:

[root@VM_0_2_centos ~]# docker run -it -d centos_with_nettool

ca5daf0d21d9fc9b0f8f9eeb687d47245b01dea8c63231cc3604ad801714ae88

[root@VM_0_2_centos ~]# docker run -it -d --network=container:ca5daf0d21d9fc9b0f8 centos_with_nettool

cf32c9b69f2aa51706b0cd23a4ac98657ecba60920c7dcb62f0751d435732974

分别进入两个容器中查看:

[root@ca5daf0d21d9 /]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255

ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)

[root@cf32c9b69f2a /]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255

ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)

二者的网络一致!

在宿主机查看两个容器的网络情况:

[root@VM_0_2_centos ~]# docker inspect ca5daf0d21d9fc9b0f8 | grep -i network

             "NetworkMode": "default",

        "NetworkSettings": {

             "Networks": {

             "NetworkID": "cb843ba162ad6185bb3c646d4a80dbff14bd223893231dfe3c6a7c252f0132e5",

[root@VM_0_2_centos ~]# docker inspect cf32c9b69f2aa51706b | grep -i network

             "NetworkMode": "container:ca5daf0d21d9fc9b0f8f9eeb687d47245b01dea8c63231cc3604ad801714ae88",

         "NetworkSettings": {

             "Networks": {}

可以看到后来的容器完全使用第一个容器的网络,自身网络信息为空

Docker 网络类型的更多相关文章

  1. docker网络类型访问原理

    • bridge –net=bridge 默认网络,Docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中. • host –net=host 容器不会获得一个独立的netw ...

  2. docker网络

    docker网络   Docker 允许通过外部访问容器或容器互联的方式来提供网络服务. 端口映射允许外部访问容器 --link 容器互联 容器桥接网络 .通过--link容器通信,给test2添加一 ...

  3. 16.2,docker网络

      Docker 允许通过外部访问容器或容器互联的方式来提供网络服务. 端口映射允许外部访问容器 --link 容器互联 容器桥接网络 .通过--link容器通信,给test2添加一个hosts解析记 ...

  4. 037.集群网络-Docker网络实现

    一 Docker网络 1.1 Docker网络类型 标准的Docker支持以下4类网络模式: host模式:使用--net=host指定. container模式:使用--net=container: ...

  5. 五、docker网络

    一.Docker 网络 docker网络主要是解决容器联网问题,也是我们使用容器中最重要的一个环节,如果容器没有网络则无法向网络中提供服务. 网络管理命令:docker network [root@z ...

  6. Docker:容器的四种网络类型 [十三]

    一.None类型 简介:不为容器配置任何网络功能,--net=none 1.创建容器 docker run -it --network none busubox:latest 2.功能测试 [root ...

  7. docker单机网络类型

    docker单机网络类型概述 Docker 安装时会自动在 host 上创建三种网络  分别为 bridge    host   none .   可用 docker network ls 命令查看 ...

  8. Docker的网络类型

    四种网络类型: None:不为容器配置任何网络功能,--net=noneContainer:与另一个运行中的容器共享Network Namespace,--net=container:containe ...

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

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

随机推荐

  1. 三年Android开发,竟只会增删改查,被面试官一顿怼!

    最近看到某公司面试官发的这样一个帖子: 我面试了一个有三年Android开发经验的小伙子,也是我有史以来给别人面试时间最短的一次,不到十分钟就结束了,原因很简单,底子太差只会curd,很多技术性的问题 ...

  2. Docker部署Sql Server 2019实践

    1. 拉取SqlServer2019镜像 sudo docker pull mcr.microsoft.com/mssql/server:2019-latest 2. 创建容器+挂载: sudo do ...

  3. Linux C中strcpy , strncpy , strlcpy 的区别

    strcpy ,strncpy ,strlcpy的用法 好多人已经知道利用strncpy替代strcpy来防止缓冲区越界. 但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式. 1. s ...

  4. 十分钟带你了解CANN应用开发全流程

    摘要:CANN作为昇腾AI处理器的发动机,支持业界多种主流的AI框架,包括MindSpore.TensorFlow.Pytorch.Caffe等,并提供1200多个基础算子. 2021年7月8日,第四 ...

  5. MySQL学习07(规范化数据库设计)

    规范化数据库设计 当数据库比较复杂时我们需要设计数据库 糟糕的数据库设计 : 数据冗余,存储空间浪费 数据更新和插入的异常 程序性能差 良好的数据库设计 : 节省数据的存储空间 能够保证数据的完整性 ...

  6. Nmap 简单功能介绍/TCP Header/常见端口

    Nmap:Network Mapper,网络扫描和嗅探的工具包 基本功能有3个: 1.扫描主机端口,嗅探所提供的网络服务 2.探测一组主机是否在线 3.推断主机所用的操作系统,到达主机经过的路由,系统 ...

  7. bluecms安装错误一记

    菜鸡兴致勃勃下载了bluecms1.6准备大干一番 环境 phpstudy mysql 5.7.26 apache 2.4.39 php 7.3.4 结果安装第四步发现个这个问题   开始还以为自己这 ...

  8. Dapps-是一个跨平台的应用服务商店

    简介 Dapps 是一个跨平台的应用商店,包含众多软件,基于docker dapps是什么? 它是一个应用程序商店,包含丰富的软件,因为基于docker,使你本机电脑有云开发的效果. 一键安装程序:多 ...

  9. adobe cc 系列产品更改默认安装路径方法

    通过Adobe Creative Cloud 修改 1.在开始菜单中找到图下程序点开,并进行如下操作: 2.点击Apps位置 等待加载出软件,如图下所示. 点击右上角图标,会弹出以下窗口,点击首选项 ...

  10. 8、二进制安装K8s之部署CIN网络

    二进制安装K8s之部署CIN网络 部署CIN网络可以使用flannel或者calico,这里介绍使用calico ecd 方式部署. 1.下载calico二进制安装包 创建所需目录 mkdir -p ...