Docker网络管理-网络模式

简介:

docker有四种网络模式:

  • host模式,使用docker run时使用--net=host指定docker使用的网络实际上和宿主机一样,在容器内看到的网卡ip是宿主机上的ip
  • container模式,使用--net=container:container_id/container_name多个容器使用共同的网络,看到的ip是一样的
  • none模式,使用--net=none指定这种模式下,不会配置任何网络
  • bridge模式,使用--net=bridge指定默认模式,不用指定默认就是这种网络模式。这种模式会为每个容器分配一个独立的Network Namespace。类似于vmware的nat网络模式。同一个宿主机上的所有容器会在同一个网段下,相互之间是可以通信的。

host模式

[root@centos7 ~]# docker run -it --rm --name=centos-test --net=host centos-7-x86_64-minimal bash
##--rm :当进入到容器后,退出时将删除该容器
Docker网络管理-网络模式

##以上可以看到和宿主机的IP一样

container模式

1、创建一个容器
[root@centos7 ~]# docker run -itd --name test centos bash
332c789ad9cf5ac721a1ef0becf061d2f95b99051239caa99e5641870eb341dc

2、进入到容器

docker exec -it test bash
IP:172.17.0.3

Docker网络管理-网络模式

3、再新建一个容器
[root@centos7 ~]# docker run -it --net=container:test --name test2 centos_with_net bash

Docker网络管理-网络模式

##IP一致

none模式

[root@centos7 ~]# docker run -it --rm --net=none --name test3 centos_with_net bash

就只有一个本地的网卡
Docker网络管理-网络模式

bridge模式

平时使用的模式。
Docker网络管理-如何让外部网络访问docker资源
1、可以指定端口映射,本例中将容器的80端口映射为本地的5123端口
docker run -itd -p 5123:80 centos-httpd bash //-p

2、新建一个容器,并安装httpd
[root@centos7 ~]# docker run -it --name=httpd centos-7-x86_64-minimal bash
[root@9a98ecf75df4 /]# yum install httpd

3、启动httpd
[root@9a98ecf75df4 /]# httpd

[root@9a98ecf75df4 /]# yum install net-tools -y

Docker网络管理-网络模式

4、将test容器保存为新的镜像:
[root@centos7 ~]# docker commit -m "centos_installd_httpd" -a "jack" httpd centos_with_httpd:jack
sha256:3167350a47e6a229db0c9bdbb2bba8ac08a4a890fcbe8e28c3fc0c31b784af8e

5、查看
Docker网络管理-网络模式

6、做端口映射
[root@centos7 ~]# docker run -itd --name test-httpd -p 5123:80 centos_with_httpd:jack bash
2f42ddcaf332597ad3610ce7be85d62dc2047fa2d035bcc304396d0dab8c3734
##-p:指定映射端口
##将宿主机的某端口映射到容器的80端口
7、进入test-httpd容器:
[root@centos7 ~]# docker exec -it test-httpd bash

8、启动httpd
[root@2f42ddcaf332 /]# httpd

9、创建测试文件
[root@2f42ddcaf332 /]# vi /var/www/html/test.html

jack is this!!!

10、测试
[root@2f42ddcaf332 /]# curl localhost/test.html 
jack is this!!!

11、在宿主机测试:
[root@centos7 ~]# curl 192.168.3.74:5123/test.html
jack is this!!!

##测试通过,可以访问

Docker网络管理-容器互联

在同一台母机上的容器可以通过IP连接,配置容器互联后,容器之间可以通过name进行连接。
1、查看容器 test-httpd的IP
Docker网络管理-网络模式

2、用另外一台容器访问test-httpd的页面
Docker网络管理-网络模式

可以访问!!!

准备工作
创建一个数据库容器data:
1、创建容器db:
[root@centos7 ~]# docker run -itd --name db centos_with_net /usr/sbin/init
813475c73973a82c9eb5b8b065b9624249f9170f697fcff8fe20b5e2d2f78c7e

2、[root@centos7 ~]# docker exec -it db bash

3、安装数据库
[root@813475c73973 /]# yum install -y mariadb mariadb-server

