Docker网络配置
一、网络相关:
IP(网络协议)、 子网掩码 、网关 、DNS 、端口号;
1、子网掩码:
互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构。
IP 地址在设计时就考虑到地址分配的层次特点,将每个 IP 地址都分割成网络号和主机号两部分,以便于IP地址的寻址操作。
子网掩码是“255.255.255.0”的网络:
最后面一个数字可以在 0~255 范围内任意变化,因此可以提供 256 个 IP 地址。但是实际可用的 IP 地址数量是256-2 ,即 254 个,因为主机号不能全是 “0” 或全是 “1” 。
子网掩码是“255.255.0.0”的网络:
后面两个数字可以在 0~255 范围内任意变化,可以提供 255² 个 IP 地址。但是实际可用的 IP 地址数量是255²-2 ,即 65023 个。 IP 地址的子网掩码设置不是任意的。如果将子网掩码设置过大,也就是说子网范围扩大,那么,根据子网寻径规则,很可能发往和本地主机不在同一子网内的目标主机的数据,会因为错误的判断而认为目标主机是在同一子网内,那么,数据包将在本子网内循环,直到超时并抛弃,使数据不能正确到达目标主机,导致网络传输错误;如果将子网掩码设置得过小,那么就会将本来属于同一子网内的机器之间的通信当做是跨子网传输,数据包都交给缺省网关处理,这样势必增加缺省网关的负担,造成网络效率下降。
因此,子网掩码应该根据网络的规模进行设置。如果一个网络的规模不超过 254 台电脑,采用 “255.255.255.0”作为子网掩码就可以了,现在大多数局域网都不会超过这个数字,因此
“255.255.255.0” 是最常用的 IP 地址子网掩码;假如在一所大学具有 1500 多台电脑,这种规模的局域网可以使用“255.255.0.0” 。
2、网关
网关实质上是一个网络通向其他网络的 IP 地址。
路由器( Windows 下叫默认网关,网关就是路由,路由就是网关不要蒙)
规则 :
计算机的 IP 地址由两部分组成,一部分为网络标识,一部分为主机标识,同一网段内的计算机网络部分相同,主机部分不同同时重复出现。
路由器连接不同网段,负责不同网段之间的数据转发,交换机连接的是同一网段的计算机。通过设置网络地址和主机地址,在互相连接的整个网络中保证每台主机的IP 地址不会互相重叠,即 IP 地址具有了唯一性。
二、桥接网络
1、docker网络配置
当你安装了 docker, 它会自动创建 3 个网络,可以使用 docker network ls 命令来查看
· bridge
· host
当你运行一个容器的时候,可以使用 --network 参数来指定你的容器连接到哪一个网络。
2、bridge模式
当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。
虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。
从docker0 子网中分配一个 IP 给容器使用,并设置 docker0 的 IP 地址为容器的默认网关。 在主机上创建一对虚拟网卡 veth pair 设备, Docker 将 veth pair 设备的一端放在新创建的容器中,并命名为eth0 (容器的网卡),另一端放在主机中,以 vethxxx 这样类似的名字命名,并将这个网络设备加入到docker0 网桥中。
bridge 模式是 docker 的默认网络模式,不写 --net 参数,就是 bridge 模式。
①、查看网络配置:ifconfig
②、新建docker容器
(1)在Dockerfile中增加下面明显内容
#指定基础镜像,并且必须是第一条指令
FROM alpine:3.10#指明该镜像的作者和其电子邮件
MAINTAINER xyz "xyz@qq.com"#在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /usr/local/java#将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>
#ADD与COPY的区别:ADD复制并解压,COPY仅复制
ADD jdk-8u221-linux-x64.tar.gz /usr/local/java/
#glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中
COPY glibc-2.29-r0.apk /usr/local/java/
COPY glibc-bin-2.29-r0.apk /usr/local/java/
COPY glibc-i18n-2.29-r0.apk /usr/local/java/
COPY spring.jar /usr/local/java/#更新Alpine的软件源为阿里云,因为从默认官源拉取实在太慢了
RUN echo http://mirrors.aliyun.com/alpine/v3.10/main/ > /etc/apk/repositories && \
echo http://mirrors.aliyun.com/alpine/v3.10/community/ >> /etc/apk/repositories
RUN apk update && apk upgrade#运行指定的命令
#Alpine linux为了精简本身并没有安装太多的常用软件,apk类似于ubuntu的apt-get,
#用来安装一些常用软V件,其语法如下:apk add bash wget curl git make vim docker
#wget是linux下的ftp/http传输工具,没安装会报错“/bin/sh: wget: not found”,网上例子少安装wget
#ca-certificates证书服务,是安装glibc前置依赖
RUN apk --no-cache add ca-certificates wget \
&& wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \
&& apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk \
&& rm -rf /var/cache/apk/* glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk#配置环境变量
ENV JAVA_HOME=/usr/local/java/jdk1.8.0_221
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATHCMD java -jar spring.jar
(2)制作镜像
docker build -t spring:1.0 .
1) 查看bridge信息 :
docker inspect bridge网关:
打开容器:
docker run - itd -- net = bridge -- name cname iname
查看 docker0 网桥
查看容器网络
ip addr
ifconfig
2)新建容器2.1)容器:我里面已经建了三个容器,分别是bridge01,bridge02,bridge03
新建容器的语句:docker run -itd --name bridge01 spring:1.0
调用服务首先需要ping通,所有查看 “bridge02” 是否能ping 到“bridge01”
进入bridge02
根据bridge01的ip来 ping
出现了以上数据就证明能够ping通
但是要注意:内部能互通了,但是外部调用不了
docker0就像是一个路由器,容器就像是路由器下的设备,它们在同一个网段内,可以互相ping通。
docker0:网桥 (说白了就是一个路由器)
外部访问
设置端口映射: docker run -itd --name bridge04 -p 8089:8081 spring:1.0
-p:指定端口,如果不指定端口,默认在容器内也就是虚拟机内能访问,虚拟机外面访问不到,所以将容器的ip映射到虚拟机的ip上面去,
“8081”:是容器ip
上面的操作是把容器的8081分给了虚拟机的8089
浏览器自接访问:
报错没事,访问到就行
-p 参数可以出现多次,绑定多个端口号
docker run - itd -- name bridge05 - p 8082:8080 - p 8083:8080 spring:1.0
这是一个端口绑定了虚拟机两个端口
三、hot模式
如果启动容器的时候使用 host 模式,那么这个容器将 不会获得一个独立的Network Namespace(网卡) ,而是 和宿主机共用一个Network Namespace。
容 器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。
新建一个host模式的容器,不用指定ip和端口
docker run - itd -- name host01 -- net = host spring : 1.0
现在可以直接访问8081端口
四、自定义网络
1、创建自定义网络(自定义IP)
docker network --subnet create 网段 name
docker network rm xx
网段/16:是定了两段,记得使用没有被占用的网段因为我已经定义了,所以下图可以看出,我多了一个mynet
mynet和bridge是一样的,都是bridge驱动(可以理解为都是一个路由器)
基于mynet创建一个容器net01(容器是我已经创建好的)
查看mynet:docker inspect mynet
可以看出我这个容器里面已经有mynet了
地址为:172.17.0.2
bridge01 ping bridge02成功
bridge01 ping net01没成功
ping不通的原因:不在同一个网段
2、固定ip启动
docker run - itd -- name net03 -- net mynet -- ip 172.18 . 0.9 spring : 1.0
创建net02,ip是不固定的,每次访问名字不一样ip一直在变
固定ip,ip不能乱写,要在同一个网段
执行语句:docker run -itd --name net03 --net mynet --ip 172.18.0.9 spring:1.0
查看net03:docker inspect net03
3、测试
docker exec - it net01 ping net02
4、跨网桥测试
docker exec - it net01 ping 172.0 . 0.2
ping不通
bye~
Docker网络配置相关推荐
- Docker网络配置进阶
Docker启动会默认创建docker0虚拟网桥,是Linux的一个bridge,可以理解成一个软件交换机.它会在挂载到它的网口之间进行转发. 之后所有容器都是在172.17.0.x的网段上,并且可以 ...
- docker网络配置方法总结
docker启动时,会在宿主主机上创建一个名为docker0的虚拟网络接口.默认选择172.17.42.1/16,一个16位的子网掩码给容器提供了65534个IP地址.docker0仅仅是一个在绑定到 ...
- docker 网络配置_Kafka的AWS Docker网络设置
Kafka是一个分布式流处理平台,最近几年获得了长足的发展和进步.这篇文章主要针对在AWS 上部署 Kafka Docker镜像的注意事项.其中最容易出问题的部分就是Kafka的listeners配置 ...
- Docker网络配置再学习之Host和none模式
在之前的文章中,壹哥跟大家说过,关于Docker网络这一块的内容有很多,为了让大家搞清楚这个问题,壹哥准备搞几篇系列文章,来为各位小伙伴解惑.今天壹哥给大家带来的是Docker网络中host和none ...
- (七)Docker网络配置
如不懂docker的网络模式,请查看Docker四种网络模式 一.默认配置 默认网络:当安装docker后,它会自动创建3个网络,可以通过docker network命令来查看,如下图所示: Dock ...
- docker 网络配置
本文接 dockerfile构建LNRP环境 这篇文章 查看网络 docker network ls docker network ls NETWORK ID NAME DRIVER SCOPE d0 ...
- docker 容器之间通信_四、Docker 网络原理、分类及容器互联配置
本文是<Docker必知必会系列>第四篇,原文发布于个人博客:悟尘纪. 上一篇:Docker必知必会系列(三):基于 Docker-registry/Nexus3 搭建本地仓库 Docke ...
- 查看此docker网络连接模式_Docker系列-Docker 网络模式及配置
一.Docker网络模式 docker run 创建 Docker 容器时,可以用 –net 选项指定容器的网络模式,Docker 有以下 4 种网络模式: host 模式,使用 –net=host ...
- Docker 网络实现
Docker 的网络实现其实就是利用了 Linux 上的网络名字空间和虚拟网络设备(特别是 veth pair).建议先 熟悉了解这两部分的基本概念再阅读本章. $ sudo docker versi ...
最新文章
- property装饰器
- Oracle的SQL语句
- 腾飞资本任溶 :互联网大脑,新的天方夜谭?—评《崛起的超级智能》
- xcode windows版安装使用教程
- Linux下安装ElasticSearch-head插件
- Java G1 GC 垃圾回收深入浅出
- 怎么将后缀为.opt,.frm,.myd,.myi文件还原或者是导入mySQL中
- c# 基础语法总结(实例)
- 兼容IE8以下,获取className节点的元素(document.getElementsByClassName()兼容写法)。
- oracle 按时间每五分钟分割,Oracle 5分钟或30分钟分割方法
- 微信用户提现功能 显示NO_AUTH | 产品权限验证失败,请查看您当前是否具有该产品的权限(企业付款到零钱 银行卡)
- Linux 文件的加密解密
- jstat命令查看jvm的GC情况
- 检索 COM 类工厂中 CLSID 为 ???的组件时失败,原因是出现以下错误: 80080005。
- unknown host问题解决办法
- xUtils3.x的网络请求封装和请求https之单向SSL验证
- 21李刚python第四章
- Zoom WebTeam面经
- Java程序员花十个月做私活,收入50w+,网友:老哥建个群搭个伙呗
- 用Matlab进行十进制和二进制数的转换
热门文章
- 【2011红领巾系列——网站/域名】
- unity3d MVC设计模式
- 关于室内分布系统中合路器、功分器、耦合器的对比
- springboot自习室管理系统 毕业设计-附源码221535
- python bootstrap-fileinput示例_文件上传控件bootstrap-fileinput的使用
- 为啥app没有menu键?
- [含文档+PPT+源码等]基于SSM个人财务记账账单收入支出统计管理系统[包运行成功]
- 功耗问题之过多唤醒源 wakeups
- ATM系统--分析类图
- linux kernel内存管理之/proc/meminfo下参数介绍