zoukankan      html  css  js  c++  java
  • docker网络

    docker run创建Docker容器时,可以用–net选项指定容器的网络模式,Docker有以下4种网络模式:

    Ø bridge模式:使--net =bridge指定,默认设置;

    Ø host模式:使--net =host指定;

    Ø none模式:使--net =none指定;

    Ø container模式:使用--net =container:NAME orID指定。

    参考:http://www.docker.org.cn/dockerppt/111.html

    一:docker 容器的网络基础

    1.docker0:

    linux的虚拟网桥

    在OSI七层模型中的数据链路层

    2.Linux虚拟网桥的特点:

    可以设置ip地址

    相当于拥有一个隐藏的虚拟网卡

    docker0的地址划分:

    IP:172.17.42.1 子网掩码:255.255.0.0

    MAC:02:42:ac:11:00:00到02:42:ac:11:ff:ff

    总共提供了65534个地址

    通过veth*与容器通信

    3.安装网桥管理工具:

    yum install bridge-utils -y

    brctl show 可以查看到有一个docker0的网桥设备,下面有很多接口,每个接口都表示一个启动的docker容器,因为我在docker上启动了很多容器,所以interfaces较多,如下所

    4.修改docker0地址:

    ifconfig docker0 192.168.200.1 netmask 255.255.255.0

    然后重启docker:

    service docker restart

    创建一个容器,进去之后ifconfig可以看见docker0的ip地址是我们刚才设置的了

    5.添加虚拟网桥

    brctl addbr br0

    ifconfig br0 172.16.1.1 netmask 255.255.0.0(我的宿主机docker0地址是172.17.42.1)

    更改docker守护进程的启动配置(docker1.7按如下方式改):

    /etc/sysconfig/docker 中添加

    other_args="-b=br0"

    重启docker:service docker restart

    ps -ef | grep docker 可以看见br0这个参数

    docker run -it centos:6.9 /bin/bash

    ifconfig可以看见ip地址是172.16.0.1

    也就是说们启动docker时,在/etc/sysconfig/docker里修改other_args="-b=br0",在创建docker容器的时候,容器的ip就是172.16.*.*,也就是我们新建立的网桥

    二:docker 容器的互联(相互之间的访问)

    下面用到的镜像的dockerfile文件如下:

    cd dockerfile/inter-image

    vim dockerfile

    FROM centos:7
    RUN yum install epel-release -y
    RUN yum install nginx -y
    RUN sed -i "7s/^/#/g" /etc/nginx/conf.d/default.conf
    EXPOSE 80
    CMD /bin/bash

    docker build -t="inter-image" .

    允许所有容器间互联(也就是访问)

    第一种方法:

    例:

    (1)基于上面的inter-image镜像启动第一个容器test1

    docker run --name test1 -it inter-image

    进入到容器里面启动nginx:

    /usr/sbin/ngnx

    Ctrl +p,ctrl+q 退出

    (2)基于上面的inter-image镜像启动第二个容器test2

    docker run --name test2 -it inter-image

    ctrl+p和ctrl+q退出容器

    (3)进入到test1容器和test2容器,可以看两个容器的ip,分别是

    172.17.0.20和172.17.0.21

    docker exec -it test2 /bin/bash

    ping 172.17.0.20 可以看见能ping通test1容器的ip

    curl http://172.17.0.20    

    可以访问到test1容器的内容

     

    上述方法假如test1容器重启,那么在启动就会重新分配ip地址,所以为了使ip地址变了也可以访问可以采用下面的方法

     

    第二种方法:

    可以给容器起一个代号,这样可以直接以代号访问,避免了容器重启ip变化带来的问题

    --link

    docker run --link=[CONTAINER_NAME]:[ALIAS] [IMAGE][COMMAND]

    例:

    1.启动一个test3容器

    docker run --name test3 -it inter-image /bin/bash

    启动nginx:

    /usr/sbin/nginx 

    Ctrl+p和ctrl+q退出或者exit退出

    2.启动一个test5容器,--link做链接,那么当我们重新启动test3容器时,就算ip变了,也没关系,我们可以在test5上ping别名webtest

    docker run --name test5 -it --link=test3:webtest inter-image /bin/bash

    ctrl+p和ctrl+q退出

    3.test3和test5的ip分别是172.17.0.22和172.17.0.24

    4.重启test3容器

    docker restart test3

    发现ip变成了172.17.0.25

    5.进入到test5容器 

    docker exec -it test5 /bin/bash

    ping test3容器的ip别名webtest可以ping通,尽管test3容器的ip变了也可以通

     

    拒绝容器互联(拒绝容器相互访问)

    docker守护进程的启动项

    --icc=false

    修改启动项的配置文件

    vim /etc/sysconfig/docker

    在最后一行添加如下参数:

    other_args="-icc=false"

    重启docker容器配置生效,然后分别运行test3,test5,在test5上ping test3的ip(webtest),会发现ping不通

  • 相关阅读:
    Bash 命令的解析
    vscode ctrl+P 打开文件后固定文件
    Linux 使用 tree 命令生成文件目录结构
    分享一款“暗黑系列”Idea主题插件Material Theme【改】
    linux上搭建svn服务器并设置自启动
    springBoot项目里获取resource目录下的文件(可用于各种linux服务器部署)【我】
    linux下svn与apache整合搭建
    liunx设置utf-8
    Fiddler抓包,并修改请求数据
    解决vue+el使用this.$confirm,不能阻断代码往下执行
  • 原文地址:https://www.cnblogs.com/faberbeta/p/13397726.html
Copyright © 2011-2022 走看看