Ubantu docker学习笔记(七)容器网络

这篇具有很好参考价值的文章主要介绍了Ubantu docker学习笔记(七)容器网络。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、容器网络管理

容器网络主要用于容器和容器之间、容器与外网、容器和宿主机的通信和连接。

Ubantu docker学习笔记(七)容器网络

1.1查看容器网络

docker network ls [OPTIONS]
参数 命令
-f 过滤条件
-format string 格式化打印结果
–no-trunc 不缩略显示
-q 只显示网络号

Ubantu docker学习笔记(七)容器网络
Ubantu docker学习笔记(七)容器网络

1.2创建容器网络

docker network create [OPTIONS] NETWORK(名字)
参数 命令
-d 指定网络格式
–subnet strings 指定子网网段
–ip-range strings 指定容器的IP范围
–gateway strings 子网的IPV4或者IPV6

创建一个容器网络,命名为test-bridge,其中为桥接模式

docker network create -d bridge test-bridge

1.3 删除容器网络

docker network rm <你容器网络的名字>
docker network ls
docker network rm test-bridge
docker network ls

Ubantu docker学习笔记(七)容器网络

1.4 容器网络详细信息

docker network inspect [OPTIONS]
参数 命令
-format string 格式化打印结果
docker network inspect none

Ubantu docker学习笔记(七)容器网络

1.5 配置容器网络

基本格式

docker run/creat --network NETWORK

启动

docker run -it -d \
--network=host \
centos /bin/bash

然后查看网络格式

docker inspect <进程号> | grep NetworkMode

Ubantu docker学习笔记(七)容器网络
Ubantu docker学习笔记(七)容器网络
如果没有指定默认会使用桥接(bridge)模式进行连接

1.6 断开容器网络连接

连接:docker network connect [OPTIONS] NETWORKID CONTAINER
断开:docker network disconnect [OPTIONS] NETWORKID CONTAINER

例子,创建一个实列

 docker run -it -d \
--network=host \
centos /bin/bash

先停止我们的容器

docker stop f2

去看我们NETWORK 的ID,然后在后面断开网络的时候,就直接输入,要断开的网络ID

docker network ls

Ubantu docker学习笔记(七)容器网络

docker network disconnect 5e77(NETWORKID) f2(容器进程号)

Ubantu docker学习笔记(七)容器网络
再去连接我们的none网络

docker network connect 5707(NETWORKID) f2(容器进程号)

二、none网络

Ubantu docker学习笔记(七)容器网络

none的话就是什么都没有的网络,在这个模式下,docker会拥有自己的网络空间,但是不会为docker进行任何的网络配置,也就是说除了本地接口外,没有任何的网卡、IP、路由等信息。

创建一个默认网络模式下的BusyBox

docker run --rm -it \
--name test-default \
busybox
ip a

可以看到docker容器分配的ip地址
Ubantu docker学习笔记(七)容器网络
我们再去ping一下外部容器

ping -c 3 wwww.baidu.com

Ubantu docker学习笔记(七)容器网络
可以看到已经分配的ip地址

然后我们再来看设置为none

docker run --rm -it \
--name test-none \
--network=none \
busybox
ip a

Ubantu docker学习笔记(七)容器网络
很清楚的可以看到我们没有分配了

三、host网络

Ubantu docker学习笔记(七)容器网络

创建一个host网络模式下的web应用

docker run -it -d --name test-host --network=host nginx

docker inspect test-host

Ubantu docker学习笔记(七)容器网络
再去查看我们80端口的状态

ss -anptu | grep 80
curl -I 172.20.10.4(ip addr 查看)

Ubantu docker学习笔记(七)容器网络

Ubantu docker学习笔记(七)容器网络

四、bridge网络

在bridge模式下,我们会创建一个虚拟网桥Docker0,附加在其他的网卡上面可以自动转发包,将其中一个接口eth0,另外一个接口veth放置宿主机的命令空间,同时,守护进程还会从网桥的私有地址分配一个IP地址和子网给容器

Ubantu docker学习笔记(七)容器网络
先去下载我们的网桥管理工具

apt install -y bridge-utils
brctl show

Ubantu docker学习笔记(七)容器网络

Ubantu docker学习笔记(七)容器网络

下面我们再来创建一个bridge的容器

docker run -it -d --name test-nginx --network=bridge -p 8000:80 nginx

Ubantu docker学习笔记(七)容器网络
在这里我们可以看到Docker0上面挂载了网络接口,下面我们再来看一个busybox的容器

docker run -it -d --name test-busybox --network=bridge busybox
brctl show

Ubantu docker学习笔记(七)容器网络

下面我们再来看一个例子

brctl show
docker run -d httpd
brctl show

