docker4种网络

基于docker run创建容器时,可以使用--net选项指定容器的网络模式:Docker默认有以下4种网络模式:

  1. host模式,使用--net=host指定
  2. container模式,使用--net=container:NAME_or_ID指定
  3. none模式,使用--net=none指定
  4. bridge模式,使用--net=bridge指定,默认设置

bridge模式网络拓扑图如下:

查看插在docker0桥上的网卡名称

[root@jiaqi211 ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 .0242069be7d6 no veth11b0170
[root@jiaqi211 ~]# ip a
....
: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc noqueue state UP group default
link/ether :::9b:e7:d6 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/ brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80:::6ff:fe9b:e7d6/ scope link
valid_lft forever preferred_lft forever
: veth11b0170@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc noqueue master docker0 state UP group default
link/ether ae:fd::2a:9a: brd ff:ff:ff:ff:ff:ff link-netnsid
inet6 fe80::acfd:8ff:fe2a:9a90/ scope link
valid_lft forever preferred_lft forever

host模式网络拓扑如下:

host网络在创建容器的时候由于用的就是宿主机的物理网卡,因此不需要指定端口就可以访问

[root@jiaqi211 ~]# docker run --name mynginx --network=host -itd nginx
c8bf2d1d7648ffaf4c0a9f2a2b258ddbb0f5e26b50978ed63d7442ee97cf42e7

验证

container模式网络拓扑图如下:

又称之为联盟式网络,即新创建出来的容器不会创建自己的网卡和端口而是和某个容器共享一个虚拟网络接口

示例,我们先创建一个busybox的容器,然后在创建一个nginx容器共享busybox的网卡

[root@jiaqi211 ~]# docker run --name mybusy -it -p  -p  -d busybox
4231a817446956b3fe09cb1a7a2da353bd126ddb6006e6704b5e069524c0dd4f
[root@jiaqi211 ~]# docker run --name mynginx -itd --network=container:mybusy nginx
ff90c89ceff37f7a954bfd2924f27d5c735c2d1821d0e8d7a1d8348697a3af68

查看docker0桥上只有一张张网卡,并没有新创建

[root@jiaqi211 ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 .0242069be7d6 no vethe2b04bc

查看映射端口

[root@jiaqi211 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e4d43c36f4cc nginx "nginx -g 'daemon of…" seconds ago Up seconds mynginx
4231a8174469 busybox "sh" minutes ago Up minutes 0.0.0.0:->/tcp, 0.0.0.0:->/tcp mybusy

验证,浏览器访问nginx服务

none网络模式

创建一个none网络的容器

[root@jiaqi211 ~]# docker run --name myos -itd --net=none busybox
8ae69d623339f8df03ce1d241204381121178a70771337cdc270167c6935826b

我们可以发现,确实只有一个lo接口,并没有其他网卡

[root@jiaqi211 ~]# docker exec -it myos /bin/sh  / # ifconfig -a
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (0.0 B) TX bytes: (0.0 B)

端口映射

这里要注意的一点是,如果是nat网桥必须开启核心转发功能

[root@jiaqi211 ~]# cat /proc/sys/net/ipv4/ip_forward

第一种 随机映射

docker run -p PORT 

示例,我们把容器的80端口随机映射到宿主机上,我们可以看到映射到的宿主机端口为32769

[root@jiaqi211 ~]# docker run --name mynginx -p  -itd --rm nginx
5bea3c77aaee1c4a3d7e7617838697a3745b9ae3e74e7088e30ad86fe7cdbecc
[root@jiaqi211 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5bea3c77aaee nginx "nginx -g 'daemon of…" seconds ago Up seconds 0.0.0.0:32769->80/tcp mynginx

我们来验证一下,打开浏览器HOST:PORT

第二种 指定映射

-p hostPort:containerPort
-p ip:hostPort:containerPort
-p ip::containerPort
-p hostPort

我们也可以指定映射,比如,映射宿主机的80端口对应容器的80端口

[root@jiaqi211 ~]# docker run --name mynginx -p : -itd nginx
2326a68c58546ec19c4c5c971662f45d5166cb13bbc56f11d849f146fba6f473
[root@jiaqi211 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2326a68c5854 nginx "nginx -g 'daemon of…" About a minute ago Up About a minute 0.0.0.0:->/tcp mynginx

验证

修改docker0桥的地址

[root@localhost ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://l10nt4hq.mirror.aliyuncs.com"],
"bip": "10.0.0.1/16",
"default-gateway": "10.0.0.10",
"dns": ["114.114.114.114","8.8.8.8"]
}
#核心选项为bip,即bridge ip之意,用于指定docker0桥自身的ip地址 [root@localhost ~]# ifconfig -a
docker0: flags=<UP,BROADCAST,MULTICAST> mtu
inet 10.0.0.1 netmask 255.255.0.0 broadcast 10.0.255.255
ether ::9f::: txqueuelen (Ethernet)
RX packets bytes (0.0 B)
RX errors dropped overruns frame
TX packets bytes (0.0 B)
TX errors dropped overruns carrier collisions

远程访问

如果想让别的主机可以通过ip地址访问本机的docker服务需要以下配置:

第一步:

[root@localhost ~]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
-H unix:///var/run/docker.sock

第二步,重启,并验证

[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
[root@localhost ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN *: *:*
LISTEN 127.0.0.1: *:*
LISTEN ::: :::*
LISTEN ::: :::*
LISTEN ::: :::*
LISTEN ::: :::*

换另外一台机器:
[root@bogon ~]# docker -H 192.168.254.17: images
REPOSITORY TAG IMAGE ID CREATED SIZE
mynginx latest 476a30621ef2 days ago 16MB
mybusy latest 8e4fbb821d36 days ago .42MB

自定义桥

创建自定义桥

[root@localhost ~]# docker network create -d bridge --subnet 20.20.0.0/ --gateway 20.20.0.1 mybr
4320f4f33f6baec1c018b77272f506c7c9cd07a9162a44ae23a8a408c6167cd3
[root@localhost ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
8ea6e1e8a153 bridge bridge local
0921628426bd host host local
4320f4f33f6b mybr bridge local
fe7ac4d47fb1 none null local
[root@localhost ~]# ifconfig -a
br-4320f4f33f6b: flags=<UP,BROADCAST,MULTICAST> mtu
inet 20.20.0.1 netmask 255.255.0.0 broadcast 20.20.255.255
ether ::2c::da:c8 txqueuelen (Ethernet)
RX packets bytes (0.0 B)
RX errors dropped overruns frame
TX packets bytes (0.0 B)
TX errors dropped overruns carrier collisions

#想要修改网卡名称用以下命令
[root@localhost ~]# ifconfig br-4320f4f33f6b down
[root@localhost ~]# ip link set dev br-4320f4f33f6b name docker1
[root@localhost ~]# ifconfig -a
docker1: flags=<BROADCAST,MULTICAST> mtu
inet 20.20.0.1 netmask 255.255.0.0 broadcast 20.20.255.255
ether ::2c::da:c8 txqueuelen (Ethernet)
RX packets bytes (0.0 B)
RX errors dropped overruns frame
TX packets bytes (0.0 B)
TX errors dropped overruns carrier collisions

删除自定义桥

[root@localhost ~]# docker network rm mybr
mybr

docker网络之(三)的更多相关文章

  1. docker从零开始网络(三) overly(覆盖)网络

    使用overly网络 该overlay网络驱动程序会创建多个docker进程主机之间的分布式网络.该网络位于(覆盖)特定于主机的网络之上,允许连接到它的容器(包括群集服务容器)安全地进行通信.Dock ...

  2. K8S系列第三篇(Docker网络)

    目录 docker 网络 Docker 的四种网络模 一.网络基础 1.网络名称空间介绍 2.创建一个命名空间 1)Veth设备对 2)Veth设备操作 1> 创建Veth设备对 2> 绑 ...

  3. docker网络访问(三)

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

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

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

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

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

  6. Docker 网络之进阶篇

    笔者在<Docker 基础 : 网络配置>一文中简单介绍了容器网络的基本用法,当时网络的基本使用方式还处于 --link 阶段.时过境迁,随着 docker 的快速发展,其网络架构也在不断 ...

  7. Docker网络(五)--技术流ken

    本章内容 1.dokcer默认自带的几种网络介绍 2. 自定义网络 3. 容器间通信 4. 容器与外界交互 docker网络分为单个主机上的容器网络和多个主机上的哇网络,本文主要讲解单个主机上的容器网 ...

  8. Docker 网络背后的原理探索

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 知其然而不知其 ...

  9. Docker网络和容器的通信

    Docker的本地网络实现其实就是利用了Linux上的网络命名空间和虚拟网络设备(特别是veth pair). 基本原理 直观上看,要实现网络通信,机器需要至少一个网络接口(物理接口或虚拟接口)与外界 ...

  10. Docker网络解决方案 - Calico部署记录

    简单来说,实现docker跨主机容器间通信,常用的第三方网络方案是Flannel,Weave,Calico:Flannel会为每个host分配一个subnet,容器从这个subnet中分配ip,这些i ...

随机推荐

  1. [转]Blue Prism Opening a password protected Excel workbook?

    本文转自:https://www.rpaforum.net/threads/opening-a-password-protected-excel-workbook.470/ 问: As the tit ...

  2. SAP记账期间变式

        记帐期间变式能够控制每个公司代码中打开的记账期间,包括正常记账期间和特别记账期间.可以为企业组织架构中的每个公司代码定义一个归其单独使用的记账期间变式.      记账期间变式独立于会计年度变 ...

  3. Rewrite基本概述

    Rewrite基本概述 什么是rewrite Rewrite主要实现url地址重写,以及重定向,就是把传入web的请求重定向到其他url的过程. rewrite使用场景 1.地址跳转,用户访问www. ...

  4. Linux iotop工具简介

    iotop的简介: iotop是一款开源.免费的用来监控磁盘I/O使用状况的类似top命令的工具,iotop可以监控进程的I/O信息.它是Python语言编写的,与iostat工具比较,iostat是 ...

  5. chattr lsattr linux file system attributes - linux 文件系统扩展属性

    我们使用 linux 文件系统扩展属性,能够对linux文件系统进行进一步保护:从而给文件 赋予一些额外的限制:在有些情况下,能够对我们的系统提供保护: chattr命令用来改变文件属性.这项指令可改 ...

  6. [Linux] Nginx服务下统计网站的QPS

    单位时间的请求数就是QPS,那么在nginx服务的网站下,如果要统计QPS并且按从高到低排列,需要使用awk配合sort进行处理awk做的主要工作是把access每行日志按分隔符分开,然后循环每一行, ...

  7. FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法

    出现问题场景:       作为刚接触FreeRTOS实时操作系统的菜鸟,我在练习一个程序功能:按键3按下,将LED闪烁的任务挂起:按键4按下,将LED闪烁的任务恢复到就绪.按键使用外部中断.恢复就绪 ...

  8. s3c2440裸机-时钟编程(一、2440时钟体系介绍)

    1.总线框架 下图是2440的总线框架,其中有AHB(Advanced High performance Bus)高速总线,APB(Advanced Peripheral Bus)外围总线. 不同总线 ...

  9. postman---postman生成测试报告

    做完测试后,都会编写一份测试报告,测试报告中最主要的就是呈现出测试结果,哪些用例通过了,哪些用例没有通过.像postman这么强大的功能也可以自动生成报告,供我们测试同学进行查看,显得更加有B格~~~ ...

  10. LeetCode 5275. 找出井字棋的获胜者 Find Winner on a Tic Tac Toe Game

    地址 https://www.acwing.com/solution/LeetCode/content/6670/ 题目描述A 和 B 在一个 3 x 3 的网格上玩井字棋. 井字棋游戏的规则如下: ...