初学Docker容器网络不得不看的学习笔记


【技术沙龙002期】数据中台:宜信敏捷数据中台建设实践|宜信技术沙龙 将于5月23日晚8点线上直播,点击报名Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。因为对比传统虚拟机有启动快、性能提升、运维成本等等绝对优势,越来越受开发运维童鞋的青睐。1、bridge模式,–net=bridge(默认)2、host模式,–net=host3、container模式 使用–net =container:指定容器名4、none模式,–net=none5、用户自定义模式Docker网络的默认模式,在docker run启动容器的时候,如果不加–net参数,就默认采用这种网络模式。安装完docker,系统会自动添加一个供docker使用的网桥docker0。容器通过DHCP获取一个与docker0同网段的IP地址,并默认连接到docker0网桥,并将docker0的IP地址作为网关实现容器与宿主机的网络互通,另外,同一个宿主机下同样使用bridge模式的容器可以直接通讯。实验部分环境:VMware 安装Centos7虚拟机。首先在Centos虚拟机中安装容器启动容器服务并检查启动状态systemctl start docker 启动docker服务后会发现主机多了一个docker0网卡
(PS:目前本机是通过192.168.32.129这个地址可以直接上网的)。我们启动一个Centos的容器并进入bash,由于我们没有本地没有centos的镜像文件,默认就直接从Docker的官网镜像仓库下载。查看启动的容器进入容器里面,查看IP配置。默认没有ifconfig命令,yum安装下net-toolsyum install net-tools查看容器的ip和路由配置,容器分到了与docker0同段地址并将默认路由指向docker0此容器可以直接上网iptables -t nat –vnL,查看docker生成的iptables,可以看出相当于docker0对容器做了SNAT,再启动一个容器docker run -itd --name centos2 centos /bin/bash此主机上的容器间可以直接通讯此模式的网络工作模式如下图所示容器将不会虚拟出自己的网卡,配置自己的IP等,而是直接使用宿主机的IP和端口,但是文件系统是和宿主机隔离的docker run -itd --net=host --name host-rq centos /bin/bash进入容器容器的进程如下,是和宿主机独立。此模式指定新创建的容器和已经存在的一个容器共享一个 Network,和已有指定的容器出了网络方面其他都是独立的。创建原始的一个容器s-centos创建新容器d-centos并使用原有容器的网络分别进入容器内部,查看IP配置和文件系统是否独立S-centosD-centos此模式下创建的不会创建网络,容器里面就不会有ip容器中只有lo,用户可以在此基础上,对容器网络做定制,若想使用pipework手工配置指定docker容器的ip地址,必须要在none模式下才可以docker run -itd --net=none --name n-centos centos /bin/bashNone模式下生成的容器必须经过手工配置后才可以上网。用户自定义模式主要可选的有三种网络驱动:bridge、overlay、macvlan。bridge驱动用于创建类似于前面提到的bridge网络;overlay和macvlan驱动用于创建跨主机的网络,本例中我们使用Flannel和etcd使用overlay技术实现docker跨物理机通信。Flannel实现的容器的跨主机通信通过如下过程实现:在etcd中规划配置所有主机的docker0子网范围;每个主机上的flanneld根据etcd中的配置,为本主机的docker0分配子网,保证所有主机上的docker0网段不重复,并将结果(即本主机上的docker0子网信息和本主机IP的对应关系)存入etcd库中,这样etcd库中就保存了所有主机上的docker子网信息和本主机IP的对应关系;当需要与其他主机上的容器进行通信时,查找etcd数据库,找到目的容器的子网所对应的outip(目的宿主机的IP),将原始数据包封装在VXLAN或UDP数据包中,IP层以outip为目的IP进行封装;由于目的IP是宿主机IP,因此路由是可达的,VXLAN或UDP数据包到达目的宿主机解封装,解出原始数据包,最终到达目的容器。(图片摘自网络)实验规划1、安装etcd程序2、修改etcd配置文件,配置文件在/etc/etcd/etcd.conf,本实验etcd单机部署,群集配置部分没有做严格更改。配置如下:3、设置后期分给docker容器的网段4、设置开机启动etcd服务并启动该服务1、安装Docker和Flannel服务2、修改Flannel配置文件如下3、设置启动参数4、启动Docker和Flannel服务5、开启宿主机转发功能{一定要打开,很多网上教程都没有提这个,造成无法联通}6、创建容器并进入容器,查看IP在Node2节点上的操作同样在Node3执行一遍,最终看到Node3的获取的IP如图:测试容器Node2和node3上的容器是可以互相访问宿主机上生成了到各个node的路由条目上述方式可以实现跨主机的docker通讯,除此之外还有其他两种方式:在宿主机上添加到其他主机容器的静态路由方式这两种方式都比较好理解,参考网络摘抄的两张图片原文链接:https://www.cnblogs.com/yy-cxd/p/6553624.html静态路由方法:桥接方法:我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu 16.04 最小系统的 root 文件系统。镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。有公有,有私有。镜像管理命令1) 获取镜像从 Docker 镜像仓库获取镜像的命令是 docker pull。其开发云主机域名命令格式为:命令参考 docker pull ubuntu:16.04 不指定tag默认就是下载最新的docker pull mirrors.aliyun.com:ubuntu 从阿里云仓库2) 列出镜像列表包含了 仓库名、标签、镜像 ID、创建时间 以及 所占用的空间。3) 删除镜像docker rmi 镜像Id 删除镜像文件docker rmi -f 镜像ID强制删除镜像4) 容器管理docker create 创建不启动docker start启动容器 docker stop 容器名称 终止容器docker restart 容器名称重启容器docker rm id 删除容器docker run -it centos /bin/sh 创建并启动容器 exit后容器自动退出,若想以守护进程方式继续运行,需要改为docker run -itd centos /bin/sh docker ps 查看运行中的容器docker ps –a 查看所有容器,包含停止的容器。5) 进入容器docker attch 名字进入容器6) 导出容器至文件docker export -o test_for_run_tar 容器ID或 docker export 容器ID >test_for_stop_tar7) 导入文件变成镜像docker import test_for_run_tar - test/ubuntu:v1.08) 数据管理a)数据卷是一个可供容器使用的特殊目录,将操作系统的目录映射到容器docker run -d -P --name web -v /src/webapp:/opt/webapp centos /bin/sh挂载主机的/src/webapp到容器的/opt/webapp目录,默认可读写b)数据卷容器,可供其他容器共享使用的容器先建立一个数据卷容器新建一个其他容器,使用–volumes-from 数据卷容器名字实现挂载容器卷里面的数据卷。作者:网络安全-王志强原文首发于:宜信安全应急响应中心来源:宜信技术学院

相关推荐: Kubernetes数据持久化之Secret与ConfigM

ConfigMap和Secret是Kubernetes中两种特殊类型的存储卷,ConfigMap这种资源对象主要用于提供配置数据以定制程序行为,不过一些敏感的配置信息,比如像用户名、密码、密钥等通常都是由Secret这种资源对象来进行配置的,他们将相应的配置信…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 05/14 15:51
Next 05/14 15:52

相关推荐