Ubantu docker学习笔记(七)容器网络
我们再进去看看网卡设置

docker ps
docker exec -it 9720[刚刚的进程id] bash
第一种:
ip addr/ifconfig【这个好像看不了】
apt-get update
apt-get install net-tools
ifconfig

第二种:
ctrl+p+q
【我用这个看的】
docker inspect 9720

Ubantu docker学习笔记(七)容器网络

然后退出再去看我们网桥的配置

docker network inspect  bridge

Ubantu docker学习笔记(七)容器网络
可以看到是一样de!

五、container网络

container网络是一种比较特别的网络模式,这个模式让指定创建的容器和已经存在的容器共享一个存储空间,新建的容器没有自己的网卡、IP地址等,而是和一个指定ip的容器共享IP地址、端口号。这两个容器之间不存在网络隔离,而这两个容器与宿主机还有其他机器存在网路隔离。
Ubantu docker学习笔记(七)容器网络
创建一个普通的容器

docker run -it --name test1 busybox
ip a

crtl+p+q(不要直接退出了)

然后我们再去创建一个container的容器

docker run -it --name test-container --network=container:test1 busybox 
ip a

Ubantu docker学习笔记(七)容器网络
这样就可以看到我们两个容器所使用的网络就是一样的啦

docker ps

Ubantu docker学习笔记(七)容器网络

六、容器连接外部网络

其实在我们的虚拟机上,我们是可以直接联通外部的网络的
Ubantu docker学习笔记(七)容器网络
我们再去看我们的容器内部网络连通情况

docker run -it busybox
ping -c 3  www.bing.com

Ubantu docker学习笔记(七)容器网络
可以看到默认情况下我们是可以访问外部网络(出容器以外的网络)的
下面我们可以通过

sudo su【管理员模式下】
iptables -t nat -S

Ubantu docker学习笔记(七)容器网络

-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE

其含义是: 如果网桥docker0收到来自172.17.0.0/16网段的外出包,把它交给MASQUERADE处理。而MASQUERADE的处理方式是将包的源地址替换成host的地址发送出去,即做了一次网络地址转换 (NAT)

下面我们再来看看是怎么转换的

【路由表】
ip r

Ubantu docker学习笔记(七)容器网络
我们是通过ens33发出的,所以我们去监听下ens33和docker0上的情况

tcpdump -i ens33 -n icmp

开另外一个端口
ping -c 3  www.bing.com

Ubantu docker学习笔记(七)容器网络

tcpdump -i docker0 -n icmp

开另外一个端口并进入容器
docker attch 【暂停端口号】
ping -c 3  www.bing.com

Ubantu docker学习笔记(七)容器网络

七、多节点网络

ip addr

Ubantu docker学习笔记(七)容器网络
小唐就用三台电脑来做一个示范吧

机器IP 说明
192.168.2.106 主节点(xiaotang0711)
192.168.2.100 datanode(qiuyb)
192.168.2.102 datanode(root-u)

主节点

设置我们的主节点

docker swarm init --advertise-addr=<IP-ADDRESS-OF-MANAGER>
docker swarm init --advertise-addr=192.168.2.106

Ubantu docker学习笔记(七)容器网络
在去查看

docker node ls

Ubantu docker学习笔记(七)容器网络
再去查看我们节点的状态

docker node inspect ffu

Ubantu docker学习笔记(七)容器网络
加入主节点

docker swarm join-token manager

Ubantu docker学习笔记(七)容器网络

子节点
将我们上面所生成的放到节点机中
Ubantu docker学习笔记(七)容器网络
在每一个子节点中,输入主节点的类容

docker swarm join --token SWMTKN-1-0ktmburrukg72jsyri177tlpk4i8ftkatanwcrlqshfn67ex6r-7b448j9aihy08u3b6kn0z2cdx 192.168.2.106:2377
降级
docker node inspect ffu

Ubantu docker学习笔记(七)容器网络
如果 做错了,请在当前机器退出节点设置

docker swarm leave --force

Ubantu docker学习笔记(七)容器网络

查看swrm集群中的节点
docker node ls
脱离节点(在对应节点处执行)
docker swarm leave
删除脱离节点【对于manager需要先将节点降为worker节点才能删除】
docker node rm XXX(编号)

7.1创建Overlay网络

同步swarm节点

docker network create -d overlay mynet

Ubantu docker学习笔记(七)容器网络

docker service ps test

Ubantu docker学习笔记(七)容器网络

在主节点和分节点上同时运行

docker service create --network mynet --name test --replicas 2 busybox ping 8.8.8.8
【进入容器】
docker ps

Ubantu docker学习笔记(七)容器网络
在主节点和分节点上同时运行(注意主节点子节点他们的容器id不一样)

