docker的四种网络模式

/*

    1. host模式 :

                        docker run 使用 --net=host指定

        docker使用的网络实际上和宿主机一样

    2. container模式:

                        使用 --net=container:container_id/container_name

        多个容器使用共同的网络,看到的ip是一样的。

    3. none 模式

                        使用 --net=none指定

        这种模式下,不会配置任何网络。

     4. bridge模式

                        使用 --net=bridge指定

        默认模式,不会指定

                此模式会为每个容器分配一个独立的network namespace
*/
/* 外部网络访问容器 :外部的用户要访问容器,先将容器的ip映射出去,然后客户利用宿主机的ip来访问*/
[[email protected] /]# yum install -y httpd
//虽然报错,但是httpd已经启动
[[email protected] /]# /usr/sbin/httpd
AH00558: httpd: Could not reliably determine the server‘s fully qualified domain name, using 172.17.0.3. Set the ‘ServerName‘ directive globally to suppress this message
[[email protected] /]# ps aux|grep httpd
root       111  0.1  0.3 221856  3480 ?        Ss   11:41   0:00 /usr/sbin/httpd
apache     112  0.0  0.2 221856  2632 ?        S    11:41   0:00 /usr/sbin/httpd
apache     113  0.0  0.2 221856  2632 ?        S    11:41   0:00 /usr/sbin/httpd
apache     114  0.0  0.2 221856  2632 ?        S    11:41   0:00 /usr/sbin/httpd
apache     115  0.0  0.2 221856  2632 ?        S    11:41   0:00 /usr/sbin/httpd
apache     116  0.0  0.2 221856  2632 ?        S    11:41   0:00 /usr/sbin/httpd
root       118  0.0  0.0   8988   812 ?        S+   11:41   0:00 grep --color=auto httpd

/* !!!!但对于外部来说,是无法访问容器里的httpd的 */

