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

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

一、容器网络管理

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

1.1查看容器网络

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

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

1.4 容器网络详细信息

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

1.5 配置容器网络

基本格式

docker run/creat --network NETWORK

启动

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

然后查看网络格式

docker inspect <进程号> | grep NetworkMode

如果没有指定默认会使用桥接(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

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

再去连接我们的none网络

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

二、none网络

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

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

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

可以看到docker容器分配的ip地址

我们再去ping一下外部容器

ping -c 3 wwww.baidu.com

可以看到已经分配的ip地址

然后我们再来看设置为none

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

很清楚的可以看到我们没有分配了

三、host网络

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

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

再去查看我们80端口的状态

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

四、bridge网络

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

先去下载我们的网桥管理工具

apt install -y bridge-utils
brctl show

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

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

在这里我们可以看到Docker0上面挂载了网络接口,下面我们再来看一个busybox的容器

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

下面我们再来看一个例子

brctl show
docker run -d httpd
brctl show

我们再进去看看网卡设置

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

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

docker network inspect  bridge

可以看到是一样de!

五、container网络

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

创建一个普通的容器

docker run -it --name test1 busybox
ip a

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

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

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

这样就可以看到我们两个容器所使用的网络就是一样的啦

docker ps

六、容器连接外部网络

其实在我们的虚拟机上,我们是可以直接联通外部的网络的

我们再去看我们的容器内部网络连通情况

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

可以看到默认情况下我们是可以访问外部网络(出容器以外的网络)的

下面我们可以通过

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

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

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

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

【路由表】
ip r

我们是通过ens33发出的,所以我们去监听下ens33和docker0上的情况

tcpdump -i ens33 -n icmp
开另外一个端口
ping -c 3  www.bing.com

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

七、多节点网络

ip addr

小唐就用三台电脑来做一个示范吧

机器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

在去查看

docker node ls

再去查看我们节点的状态

docker node inspect ffu

加入主节点

docker swarm join-token manager

子节点

将我们上面所生成的放到节点机中

在每一个子节点中,输入主节点的类容

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

如果 做错了,请在当前机器退出节点设置

docker swarm leave --force

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

7.1创建Overlay网络

同步swarm节点

docker network create -d overlay mynet

docker service ps test

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

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

在主节点和分节点上同时运行(注意主节点子节点他们的容器id不一样)

docker container exec -it 57f sh

主节点

分节点

互相ping

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

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

然后我们就可以看到我们节点互通啦!!!

相关文章
|
3月前
|
人工智能 弹性计算 运维
ACK Edge与IDC:高效容器网络通信新突破
本文介绍如何基于ACK Edge以及高效的容器网络插件管理IDC进行容器化。
|
11天前
|
安全 持续交付 云计算
课时5:阿里云容器服务:最原生的集成Docker和云服务
阿里云容器服务以服务化形式构建容器基础设施,大幅提升开发效率,简化应用部署流程。通过Docker容器和DevOps工具(如Jenkins),实现自动化部署与迭代,优化企业内部复杂部署问题。该服务支持GPU调度、混合云架构无缝迁移,并与阿里云产品体系无缝集成,提供安全防护、网络负载均衡等多重功能支持。凭借微服务架构,帮助企业突破业务瓶颈,提高资源利用率,轻松应对海量流量。
课时5:阿里云容器服务:最原生的集成Docker和云服务
|
1月前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
81 20
|
3月前
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
218 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
1月前
|
Ubuntu API 网络虚拟化
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
355 15
|
3月前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
347 78
|
2月前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
221 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
3月前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
3月前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
108 8
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
3月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
215 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档

热门文章

最新文章