docker container exec -it 57f sh

主节点
Ubantu docker学习笔记(七)容器网络
分节点
Ubantu docker学习笔记(七)容器网络
互相ping

ping 10.0.1.3[去另外一台主机的ip addr 看]
ping www.baidu.com

Ubantu docker学习笔记(七)容器网络

7.2创建Macvlan网络

主节点

docker network create -d macvlan --subnet 192.168.2.106/24[你自己的ip] --gateway 192.168.2.106[你自己的getway] -o parent=ens33 mac-test

另外一台

docker network create -d macvlan \
--subnet 192.168.2.106/24 \
--gateway 192.168.2.106 \
-o parent=ens33 mac-test

再进入两个主机
再去看ip addr
然后我们就可以看到我们节点互通啦!!!文章来源地址https://www.toymoban.com/news/detail-426487.html

到了这里,关于Ubantu docker学习笔记(七)容器网络的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker 容器学习笔记以及安装配置

    容器的由来 早先,虚拟机通过操作系统实现相互隔离,保证应用程序在运行时相互独立,避免相互干扰。但是操作系统又笨又重,耗费资源严重: 容器技术只隔离应用程序的运行时环境但容器之间共享同一个操作系统,这里的运行时环境指的是程序运行依赖的各种库以及配

    2024年02月09日
    浏览(26)
  • Docker学习:容器五种(3+2)网络模式 | bridge模式 | host模式 | none模式 | container 模式 | 自定义网络模式详解

    本讲是从Docker系列讲解课程,单独抽离出来的一个小节,重点介绍 容器网络模式 , 属于了解范畴,充分了容器的网络模式, 更有助于更好的理解Docker的容器之间的访问逻辑 。 疑问: 为什么要了解容器的网络模式? 首先, 容器之间 虽然不是物理隔离,但是它们彼此之间

    2024年02月09日
    浏览(33)
  • 【docker笔记】Docker容器数据卷

    卷就是目录或者文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性 卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此docker不会在容器删除是删除其挂载的数据卷

    2024年02月02日
    浏览(30)
  • Ubantu安装Docker(完整详细)

    然后根据官方文档一步一步跟着操作即可 要成功安装Docker Desktop,必须: 满足系统要求 拥有64位版本的Ubuntu Jammy Jellyfish 22.04(LTS)或Ubuntu Impish Indri 21.10。 Docker Desktop支持x86_64(或amd64)架构。 对于非Gnome Desktop环境,gnome-terminal 必须安装 卸载Docker Desktop for Linux的技术预览版或

    2024年02月13日
    浏览(38)
  • docker使用容器名实现容器网络互相访问

    docker运行容器的时候没有指定–network 参数,默认是以bridge模式创建,bridge网络表现形式就是docker0这个网络接口。容器默认都是通过docker0这个接口进行通信。也可以通过docker0去和本机的以太网接口连接,这样容器内部才能访问互联网。 但是停止/重启容器之后,容器ip会以谁先

    2024年02月14日
    浏览(25)
  • Docker容器常用命令笔记分享

    Docker是一个开源的应用容器引擎,可以让开发者将应用程序及其依赖打包成一个可移植的容器,然后发布到任何支持Docker的机器上,实现应用程序在不同环境中的一致性运行。相比传统的虚拟化技术,Docker具有更轻量级、更快速、更高效的特点。使用Docker可以方便地创建、部

    2024年03月17日
    浏览(42)
  • Docker笔记 容器的数据卷

    大家好 我是积极向上的湘锅锅💪💪💪 思考: Docker容器删除后,在容器中产生的数据还在吗? 答案是不在了,数据存放在容器中,如果将容器删除,数据也会被一并删除 Docker容器和外部机器可以直接交换文件吗? 答案是不行,因为外部机器与docker内部之间是不互通的,但

    2024年02月15日
    浏览(29)
  • Docker网络---容器互联

    前言: 虽然每个docker容器之间都能通过ip来进行互联,但当容器重新启动,ip就会被重新分配给重新启动的容器,这时同个容器由于重启导致ip不一样了,这时就会导致开发和运维的困难程度大大增加,这时候就要考虑能不能不通过ip互联,而是通过容器的名称或id来实现容器

    2024年02月16日
    浏览(31)
  • Docker容器网络(七)

    在应用程序和网络之间是 Docker 网络,被亲切地称为容器网络模型 或 CNM(Container Network Model)。是 CNM 为您的 Docker 容器代理连接性,并且还抽象出网络中常见的多样性和复杂性。结果是可移植性,它来自 CNM 强大的网络驱动程序。这些是 Docker 引擎、Swarm 和 UCP 的可插拔接口,

    2024年02月05日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包