启动mariadb:
[root@813475c73973 /]# systemctl start mariadb
Failed to get D-Bus connection: Operation not permitted

报错:没有权限操作
因为在创建容器时没有加上--privileged
使用该参数,container内的root拥有真正的root权限。

解决:1、重新创建
[root@centos7 ~]# docker run -itd --privileged --name db centos_with_net /usr/sbin/init

2、安装再启动
Docker网络管理-网络模式

有了端口

保存新的镜像
[root@centos7 ~]# docker commit -m "centos_with_mariadb" -a "jack" db centos_with_mariadb

创建数据库容器data:
[root@centos7 ~]# docker run -itd --privileged --name data -p 13306:3306 centos_with_mariadb /usr/sbin/init

连接数据库容器
1、新建一个web容器并和data容器互联:
[root@centos7 ~]# docker run -itd -p 18080:80 --name web --link data:webdb centos_with_httpd:jack /usr/sbin/init
75755f2ee34a6f25072e85faada5f6582d2fb6351b70224a52f47376359ac6cf
“–link=data:webdb”,这个参数就是告诉Docker容器需要使用“data”容器,并将其别名命名为webdb,这样在这两个容器里就可以使用“webdb”来作为提供mysql数据库服务的机器名。所以在最后启动参数里我们使用的是“/usr/bin/mysql -h webdb -u root -pletmein”来连接mysql数据库的。

