Docker容器网络

Docker除了默认创建的三种网络外,还可以自定义网络。

首先创建一个bridge类型的网络,使用docker network create命令。

[root@promote ~]# docker network create --driver bridge new_net
8f0d50950bb7b86f01f5a62d6a322ede46fa893c515acf10d0e335fa28ccf234
[root@promote ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
b6a32ec430e9 bridge bridge local
9ab80c94885b host host local
8f0d50950bb7 new_net bridge local
c42335728d98 none null local

查看一下当前的网络变化。

[root@promote ~]# brctl show
bridge name bridge id STP enabled interfaces
br-8f0d50950bb7 8000.024233fc2bd6 no
docker0 8000.0242f338d5bb no

发现新增了一个网桥,这个网桥就是我们刚刚创建好的网络,可以发现网桥的名字就是刚刚创建的网络的短ID。

既然是我们自己创建的网络那么就可以自定义这个网络,接着重新创建一个网络并自定义这个网络的网段和网关。

[root@promote ~]# docker network create --driver bridge --subnet 192.168.1.0/24 --gateway 192.168.1.1 new2_net
44b6f73a2cd3fd0d5d17124ddb87c5f3dfca1a8ca2c90af1570b1dd4eaa71d67
[root@promote ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
b6a32ec430e9 bridge bridge local
9ab80c94885b host host local
44b6f73a2cd3 new2_net bridge local
8f0d50950bb7 new_net bridge local
c42335728d98 none null local

使用docker inspect可以看到new2_net网段的详细信息,可以注意到网段和网关都是我们自定义的。

[root@promote ~]# docker network inspect new2_net
[
{
"Name": "new2_net",
"Id": "44b6f73a2cd3fd0d5d17124ddb87c5f3dfca1a8ca2c90af1570b1dd4eaa71d67",
"Created": "2018-07-10T01:56:21.418800602-04:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.1.0/24",
"Gateway": "192.168.1.1"
}
]
},
"Internal": false,
"Attachable": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]

再查看一下网桥

[root@promote ~]# brctl show
bridge name bridge id STP enabled interfaces
br-44b6f73a2cd3 8000.02421dea9d8a no
br-8f0d50950bb7 8000.024233fc2bd6 no
docker0 8000.0242f338d5bb no
[root@promote ~]# ifconfig br-44b6f73a2cd3
br-44b6f73a2cd3: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.1.1 netmask 255.255.255.0 broadcast 0.0.0.0
ether 02:42:1d:ea:9d:8a txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

可以发现网桥上的IP就是刚刚创建的网络的网关。

接下来就是使用自己创建的网络,使用--network选项即可。

[root@promote ~]# docker run -it --name busybox --network new2_net docker.io/busybox
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:C0:A8:01:02
inet addr:192.168.1.2 Bcast:0.0.0.0 Mask:255.255.255.0
inet6 addr: fe80::42:c0ff:fea8:102/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:14 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1156 (1.1 KiB) TX bytes:578 (578.0 B) lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

可以看到这个容器的IP地址就是我刚刚创建的网络分配的。当然,这个IP地址还可以自己设置静态IP,当然不能设置为new2_net网络网段之外的IP,否则会报错。

使用--ip选项就可以了。

[root@promote ~]# docker run -it --name busybox --network new2_net --ip 192.168.1.5 docker.io/busybox
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:C0:A8:01:05
inet addr:192.168.1.5 Bcast:0.0.0.0 Mask:255.255.255.0
inet6 addr: fe80::42:c0ff:fea8:105/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:578 (578.0 B) TX bytes:578 (578.0 B) lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

可以看到Ip为自己设置的静态IP。

