多平台统一管理软件接口,如何实现多平台统一管理软件接口
305
2022-09-14
Docker网络管理(docker 管理系统)
参考博客:四种网络模式1.host模式 使用docker run时使用--net=host指定docker使用的网络实际上和宿主机一样在容器内看到的网卡ip是宿主机上的ip局限性例如容器开启80端口宿主机也开启80端口就会产生冲突。
[root@localhost ~]# docker run -it --rm --net=host centos_with_net_wget:daixuanlinux bash
[root@localhost /]# ifconfig
docker0: flags=4163
2.container模式 使用--net=container:container_id/container_name多个容器使用共同的网络看到的ip是一样的与510b828f4ca9的IP都是172.17.42.1
[root@localhost ~]# docker run -it --rm --net=container:510b828f4ca9 centos_with_net_wget:daixuanlinux bash
[root@localhost /]# ifconfig
docker0: flags=4163
3. none模式使用--net=none指定这种模式下不会配置任何网络
[root@localhost ~]# docker run -it --rm --net=none centos_with_net_wget:daixuanlinux bash
[root@6db3a6e51687 /]# ifconfig
lo: flags=73
4. bridge模式默认模式类似vmware的nat模式,使用--net=bridge指定,默认模式不用指定,就是这种网络模式。这种模式会为每个容器分配一个独立的Network Namespace。同一个宿主机上的所有容器会在同一个网段下相互之间是可以通信的。
[root@localhost ~]# docker run -it --rm centos_with_net_wget:daixuanlinux bash
[root@663660abecbb /]# ifconfig
eth0: flags=4163
二 docker 网桥
配置桥接网络centos7为了使本地网络中的机器和Docker容器更方便的通信我们经常会有将Docker容器配置到和主机同一网段的需求。这个需求其实很容易实现我们只要将Docker容器和宿主机的网卡桥接起来再给Docker容器配上IP就可以了。安装pipworkgit clone ~/pipework/pipework /usr/local/bin/开启一个容器 docker run -itd --net=none --name aming123 centos /bin/bashpipework br0 aming123 172.7.15.201/24@172.7.15.107 #201为容器的ip@后面的ip为宿主机ipbrctl addif br0 eth0 #eth0为宿主机网卡这一步为把br0和eth0桥接起来ip addr add 172.7.15.107/24 br0 #把107的ip绑定在br0上docker exec -it aming123 /bin/bash #进去后ifconfig查看就可以看到新添加的ipcentos6:cd /etc/sysconfig/network-scripts/; cp ifcfg-eth0 ifcfg-br0vi ifcfg-eth0 //增加BRIDGE=br0删除IPADDR,NETMASK,GATEWAY,DNS1vi ifcfg-br0//修改DEVICE为br0,Type为Bridge,把eth0的网络设置设置到这里来service network restart安装pipwork: git clone ~/pipework/pipework /usr/local/bin/开启一个容器: docker run -itd --net=none --name aming123 centos /bin/bashrpm -Uvh rpm -Uvh "netns" is unknown, try "ip help"pipework br0 aming123 172.7.15.201/24docker exec -it aming123 /bin/bash #进去后ifconfig查看就可以看到新添加的ip
bridge 模式是 Docker 默认的网络设置,此模式会为每一个容器分配 Network Namespace、设置 IP 等,并将一个主机上的 Docker 容器连接到一个虚拟网桥上。当 Docker server 启动时,会在主机上创建一个名为 docker0 的虚拟网桥,此主机上启动的 Docker 容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。接下来就要为容器分配 IP 了,Docker 会从 RFC1918 所定义的私有 IP 网段中,选择一个和宿主机不同的IP地址和子网分配给 docker0,连接到 docker0 的容器就从这个子网中选择一个未占用的 IP 使用。如一般 Docker 会使用 172.17.0.0/16 这个网段,并将 172.17.42.1/16 分配给 docker0 网桥(在主机上使用 ifconfig 命令是可以看到 docker0 的,可以认为它是网桥的管理接口,在宿主机上作为一块虚拟网卡使用)
2.1 列出当前主机网桥
# brctl show
或者
# brctl show docker0
brctl 工具依赖bridge-utils 包
查看当前 docker0 ip
# ifconfig docker0
或者
# ip addr show docker0
自定义 docker0 网桥的网段
默认情况下 docker0 会分配172.1.42 或者192.168.42 这个网段。 我们也可以手动更改这个网段为 192.168.10.0/24。 要注意顺序:
# /etc/init.d/docker stop #停掉docker服务
# ip link set dev docker0 down #停掉网桥docker0
# ip addr add 192.168.10.1/24 dev docker0 #给docker0添加地址
# ip addr del 192.168.42.1/24 dev docker0 #删除docker0原有的地址
# ip link set dev docker0 up #启动网桥docker0
# /etc/init.d/docker start #启动服务
自定义网桥
Docker 会尝试寻找没有被主机使用的 ip 段,尽管它适用于大多数情况下,但是它不是万能的,有时候我们还是需要对 ip 进一步规划。在启动 Docker 服务的时候,使用 -b BRIDGE 或 --bridge=BRIDGE 来指定使用的网桥,需要安装 bridge-utils软件包。
这里我们新建一个网桥 br0 作为 docker 的默认网桥 基本步骤如下: 1. 停止服务删除旧网桥 2. 创建自定义网桥 3. 确认新网桥并启动 4. 配置 docker 默认网桥
停止服务删除旧网桥
# service docker stop# ip link set dev docker0 down# brctl delbr docker0
创建新网桥br0
# brctl addbr br0# ip addr add 192.168.100.1/24 dev br0
查看确认新网桥并启动
# ip addr show br0 或者 brctl show br0# ip link set dev br0 up
配置 docker 服务,默认连接到 网桥br0 上 .并启动docker
# echo 'DOCKER_OPTS="-b=br0"' >> /etc/default/docker# service docker start
启动 Docker 服务。 新建一个容器,可以看到它已经桥接到了 br0 上。 可以继续用 brctl show 命令查看桥接的信息。另外,在容器中可以使用 ip addr 和 ip route 命令来查看 IP 地址配置和路由信息。
三 外部网络访问容器1 使用centos镜像新建一个容器,然后在该容器中安装httpd服务并启动
[root@localhost ~]# docker run -it centos_with_net_wget:daixuanlinux bash [root@0d76c137b3cc /]# yum install -y httpd [root@0d76c137b3cc /]# /usr/sbin/httpd //使用绝对路径启动httpd服务 AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.29. Set the 'ServerName' direc tive globally to suppress this message [root@0d76c137b3cc /]# ps aux | grep httpd //httpd服务已经启动 root 53 0.0 0.6 221852 3456 ? Ss 05:45 0:00 /usr/sbin/httpd apache 54 0.0 0.5 221852 2600 ? S 05:45 0:00 /usr/sbin/httpd apache 55 0.0 0.5 221852 2600 ? S 05:45 0:00 /usr/sbin/httpd apache 56 0.0 0.5 221852 2600 ? S 05:45 0:00 /usr/sbin/httpd apache 57 0.0 0.5 221852 2600 ? S 05:45 0:00 /usr/sbin/httpd apache 58 0.0 0.5 221852 2600 ? S 05:45 0:00 /usr/sbin/httpd root 60 0.0 0.1 8984 768 ? S+ 05:45 0:00 grep --color=auto httpd [root@0d76c137b3cc /]# netstat -lnp | grep 80 //监听了80端口 tcp6 0 0 :::80 :::* LISTEN 53/httpd [root@0d76c137b3cc /]# exit exit [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0d76c137b3cc centos_with_net_wget:daixuanlinux "bash" 14 minutes ago Exited (130) About a minute ago compassionate_goodall
2 把该容器导成一个新的镜像centos_with_httpd
[root@localhost ~]# docker commit -m "centos_with_httpd" -a "daixuan" 0d76c137b3cc centos_with_httpd 9fa4d394e3b6855a9c395d8313c43945fb0c0b8ce8ac99b4c5c20e831df672c4 [root@localhost ~]# docker p_w_picpaths REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos_with_run -itd -p 5123:80 centos_with_可以指定端口映射本例中将容器的80端口映射为本地的5123端口
docker exec -it container_id bash
启动 -k start 或者使用绝对路径启动/usr/sbin/vi /var/ 随便写点东西例如daixuanlinux.com
退出该容器exit测试 curl 127.0.0.1:5123/1.html
[root@localhost ~]# docker run -itd -p 5123:80 centos_with_httpd:latest bash 754edd8655b86715e2f7b75db4f8503370960974b415ae6871f69f8c5bc2b12f [root@localhost ~]# docker exec -it 754edd865 bash [root@754edd8655b8 /]# netstat -lnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node PID/Program name Path [root@754edd8655b8 /]# /usr/sbin/httpd AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.30. Set the 'ServerName' directive globally to suppress this message [root@754edd8655b8 /]# ps aux | grep httpd root 29 0.0 0.6 221852 3436 ? Ss 06:00 0:00 /usr/sbin/httpd apache 30 0.0 0.5 221852 2600 ? S 06:00 0:00 /usr/sbin/httpd apache 31 0.0 0.5 221852 2600 ? S 06:00 0:00 /usr/sbin/httpd apache 32 0.0 0.5 221852 2600 ? S 06:00 0:00 /usr/sbin/httpd apache 33 0.0 0.5 221852 2600 ? S 06:00 0:00 /usr/sbin/httpd apache 34 0.0 0.5 221852 2600 ? S 06:00 0:00 /usr/sbin/httpd root 36 0.0 0.1 8984 772 ? S+ 06:00 0:00 grep --color=auto httpd [root@754edd8655b8 /]# vi /var/www/html/1.html 添加:daixuanlinux.com [root@754edd8655b8 /]# curl localhost/1.html daixuanlinux.com [root@754edd8655b8 /]# ^C [root@754edd8655b8 /]# exit exit [root@localhost ~]# curl 112.65.140.132:5123/1.html //外部访问5123转到访问容器的80端口 daixuanlinux.com [root@localhost ~]# docker ps //可以看到转换规则:5123->80 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 754edd8655b8 centos_with_容器互联下载一个mysql镜像docker pull mysql新建一个容器命名为dbserverdocker run -it -d -p 13306:3306 --name dbserver mysql bash在新建一个web容器并和db互联docker run -it -d -p 12308:80 --name web --link dbserver:db centos_with_bash
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~