Docker容器网络

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

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

  1. [root@promote ~]# docker network create --driver bridge new_net
  2. 8f0d50950bb7b86f01f5a62d6a322ede46fa893c515acf10d0e335fa28ccf234
  3. [root@promote ~]# docker network ls
  4. NETWORK ID NAME DRIVER SCOPE
  5. b6a32ec430e9 bridge bridge local
  6. 9ab80c94885b host host local
  7. 8f0d50950bb7 new_net bridge local
  8. c42335728d98 none null local

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

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

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

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

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

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

  1. [root@promote ~]# docker network inspect new2_net
  2. [
  3. {
  4. "Name": "new2_net",
  5. "Id": "44b6f73a2cd3fd0d5d17124ddb87c5f3dfca1a8ca2c90af1570b1dd4eaa71d67",
  6. "Created": "2018-07-10T01:56:21.418800602-04:00",
  7. "Scope": "local",
  8. "Driver": "bridge",
  9. "EnableIPv6": false,
  10. "IPAM": {
  11. "Driver": "default",
  12. "Options": {},
  13. "Config": [
  14. {
  15. "Subnet": "192.168.1.0/24",
  16. "Gateway": "192.168.1.1"
  17. }
  18. ]
  19. },
  20. "Internal": false,
  21. "Attachable": false,
  22. "Containers": {},
  23. "Options": {},
  24. "Labels": {}
  25. }
  26. ]

再查看一下网桥

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

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

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

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

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

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

  1. [root@promote ~]# docker run -it --name busybox --network new2_net --ip 192.168.1.5 docker.io/busybox
  2. / # ifconfig
  3. eth0 Link encap:Ethernet HWaddr 02:42:C0:A8:01:05
  4. inet addr:192.168.1.5 Bcast:0.0.0.0 Mask:255.255.255.0
  5. inet6 addr: fe80::42:c0ff:fea8:105/64 Scope:Link
  6. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  7. RX packets:7 errors:0 dropped:0 overruns:0 frame:0
  8. TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
  9. collisions:0 txqueuelen:0
  10. RX bytes:578 (578.0 B) TX bytes:578 (578.0 B)
  11. lo Link encap:Local Loopback
  12. inet addr:127.0.0.1 Mask:255.0.0.0
  13. inet6 addr: ::1/128 Scope:Host
  14. UP LOOPBACK RUNNING MTU:65536 Metric:1
  15. RX packets:0 errors:0 dropped:0 overruns:0 frame:0
  16. TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
  17. collisions:0 txqueuelen:1000
  18. 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. 第二章 Servlet基础

    这章我们主要的目标 理解Servlet Servlet的编码和部署 Servlet生命周期 Servlet的配置 Servlet与容器交互    什么是Servlet -是运行在Web服务器或应用服务 ...

  2. sql server数据库查看锁表和解锁

    --查看锁表: select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys ...

  3. nginx 跳转系列

    1.nginx强制跳转https配置,通过http状态吗实现,http状态吗地址: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/3 ...

  4. picker(级联)组件及组件封装经验

    组件封装的几个经验 a.参数:最佳方式,仅一个object参数,所需要的实际参数,作为对象属性传入. 如此,便于数据的处理和扩展.例如,后期扩展需要增加参数,或者调整参数时,如果使用的对象传入,老的调 ...

  5. 【SpringBoot系列3】SpringBoot使用事务和AOP

    前言: 因为SpringBoot操作两者实在太简单了,我就放一起来写了. 正文(事务): /** * springboot中运用事务 * 真的超级方便,直接加上注解就ok了,连配置都省了 * @ret ...

  6. Eclipse MAT:浅堆 vs 保留堆

    来自:唐尤华 https://dzone.com/articles/eclipse-mat-shallow-heap-retained-heap 有没有想要搞清楚浅堆(Shallow Heap)和保留 ...

  7. CPU简单科普

    CPU简单科普 本文仅限于对小白科普. 误解一:CPU使用率和硬盘使用率一样. 误解二:一台电脑只有一个CPU. 误解三:CPU的核数,就是CPU的数量. 误解三:CPU主频越高越厉害:CPU核数越多 ...

  8. 怎么在XY图表中添加注解(LightningChart控件为例)?

    场景: 折线图上有多个信号,每个信号都需要显示在自己的Y轴上.如何在屏幕的右侧显示每个信号的基本统计值?这里有为每个信号计算基本数据: 最小值,最大值,平均值. | |Signal 3........ ...

  9. MVC架构中,用户的请求简单梳理

    MVC架构中,用户的请求分为下面3个步骤: 终端用户发送请求,路由器将请求路由到合适的Controller,Controller是逻辑实体和行为action的集合. Controller将请求映射到特 ...

  10. SQL Server ——用 join on 连接多个表

    select * from table1 inner join table2 on table1.id=table2.id 其实 INNER JOIN ……ON的语法格式可以概括为: FROM ((( ...