dokcer || networking

2024-01-05 00:40
文章标签 networking dokcer

本文主要是介绍dokcer || networking,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

docker 默认的私有网络:172.17.0.0/16

网关是宿主机的172.17.0.1

所有的容器上网都需要经过宿主机,底层使用的是iptables的SNAT和DNAT

宿主机能ping通容器,但是不能ssh到容器里,为什么?

1.容器里安装openssh服务器,没有sshd进程去监听22号端口

2.容器的单进程思路--》一个容器里只是跑一个程序 --》web,mysql,redis等

docker的网络类型(docker里能看到3种类型)

查看网络类型

[root@aliyun ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
3058b63e1804   bridge    bridge    local
e996a5a90e55   host      host      local
93b5cda92460   none      null      local

查看帮助文档

[root@aliyun ~]# docker network --helpUsage:  docker network COMMANDManage networksCommands:connect     Connect a container to a networkcreate      Create a networkdisconnect  Disconnect a container from a networkinspect     Display detailed information on one or more networksls          List networksprune       Remove all unused networksrm          Remove one or more networks

docker的7种网络类型

网络模式配置描述
host模式–net=host容器和宿主机共享ip地址,端口号要区别开
none模式–net=none只有lo接口,没有其他的接口
container模式-net=container很多容器共享一个ip地址
bridge模式–net=bridge默认的模式
ipvlan模式–net=ipvlan直接和eth0组成了一个局域网--》相当于一个vlan
macvlan模式–net=macvlan使用网络驱动程序来分配MAC 每个容器的虚拟网络接口的地址
overlay模式-net=overlay实现跨主机的docker容器之间的通信

host模式

使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能再用了,网络的隔离性不好。

注意:鉴于容器在使用模式网络时没有自己的 IP 地址,则端口映射不会生效。

--network=host,可以指定容器网络类型为host
[root@aliyun ~]# docker run --name sc-nginx-1 -d --network=host -p 8080:80 nginx
WARNING: Published ports are discarded when using host network mode
85ae14f5b22af791ef9be2cdfd8902ce3b4c76403aff6b80a8193ee33e92a910[root@aliyun ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
85ae14f5b22a   nginx     "/docker-entrypoint.…"   4 minutes ago   Up 4 minutes             sc-nginx-1[root@aliyun ~]# docker inspect sc-nginx-1 |grep -i network"NetworkMode": "host","NetworkSettings": {"Networks": {"NetworkID": "e996a5a90e556bf6d05196f3ac91ee085fd70b9b44815b1929e5244dfe0db228",

none模式

使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。

这种网络模式下容器只有lo回环网络,没有其他网卡。none模式可以在容器创建时通过--network=none来指定。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。

[root@aliyun ~]# docker run --name nginx-2 -d --network=none -p 8080:80 nginx
32a07826622b17da449395fc1e11650d89013085a48ddca90005611002305c4e
[root@aliyun ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
32a07826622b   nginx     "/docker-entrypoint.…"   8 seconds ago   Up 8 seconds             nginx-2
[root@aliyun ~]# docker inspect nginx-2|grep -i network"NetworkMode": "none","NetworkSettings": {"Networks": {"NetworkID": "93b5cda924601c8d3213b06ac200db84af8c176ef095ffca11eb1d983349ebfc",

container模式

这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。

例如:k8s里的pod

指定容器的网络类型为container模式

docker run --name nginx-3 -d --network=container  nginx


bridge模式

当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。bridge模式是docker的默认网络模式,不写--net参数,就是bridge模式。

[root@aliyun ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:16:3e:24:c7:4b brd ff:ff:ff:ff:ff:ffinet 172.31.79.168/20 brd 172.31.79.255 scope global dynamic eth0valid_lft 314222117sec preferred_lft 314222117secinet6 fe80::216:3eff:fe24:c74b/64 scope link valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:97:75:b5:76 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:97ff:fe75:b576/64 scope link valid_lft forever preferred_lft forever
45: br-f0a93f040807: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:de:b1:00:68 brd ff:ff:ff:ff:ff:ffinet 172.21.0.1/16 brd 172.21.255.255 scope global br-f0a93f040807valid_lft forever preferred_lft forever
[root@aliyun ~]# docker network create my-net
f0a93f040807716579d3e2e925e27cf8842851519d3062a667302fedb7ba93a2[root@aliyun ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
3058b63e1804   bridge    bridge    local
e996a5a90e55   host      host      local
f0a93f040807   my-net    bridge    local
93b5cda92460   none      null      local[root@aliyun ~]# docker run --name sc-nignx-1 -d --network my-net -p 8080:80 nginx[root@aliyun ~]# docker network inspect my-net
[{"Name": "my-net","Id": "c5ff558adf1c11f3a361a97d8004ca193c36b28acda6d15fe69e89b678614d4b","Created": "2023-07-10T10:04:41.26258244+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "172.18.0.0/16","Gateway": "172.18.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {"4d182b051ba8c18d6974df8dd97b4b4700877f2fb6cad0024650fbe48a2cff01": {"Name": "sc-nignx-1","EndpointID": "9f56a7e683622128755f541fe350687e46aa5246322446e097834c440da1e3b4","MacAddress": "02:42:ac:12:00:02","IPv4Address": "172.18.0.2/16","IPv6Address": ""}},"Options": {},"Labels": {}}
]从用户定义的网桥断开容器
[root@aliyun ~]# docker network disconnect my-net sc-nignx-1从用户定义的网桥连接容器
[root@aliyun ~]# docker network connect my-net sc-nignx-1

以上4种模式,只是考虑在同一台机器里宿主机和容器之间的通信。


IpVlan模式

IPvlan 驱动程序让用户可以完全控制 IPv4 和 IPv6 寻址。VLAN 驱动程序建立在此之上,为对底层网络集成感兴趣的用户提供了对第 2 层 VLAN 标记甚至 IPvlan L3 路由的完全控制。

 要求,内核版本大于4.2以上

[root@aliyun ~]# uname -r    # 查看内核版本
3.10.0-1160.90.1.el7.x86_64

架构图

[root@aliyun ~]# ip add add 192.168.3.2/24 dev eth0 label eth0:10
[root@aliyun ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:16:3e:24:c7:4b brd ff:ff:ff:ff:ff:ffinet 172.31.79.168/20 brd 172.31.79.255 scope global dynamic eth0valid_lft 314220755sec preferred_lft 314220755secinet 192.168.3.2/24 scope global eth0:10valid_lft forever preferred_lft foreverinet6 fe80::216:3eff:fe24:c74b/64 scope link valid_lft forever preferred_lft forever[root@aliyun ~]# ip route
default via 172.31.79.253 dev eth0 
169.254.0.0/16 dev eth0 scope link metric 1002 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 
172.21.0.0/16 dev br-f0a93f040807 proto kernel scope link src 172.21.0.1 
172.31.64.0/20 dev eth0 proto kernel scope link src 172.31.79.168 
192.168.3.0/24 dev eth0 proto kernel scope link src 192.168.3.2 

MacVlan模式

Docker 主机上指定一个物理接口以用于 Macvlan,以及网络的子网和网关。你甚至可以 使用不同的物理网络接口隔离 Macvlan 网络。

docker network create -d macvlan \--subnet=172.16.86.0/24 \--gateway=172.16.86.1 \-o parent=eth0 pub_net

OverLay模式

overlay网络用于连接不同机器上的docker容器,允许不同机器上的容器相互通信,同时支持对消息进行加密。Overlay网络实际上是目前最主流的容器跨节点数据传输和路由方案。

overlay的底层原理VXLAN

VXLAN(Virtual eXtensible Local Area Network,虚拟可扩展局域网),是一种虚拟化隧道通信技术。它是一种 Overlay(覆盖网络)技术,通过三层的网络来搭建虚拟的二层网络。

这篇关于dokcer || networking的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/571110

相关文章

poj 1287 Networking(prim or kruscal最小生成树)

题意给你点与点间距离,求最小生成树。 注意点是,两点之间可能有不同的路,输入的时候选择最小的,和之前有道最短路WA的题目类似。 prim代码: #include<stdio.h>const int MaxN = 51;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int P;int prim(){bool vis[MaxN];

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 10数据中心中的BGP

本章解答以下问题: ASN,团体(community),属性(attribute),最佳路径这些BGP术语是什么疑似?在数据中心中应该使用eBGP还是iBGP?在数据中心使用BGP时,应采用什么ASN编号方案?在数据中心使用BGP时,应如何修改BGP的计时器? BGP 基本概念 BGP协议概述 BGP 是一种路径矢量路由协议。“矢量”是一个数组或列表。因此,路径矢量路由协议是一种构建并分发

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 09部署OSPF

本章的目的是帮助网络工程师确定网络的理想 OSPF 配置。本章将回答以下问题 应何时在数据中使用OSPF ?配置 OSPF 的关键设计原则是什么?OSPFv2 和 OSPFv3 之间有什么区别,应如何使用?如何在路由协议栈中配置 OSPF ?如何在服务器上配置 OSPF,例如为容器提供路由环境?如何使用 OSPF 来协助升级路由器软件? OSPF是最流行的IGP 目前针对IPv4协议使用

Illustrated Guide to Monitoring and Tuning the Linux Networking Stack: Receiving Data

太长不读(TL; DR) 这篇文章用一系列图表扩展了以前的博客文章Monitoring and Tuning the Linux Networking Stack: Receiving Data,旨在帮助读者形成一个更清晰的视野来了解Linux网络协议栈是如何工作的 在监控或调优 Linux 网络协议栈试没有捷径可走。如果你希望调整或优化每个组件及其相互作用,你就必须努力充分了解它们。也就是说

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 08网络自动化

云原生数据中心和老一代数据中心不同之处在于其核心概念是聚焦于高效运营。网络自动化就是达到此目标的关键因素。 要达到此目的,本章要解决诸如下述的一些问题: 什么是网络自动化以及为什么我们在乎它?为了学习网络自动化,我需要学习编程吗?网络自动化为什么很难?如何逐步探索自动化的好处?哪些网络自动化工具适合我?如何确保自动化程序能正常工作? 什么是网络自动化? 在网络管理语境下,自动化指的是允

Dokcer镜像

一、定义 Dokcer 镜像是由文件系统叠加而成。最底端是一个引导文件系统,即bootfs,这很像典型的Linux/unix的引导文件系统。 第一层是一个引导文件系统,即bootfs第二层时root文件系统rootfs,位于引导文件系统之上。rootfs可以使一种或多种操作系统(如debian或ubuntu系统) 就是比如我们跑起来一个docker镜像,他变成一个容器,容器是可以读

dokcer 配置php+mysql_nginx

安装docker nginx容器 docker search nginx  拉取镜像: docker pull nginx  生成如下镜象: runoob@runoob:~/nginx$ docker images nginxREPOSITORY TAG IMAGE ID CREATED

POJ 1287 Networking

Kruskal建图更加方便,不管三七二十一全部扔进去排序,然后并查集会自动帮助我们去重的。建图之后裸最小生成树 /************************************************ Author: fisty* Created Time: 2015/2/28 13:03:03* File Name : B.cpp*******************

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 06容器网络

本章将回答以下问题 Linux上可用的容器网络组件有哪此?各种选择的限制和性能特征是什么? 命令空间 命名空间是一个 Linux 内核虚拟化组件。该组件类似 Linux 内核提供的网络和服务器虚拟化的组件。命名空间对内核管理的特定的资源进行虚拟化,允许一个虚拟资源有多个隔离实例。一个进程与该资源的一个虚拟实例相关联。多个进程可以属于该资源的一个共有的虚拟实例。从进程的角度看,进程似乎完全

《计算机英语》 Unit 5 Networking 网络

Section A Networking 网络 The need to share information and resources among different computers has led to linked computer systems, called networks, in which computers are connected so that data c