Docker容器学习与分享08的更多相关文章

  1. Docker容器学习与分享07

    Docker容器网络 在分享06中学完了bridge网络,接着学习none网络和host网络. Docker在安装时会在host上默认创建三个网络,分别是bridge.host.null. [root ...

  2. Docker容器学习与分享09

    Docker容器之间的相互通信 先新建两个不同的网段,就用分享08里的两个网段作为新建的网段. [root@promote ~]# docker network ls NETWORK ID NAME ...

  3. Docker容器学习与分享04

    Docker容器的基本操作(2) 基于docker分享03的centos容器,接着学习docker容器的基本操作. docker分享03中创建了一个centos镜像,如果想要查看容器的具体信息就要使用 ...

  4. Docker容器学习与分享03

    Docker容器的基本操作 所有的docker命令都是以docker开头,也就是指调用docker程序.我学习的第一个命令就是docker run,运行一个容器.以Docker分享02中的容器为例: ...

  5. Docker容器学习与分享10

    Docker容器向外提供服务 用分享04中的Nginx服务来试一下. 不过这次我直接用Nginx镜像创建容器,先下载Nginx镜像. [root@promote ~]# docker search n ...

  6. Docker容器学习与分享06

    Docker容器网络 Docker有三种原生网络:none网络.host网络.bridge网络. 先来学习一下bridge网络. 首先使用ifconfig命令查看一下本机的网络设备: 从图中可以看见多 ...

  7. Docker容器学习与分享05

    Docker镜像操作 学完了一些最基本的操作之后,我学习了一些关于docker镜像的基本操作. 首先来学习一下从docker hub上拉取镜像,以centos镜像为例,使用docker search命 ...

  8. Docker容器学习与分享02

    1.docker容器的创建 首先运行一个centos容器,感受一下Docker容器的便捷 首先先看一下镜像仓库 发现仓库里没有镜像,也就是没有创建容器的模板,这时考虑从REPOSITORY中拉取镜像( ...

  9. Docker容器学习与分享01

    1.什么是容器? 容器技术是一种虚拟化的方案,与传统的虚拟机不同,传统的虚拟机是通过中间层将一台或多台独立的机器虚拟运行于物理硬件之上,而容器是直接运行在操作系统内核之上的用户空间. 所以容器虚拟化又 ...

随机推荐

  1. Hibernate杂问

    1 谈谈你对ORM框架的基本思想的了解? 首先 ORM是 对象关系映射,是为了解决类似于JDBC实现对象持久化的问题开发的. 框架的基本特征:完成面向对象的编程语言到关系数据库之间的映射. 他的映射分 ...

  2. mongodb副本集数据同步的踩坑

    一.故事 最近随着搞活动比较频繁导致数据库出现了波动,后端日志总是报数据库连接和读取的问题.由于我设置的是读写分离(伪的,通过设置副本集的读取策略实现的,设置的db.getMongo().setRea ...

  3. winform 窗体中 Time 控件的用法

    作用: 用于背景进程中.通过引发Timer事件,Timer控件可以有规律的隔一段时间执行一次代码.也就是,你可以根据你自己的需要,给Timer控件设置时间,Timer每隔这段时间,就执行一次代码. 属 ...

  4. 安装svn过程

    1.SVN服务器端程序安装 --检测是否安装成功:svn --version2.创建版本库(仓库) 命令格式:svnadmin create 仓库的目录 3.启动服务器 <1>命令行方式 ...

  5. 机器人数目-2015决赛Java语言C组第一题

    标题:机器人数目 少年宫新近邮购了小机器人配件,共有3类,其中,A类含有:8个轮子,1个传感器B类含有: 6个轮子,3个传感器C类含有:4个轮子,4个传感器 他们一共订购了100套机器人,收到了轮子6 ...

  6. 从实例角度分析java的public、protected、private和default访问权限

    一.public 同一个package 1.本类内部 public class A { public int f=1; public void m1() {} public void m2() { f ...

  7. Software-Defined Networking之搬砖的故事

    在很久很久以前,有一个村子. 村里的每一户,都有一个男人和一个女人. 每一户,都以搬砖为生. 从不同的地方,搬到不同的地方. 男人负责搬砖,女人负责告诉男人往哪搬. 每个家庭,都服从村委会的指挥. 村 ...

  8. js-ES6学习笔记-Generator函数

    1.Generator 函数是 ES6 提供的一种异步编程解决方案.形式上,Generator 函数是一个普通函数,但是有两个特征.一是,function关键字与函数名之间有一个星号:二是,函数体内部 ...

  9. js-ES6学习笔记-Promise对象

    1.Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大. 2.所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作) ...

  10. 1.String、StringBuffer与StringBuilder之间区别

    1.三者在执行速度方面的比较:StringBuilder >  StringBuffer  >  String 2.String <(StringBuffer,StringBuild ...