You have new mail in /var/spool/mail/root
[root@centos7 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
75755f2ee34a centos_with_httpd:jack "/usr/sbin/init" 4 seconds ago Up 3 seconds 0.0.0.0:18080->80/tcp web

2、在web上运行env命令可以查看到关于db的环境变量:
Docker网络管理-网络模式

Docker网络管理-配置桥接网络

为了使本地网络中的机器和Docker容器更方便的通信,我们经常会有将Docker容器配置到和主机同一网段的需求。这个需求其实很容易实现,我们只要将Docker容器和宿主机的网卡桥接起来,再给Docker容器配上IP就可以了。

系统:centos7.2
宿主机网卡信息:
nameeno16777736
IP:192.168.3.74
gateway:192.168.3.1

停止docker服务
[root@centos7 ~]# systemctl stop docker

删除docker0网卡

安装网桥配置命令:
[root@centos7 ~]# yum install -y bridge-utils
[root@centos7 ~]# ifconfig docker0 down
[root@centos7 ~]# brctl delbr docker0

1、cd /etc/sysconfig/network-scripts/;cp ifcfg-eno16777736 ifcfg-br0
2、更改BRIDGE为br0;删除IPADDR,NETMASK,GATEWAY,DNS1
[root@centos7 network-scripts]# vi /etc/sysconfig/network-scripts/ifcfg-eno16777736

TYPE=Ethernet
#MACADDR=00:50:56:2D:75:E7
#BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
UUID=bb3b3feb-b209-4e36-ba0f-6022977c84d0
DEVICE=eno16777736
ONBOOT=yes
BRIDGE=br0
#IPADDR=192.168.3.77
#NETWORK=255.255.255.0
#GATEWAY=192.168.3.1
#DNS1=202.96.128.86

3、修改DEVICE为br0,Type为Bridge,配置网络设置ipaddr
[root@centos7 network-scripts]# vi /etc/sysconfig/network-scripts/ifcfg-br0

TYPE=Bridge
MACADDR=00:50:56:2D:75:E7
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=br0
UUID=bb3b3feb-b209-4e36-ba0f-6022977c84d0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.3.74
NETMASK=255.255.255.0
GATEWAY=192.168.3.1
DNS1=202.96.128.86

4、systemctl restart network

ping www.baidu.com是否正常
5、正常情况下是:
Docker网络管理-网络模式

 安装pipwork
 1、[root@centos7 ~]# cd /home/

[root@centos7 home]# cp pipework/pipework /usr/local/bin/

2、[root@centos7 home]# cp pipework/pipework /usr/local/bin/

3、新建没有网络的容器
[root@centos7 home]# docker run -itd --privileged --net=none --name jack123 centos_with_net  /usr/sbin/init
818d0c9c7d37eecf6407f707f9ad95d7154a1c31d6501646a252768d9d1fead9
配置IP,192.168.3.78/24 :设置IP/子网掩码 @后面:网关
root@centos7 home]# pipework br0  jack123 192.168.3.78/24@192.168.3.1
[root@centos7 home]# docker exec -it jack123 bash
[root@818d0c9c7d37 /]# ifconfig 
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.3.78  netmask 255.255.255.0  broadcast 192.168.3.255
        ether ce:eb:38:0a:97:8d  txqueuelen 1000  (Ethernet)
        RX packets 86  bytes 10422 (10.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1  bytes 42 (42.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
验证:
[root@818d0c9c7d37 /]# ping 192.168.3.74
PING 192.168.3.74 (192.168.3.74) 56(84) bytes of data.
64 bytes from 192.168.3.74: icmp_seq=1 ttl=64 time=0.326 ms
64 bytes from 192.168.3.74: icmp_seq=2 ttl=64 time=0.091 ms

[root@818d0c9c7d37 /]# ping 192.168.3.83
PING 192.168.3.83 (192.168.3.83) 56(84) bytes of data.
64 bytes from 192.168.3.83: icmp_seq=1 ttl=64 time=1.44 ms


###可以ping通,搭建完成














本文转自方向对了,就不怕路远了!51CTO博客,原文链接:http://blog.51cto.com/jacksoner/2051041 ,如需转载请自行联系原作者




相关文章
|
27天前
|
域名解析 网络协议 虚拟化
vmware 提供的三种网络工作模式
本文介绍了VMware虚拟机的三种网络工作模式:Bridged(桥接模式)、NAT(网络地址转换模式)和Host-Only(仅主机模式)。桥接模式将虚拟机与主机通过虚拟网桥连接,实现与物理网络的直接通信;NAT模式通过虚拟NAT设备和DHCP服务器使虚拟机联网;Host-Only模式则将虚拟机与外网隔离,仅与主机通信。此外,文章还简要介绍了网络相关的基础知识,包括主机名、IP地址、子网掩码、默认网关和DNS服务器。
49 3
|
2月前
|
Docker 容器
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
36 5
|
27天前
|
Docker 容器
【赵渝强老师】Docker的None网络模式
Docker容器在网络方面实现了逻辑隔离,提供了四种网络模式:bridge、container、host和none。其中,none模式下容器具有独立的网络命名空间,但不包含任何网络配置,仅能通过Local Loopback网卡(localhost或127.0.0.1)进行通信。适用于不希望容器接收任何网络流量或运行无需网络连接的特殊服务。
|
27天前
|
Docker 容器
【赵渝强老师】Docker的Host网络模式
Docker容器在网络环境中是隔离的,可通过配置不同网络模式(如bridge、container、host和none)实现容器间或与宿主机的网络通信。其中,host模式使容器与宿主机共享同一网络命名空间,提高性能但牺牲了网络隔离性。
|
27天前
|
Kubernetes Docker 容器
【赵渝强老师】Docker的Container网络模式
Docker容器在网络环境中彼此隔离,但可通过配置不同网络模式实现容器间通信。其中,container模式使容器共享同一网络命名空间,通过localhost或127.0.0.1互相访问,提高传输效率。本文介绍了container模式的特点及具体示例。
|
27天前
|
Linux Docker 容器
【赵渝强老师】Docker的Bridge网络模式
本文介绍了Docker容器的网络隔离机制及其四种网络模式:bridge、container、host和none。重点讲解了默认的bridge模式,通过示例演示了如何创建自定义bridge网络并配置容器的网络信息。文中还附有相关图片和视频讲解,帮助读者更好地理解Docker网络的配置和使用方法。
|
16天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的知识,并提供一些实用的技巧和建议,帮助读者更好地保护自己的网络安全和信息安全。
|
5天前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
|
6天前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
23 10
|
8天前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的内容,并提供一些实用的代码示例。通过阅读本文,您将了解到如何保护自己的网络安全,以及如何提高自己的信息安全意识。
33 10