//先利用容器生成镜像
[[email protected] ~]# docker commit -m "centos_with_httpd" -a "frankie" 30c centos_with_httpd:frankie
fb83cd744da57dba7fb3e5bf861bd0d014da7508b8f47adeb1a3fd4ac01252ed
[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos_with_httpd   frankie             fb83cd744da5        2 minutes ago       325.8 MB

// -p 可以指定端口映射
[[email protected] ~]# docker run -itd -p 5123:80 centos_with_httpd:frankie bash
3f043c0dc5b456e53ff040d53d1455cbaa6bedad7d35954be3718a859bea8c24

//进入映射了端口的容器里
[[email protected] ~]# docker exec -it 3f0 bash

//启动httpd服务
[[email protected] /]# /usr/sbin/httpd
AH00558: httpd: Could not reliably determine the server‘s fully qualified domain name, using 172.17.0.12. Set the ‘ServerName‘ directive globally to suppress this message
[[email protected] /]# ps aux|grep httpd
root        33  0.1  0.3 221856  3508 ?        Ss   11:55   0:00 /usr/sbin/httpd
apache      34  0.0  0.2 221856  2632 ?        S    11:55   0:00 /usr/sbin/httpd
apache      35  0.0  0.2 221856  2632 ?        S    11:55   0:00 /usr/sbin/httpd
apache      36  0.0  0.2 221856  2632 ?        S    11:55   0:00 /usr/sbin/httpd
apache      37  0.0  0.2 221856  2632 ?        S    11:55   0:00 /usr/sbin/httpd
apache      38  0.0  0.2 221856  2632 ?        S    11:55   0:00 /usr/sbin/httpd
root        40  0.0  0.0   8988   812 ?        S+   11:55   0:00 grep --color=auto httpd

//成功启动httpd,所以可以连接到
[[email protected] /]# curl localhost
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
                <title>Apache HTTP Server Test Page powered by CentOS</title>
                <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <!-- Bootstrap -->
    <link href="/noindex/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="noindex/css/open-sans.css" type="text/css" />

<style type="text/css"><!--
...
...

[[email protected] /]# vi /var/www/html/1.html
[[email protected] /]# curl localhost/1.html
frankielinux.com
[[email protected] /]# exit

//回到宿主机 ,查看docker的ip
[[email protected] ~]# ifconfig
docker0   Link encap:Ethernet  HWaddr 12:90:97:4F:79:75
          inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::e443:adff:fe6d:3b2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:11858 errors:0 dropped:0 overruns:0 frame:0
          TX packets:30521 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:480913 (469.6 KiB)  TX bytes:41003387 (39.1 MiB)

//通过httpd连接,则可以在外部连接容器
[[email protected] ~]# curl 172.17.42.1:5123/1.html
frankielinux.com

//这个容器有端口映射
[[email protected] ~]# docker ps
CONTAINER ID        IMAGE                       COMMAND             CREATED             STATUS              PORTS                  NAMES
3f043c0dc5b4        centos_with_httpd:frankie   "bash"              10 minutes ago      Up 10 minutes       0.0.0.0:5123->80/tcp   boring_ardinghelli
/* 容器互联 */
/* 所以可以开启一个新的容器,

 用Centos6的镜像来做一个容器--然后来用yum源来安装MySQL
*/

[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos_with_httpd   frankie             fb83cd744da5        About an hour ago   325.8 MB
centos-6-x86        latest              c37f3636c1f8        21 hours ago        343.8 MB
centos_with_net     latest              c5b412fe1c33        22 hours ago        294.1 MB
centos              latest              d83a55af4e75        4 weeks ago         196.7 MB
frankie             latest              d83a55af4e75        4 weeks ago         196.7 MB
registry            latest              ad8da6d14f6d        4 weeks ago         33.28 MB
[[email protected] ~]# docker run -itd centos-6-x86 bash
faaa5d792a21f3735e4ade09a9767ab90a54c13b19084a9b004b4dd595615310
[[email protected] ~]# docker exec -it faaa bash
[[email protected] /]# yum install -y mysql-server
Loaded plugins: fastestmirror
Setting up Install Process
base                                                                            | 3.7 kB     00:00
base/primary_db                                                                 | 4.7 MB     00:06
extras                                                                          | 3.4 kB     00:00
extras/primary_db                                                               |  37 kB     00:00
[[email protected] /]# /etc/init.d/mysqld start
Initializing MySQL database:  Installing MySQL system tables...
OK
Filling help tables...
OK

[[email protected] /]# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      -
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node PID/Program name    Path
unix  2      [ ACC ]     STREAM     LISTENING     27434  -                   /var/lib/mysql/mysql.sock
[[email protected] /]# exit
[[email protected] ~]# docker commit -m "centos_with_mysql" -a "frankie" faaa centos6_with_mysql
5c15987b3c3ac435be66b773410384bd2b17e4ac640876ab0687a931ee1bb0fb
[[email protected] ~]# docker run -itd -p 13306:3306 centos6_with_mysql bash
afbe47d822beccbb74bd379974b9f2507ac56c2c71a176ab41aceaa7b269aed4
[[email protected] ~]# docker ps
CONTAINER ID        IMAGE                       COMMAND             CREATED                                 PORTS                     NAMES
afbe47d822be        centos6_with_mysql          "bash"              5 seconds ag                            0.0.0.0:13306->3306/tcp   ecstatic_sinoussi

[[email protected] ~]# docker run -itd -p 18080:80 --name web --link ecstatic_sinou                       ssi:db centos_with_httpd:frankie
a21afaa4da5bcb8c6197bf781a6731cfaf28a853a06fe865225a9897f1eb743d
[[email protected] ~]# docker ps
CONTAINER ID        IMAGE                       COMMAND             CREATED                                    STATUS              PORTS                     NAMES
a21afaa4da5b        centos_with_httpd:frankie   "bash"              15 seconds a                       go      Up 9 seconds        0.0.0.0:18080->80/tcp     web
[[email protected] ~]# docker exec -it web bash
[[email protected] /]# ping db
PING db (172.17.0.14) 56(84) bytes of data.
64 bytes from db (172.17.0.14): icmp_seq=1 ttl=64 time=22.1 ms
64 bytes from db (172.17.0.14): icmp_seq=2 ttl=64 time=0.065 ms
^C
--- db ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 0.065/11.105/22.146/11.041 ms
[[email protected] /]# cat /etc/hosts
172.17.0.15     a21afaa4da5b
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.14     db afbe47d822be ecstatic_sinoussi
时间: 2024-10-10 01:53:40

docker的四种网络模式的相关文章

2.2 docker四种网络模式

Docker 网络管理 - 四种网络模式 * host模式   (容器的网络,寄居于宿主机.容器和宿主机网络一样.) 使用docker run时使用--net=host指定 docker使用的网络实际上和宿主机一样,在容器内看到的网卡ip是宿主机上的ip.相当于寄存于宿主机的网络.它有一定的局限性,如容器里开启了80端口,宿主机也开启了80端口,会产生冲突. 例如:docker run -it --rm --net=host centos bash   #退出容器,自动删除容器. * conta

docker: 四种网络模式

Docker 四种网络模式 四种网络模式摘自 Docker 网络详解及 pipework 源码解读与实践 docker run 创建 Docker 容器时,可以用 --net 选项指定容器的网络模式,Docker 有以下 4 种网络模式: host 模式,使用 --net=host 指定. container 模式,使用 --net=container:NAMEorID 指定. none 模式,使用 --net=none 指定. bridge 模式,使用 --net=bridge 指定,默认设置

云计算进阶学习路线图课件:Docker容器的四种网络模式

Docker容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装Docker引擎的服务器上,也可以实现虚拟化.随着云计算的飞速发展以及企业需求的多样化,Docker容器技术成为云计算人才必备的技能之一.很多人想要快速掌握Docker容器技术,接下来就给大家讲解Docker容器的四种网络模式. 1.closed container 封闭式网络模式 没有网络协议栈的通信使用none模式,Docker容器拥有自己的Network Nam

docker的4种网络模式

关于docker网络模式有四种,内容如下,至于内容从来哪的,网上一大把呢.也不知道是谁的. Docker的4种网络模式 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: ·host模式,使用--net=host指定. ·container模式,使用--net=container:NAME_or_ID指定. ·none模式,使用--net=none指定. ·bridge模式,使用--net=bridge指定,默认设置.

[docker]docker的四种网络方式

声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! bridge方式(默认) Host IP为186.100.8.117, 容器网络为172.17.0.0/16下边我们看下docker所提供的四种网络:创建容器:(由于是默认设置,这里没指定网络--net="bridge".另外可以看到容器内创建了eth0) [[email protected] ~]# docker

Docker(十四)-Docker四种网络模式

Docker 安装时会自动在 host 上创建三个网络,我们可用 docker network ls 命令查看: none模式,使用--net=none指定,该模式关闭了容器的网络功能. host模式,使用--net=host指定,容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口. bridge模式,使用--net=bridge指定,默认设置 ,此模式会为每一个容器分配.设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables na

vbox的四种网络模式

一.NAT模式 特点: 1.如果主机可以上网,虚拟机可以上网 2.虚拟机之间不能ping通 3.虚拟机可以ping通主机(此时ping虚拟机的网关,即是ping主机) 4.主机不能ping通虚拟机 应用场景: 虚拟机只要求可以上网,无其它特殊要求,满足最一般需求 二.Bridged Adapter模式(桥接模式) 特点: 1.如果主机可以上网,虚拟机可以上网 2.虚拟机之间可以ping通 3.虚拟机可以ping通主机 4.主机可以ping通虚拟机 以上各点基于一个前提:主机可以上网 5.如果主机

docker学习3-虚拟网络模式

一.虚拟机网络模式 在理解docker网络隔离前,先看下之前虚拟机里对网络的处理,VirtualBox中有4中网络连接方式: NAT Bridged Adapter Internal Host-only Adapter VMWare中有三种,其实他跟VMWare 的网络连接方式都是一样概念,只是比VMWare多了Internal方式. 要让自己(或别人)理解深刻,方法就是做比较和打比方,比较之间的不同和相同,拿熟知的事物打比方.先来一张图,通过这张图就很容易看出这4种方式的区别: NAT:Net

【转】虚拟机四种网络连接模式比较

转载地址:http://blog.csdn.net/terryzero/article/details/6016130 虚拟机一直用,但选择网络时的四种模式总是搞不清楚,只知道选择bridge最好用.为了能更深入了了解,查询了些资料,总结如下 第一种 NAT模式 Vhost访问网络的所有数据都是由主机提供的,vhost并不真实存在于网络中,主机与网络中的任何机器都不能查看和访问到Vhost的存在. 虚拟机与主机:虚拟机可以通过网络访问到主机,主机无法通过网络访问到虚拟机. 虚拟机与其他主机:虚拟