04Docker网络基础配置

1 . Docker默认网络
Docker安装后,会自动创建3个网络,可以用

docker network ls 查看

Docker默认才用的网络是:"bridge" 桥接网络

Docker安装成功后,回出现docker0的网络设备,本质是一个虚拟网桥

brctl show

注意:brctl show 需要安装 yum install bridge-utils -y

2 . dcoker0的作用

给容器分配IP地址(与docker0同网段)

给容器分配Mac地址

是每个容器的默认网关

同一个宿主机的各个容器之间通信基础(都接入docker0网桥)

宿主机和容器直接通信的基础

3 . docker0的地址划分

docker0本身的IP:172.17.0.1

docker0的子网掩码:255.255.0.0

docker0分配的IP范围:172.17.0.2-172.17.255.254,共计65534个IP

4 . docker0如何组织网络

a.运行某个容器

复制代码
docker search alpine

docker pull alpine

docker run -itd --name ap01 alpine

ip addr

brctl show

b.查看容器网络接口

复制代码
docker exec -it ap01 ip addr

c.查看容器IP

复制代码
docker exec -it ap01 hostname -i | docker inspect ap01

veth是虚拟机以太网,全称是VirtualEthernet

veth通过"veth pair"技术在veth设备一端写入网络包,其对端的veth设备可以读取到对应的网络包(可以想象是一根虚拟网线將两个veth设备连接起来)

--容器启动

--docker创建一对虚拟接口

--一端放到本地主机,如veth7530,然后桥接到默认的docker0上

--另一端放到容器中,并修改名字为eth0

--docker0 分配一个IP给容器eth0,并配置默认路由到桥接王康veth7530

5.端口映射实现访问容器

容器启动的时候,如果不指定对应参数,在容器外部是无法通过网络访问容器内的网络应用和服务的。

可以用-P或者-p 参数来指定映射端口,挡使用-P标记时,Docker会随机映射一个49000-49900的端口至容器内部开放的网络端口:

复制代码
​
docker run -d -P training/webapp python app.py

docker ps -l

docker logs -f nostalgic_morse # 查看应用信息

​

6.映射所有接口地址

hostPort:containerPort 將本地的5000映射到容器的5000端口

复制代码
​
docker run -d -p 5000:5000 training/webapp python app.py

此时默认会绑定本地所有接口上的所有地址。多次使用-p可以绑定多个端口

复制代码
​
docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py

7.映射到指定地址的指定端口

复制代码
​
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py

8.映射到指定地址的任意端口

复制代码
​
docker run -d -p 127.0.0.1::5000 training/webapp python app.py

还可以使用udp标记udp端口

复制代码
​
docker run -d -p 127.0.0.1::5000/udp training/webapp python app.py

9.查看映射端口配置

docker prot

10.容器互联

使用--link参数可以让容器之间安全的进行交互

创建一个数据库容器

复制代码
docker run -d --name db training/postgres

删除之前的web容器

复制代码
docker rm -rf web

创建新的web容器并將它连接到db容器

复制代码
​
docker run -d -P --name web --link db:db training/webapp python app.py

--link 参数格式为 --link name:alias ,其中name是要链接的容器的名字,alias是这个链接的别名

docker ps

这样就可以在两个容器直接创建了一个安全隧道,而不用映射他们的端口到宿主机上。从而避免暴露数据库端口到外部网络。

可以使用evn命令来查看web容器的环境变量

复制代码
docker run --rm --name web2 --link db:db training/webapp env

1 1. 网络连接

默认情况下docker容器之间都是通过IP互相连接的

基于安全考虑可以通过/etc/docker/daemon.json在末尾配置:"icc": false,可以禁止容器直接的互联(充气docker才可剩下)

12.自定义网络

为何要自定义网络,容器的隔离,提高安全性;DNS解析和服务发现;容器直接负载均衡。。。

a.如何创建自定义网络

docker network create [--dirver 驱动类型] [ --subnet=172.168.0.0/16] 自定义网络名

--driver 代表驱动类型,默认为bridge

--subnet 代表网段设置,默认docker0地址上递增(172.17.0.1-->172.18.0.1)

--通过docker network ls 查看自定义网络

--通过 docker network inspect 查看使用本网络的详情

b.如何使用自定义网络

容器启动时:docker run --network 自定义网络名

容器启动后:docker network connect 网络名 容器名

相关推荐
君鼎14 分钟前
muduo库TcpServer模块详解
linux·网络·c++
开***能15 分钟前
包装设备跨系统兼容:Profinet转Modbus TCP的热收缩包装机改造方案
服务器·网络·tcp/ip
卡戎-caryon29 分钟前
【MySQL】02.数据库基础
linux·网络·数据库·mysql·存储引擎
ZHOU_WUYI43 分钟前
React与Docker中的MySQL进行交互
mysql·react.js·docker
Will_11301 小时前
如何实现k8s高可用
运维·docker·容器
编程、小哥哥1 小时前
互联网大厂Java面试场景:从缓存到容器化的技术问答
redis·docker·微服务·kubernetes·spring security·java面试·gitlab ci
技术宝哥1 小时前
从另一个视角理解TCP握手、挥手与可靠传输
网络·网络协议·tcp/ip
李白你好1 小时前
H3C网络设备(交换机、路由器、防火墙)常用命令整理
运维·网络·智能路由器
終不似少年遊*2 小时前
【从基础到模型网络】深度学习-语义分割-基础
网络·人工智能·深度学习·语义分割·卷积·上采样
卡戎-caryon2 小时前
【Linux网络与网络编程】12.NAT技术&&内网穿透&&代理服务
linux·运维·服务器·网络·网络协议·https