Docker 网络命令详解

•docker network create
•docker network connect
•docker network ls
•docker network rm
•docker network disconnect
•docker network inspect

创建网络

zane@zane-V:~$ docker network create simple-network
zane@zane-V:~$ docker network inspect simple-network
 {
  "Name": "simple-network",
  "Id": "8bf58f43c56622d1100f7da9ef6506e45a4aa68556b586311f3756130c311d75",
  "Scope": "local",
  "Driver": "bridge",
  "EnableIPv6": false,
  "IPAM": {
   "Driver": "default",
   "Options": {},
   "Config": [
    {
     "Subnet": "172.20.0.0/16",
     "Gateway": "172.20.0.1/16"
    }
   ]
  },
  "Internal": false,
  "Containers": {},
  "Options": {},
  "Labels": {}
 }

•进入一个键值存储。引擎支持Consul,Etcd,ZooKeeper.
•在群集中的每个主机上正确配置的deamon引擎

支持overlay网络的docker选项:

•--cluster-store-opt

使用--subnet选项直接指定子网络,在bridge网络中只可以指定一个子网络,而在overlay网络中支持多个子网络。
除了--subnet,还可以指定:--gateway,--ip-range,--aux-address选项。

$ docker network create -d overlay \
--subnet=192.168.0.0/16 \
--subnet=192.170.0.0/16 \
--gateway=192.168.0.100 \
--gateway=192.170.0.100 \
--ip-range=192.168.1.0/24 \
--aux-address="my-switch=192.168.1.6" \
--aux-address="my-nas=192.170.1.6" \

如何要创建自己定制的网络,docker也是支持很多选项的。
可以指定网络的端口号:

$ docker run -d -P --name redis --network my-network redis

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bafb0c808c53 redis "/entrypoint.sh redis" 4 seconds ago Up 3 seconds 172.23.0.1:32770->6379/tcp redis

连接容器

可以连接已存在的容器到一个或者多个网络中。一个容器可以连接到多个不同网络驱动的网络中。
当连接一旦建立,容器便可以可其他的容器通讯,通过IP 或者 容器名称。

基本容器网络实例:

1.创建两个容器,container1 和 container2

$ docker run -itd --name=container1 busybox

$ docker run -itd --name=container2 busybox

zane@zane-V:~$ docker network create -d bridge --subnet 172.25.0.0/16 isolated_nw

3.连接container2到这个网络,然后验证一下:

zane@zane-V:~$ docker network connect isolated_nw container2

zane@zane-V:~$ docker network inspect isolated_nw
 {
  "Name": "isolated_nw",
  "Id": "a8208641505d2d8fc37bf7cbd1027c01f0def461815786e076ef4ae65b7b2f9b",
  "Scope": "local",
  "Driver": "bridge",
  "EnableIPv6": false,
  "IPAM": {
   "Driver": "default",
   "Options": {},
   "Config": [
    {
     "Subnet": "172.25.0.0/16"
    }
   ]
  },
  "Internal": false,
  "Containers": {
   "e9bce535ae32945f5e43340facdb6c16c93d92119e85b61c6cb7a5379a0caf63": {
    "Name": "container2",
    "EndpointID": "ef7244d32484407c3ec4aa30b7bdb0a6cbe3dbbfedc03e5c856ad20a08af172f",
    "MacAddress": "02:42:ac:19:00:02",
    "IPv4Address": "172.25.0.2/16",
    "IPv6Address": ""
   }
  },
  "Options": {},
  "Labels": {}
 }

注意container2,自动分配到了IP地址。此时container1,仍然连接在默认的bridge网络。

4.启动第三个container,但是这是使用--ip 选项指定它的IP地址,

zane@zane-V:~$ docker run --network=isolated_nw --ip=172.25.3.3 -itd --name=container3 busybox

5.检查container3使用的是哪个网络:

 "Networks": {
    "isolated_nw": {
     "IPAMConfig": {
      "IPv4Address": "172.25.3.3"
     },
     "Links": null,
     "Aliases": [
      "adf68dd9e09c"
     ],
     "NetworkID": "a8208641505d2d8fc37bf7cbd1027c01f0def461815786e076ef4ae65b7b2f9b",
     "EndpointID": "71d5d272d056b6111a83f0843a10d1944f1648f34d5099258d5865d053a939b0",
     "Gateway": "172.25.0.1",
     "IPAddress": "172.25.3.3",
     "IPPrefixLen": 16,
     "IPv6Gateway": "",
     "GlobalIPv6Address": "",
     "GlobalIPv6PrefixLen": 0,
     "MacAddress": "02:42:ac:19:03:03"
    }
   }
  }

6.检查container2使用的是哪个网络:

"Networks": {
    "isolated_nw": {
     "Aliases": [
      "e9bce535ae32"
     ],
     "EndpointID": "ef7244d32484407c3ec4aa30b7bdb0a6cbe3dbbfedc03e5c856ad20a08af172f",
     "Gateway": "172.25.0.1",
     "GlobalIPv6Address": "",
     "GlobalIPv6PrefixLen": 0,
     "IPAMConfig": {},
     "IPAddress": "172.25.0.2",
     "IPPrefixLen": 16,
     "IPv6Gateway": "",
     "Links": null,
     "MacAddress": "02:42:ac:19:00:02",
     "NetworkID": "a8208641505d2d8fc37bf7cbd1027c01f0def461815786e076ef4ae65b7b2f9b"
    }
   },

注意:container2 在两个网络中间,它加入了默认bridge网络,当你在创建它的时候,然后又连接它到了isolation_nw.

一个容器可以连接到多个网络中

7.使用docker attach 命令连接一个正在运行的容器,然后查看

zane@zane-V:~$ docker attach container2
/ # ifconfig -a
eth1  Link encap:Ethernet HWaddr 02:42:AC:19:00:02
   inet addr:172.25.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
   inet6 addr: fe80::42:acff:fe19:2/64 Scope:Link
   UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
   RX packets:86 errors:0 dropped:0 overruns:0 frame:0
   TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
   collisions:0 txqueuelen:0
   RX bytes:11780 (11.5 KiB) TX bytes:648 (648.0 B)

eth2  Link encap:Ethernet HWaddr 02:42:AC:11:00:03
   inet addr:172.17.0.3 Bcast:0.0.0.0 Mask:255.255.0.0
   inet6 addr: fe80::42:acff:fe11:3/64 Scope:Link
   UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
   RX packets:23 errors:0 dropped:0 overruns:0 frame:0
   TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
   collisions:0 txqueuelen:0
   RX bytes:3809 (3.7 KiB) TX bytes:648 (648.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:0
   RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

8.可以通过容器名称来相互连接

/ # ping -w 4 container3
PING container3 (172.25.3.3): 56 data bytes
64 bytes from 172.25.3.3: seq=0 ttl=64 time=0.077 ms
64 bytes from 172.25.3.3: seq=1 ttl=64 time=0.049 ms
64 bytes from 172.25.3.3: seq=2 ttl=64 time=0.047 ms
64 bytes from 172.25.3.3: seq=3 ttl=64 time=0.054 ms

虽然container1 和 container2 都在bridge网络中,但是他们是不支持 容器名称通信的。

zane@zane-V:~$ docker attach container2
/ # ping container3
PING container3 (172.25.3.3): 56 data bytes
64 bytes from 172.25.3.3: seq=0 ttl=64 time=0.042 ms
64 bytes from 172.25.3.3: seq=1 ttl=64 time=0.050 ms
64 bytes from 172.25.3.3: seq=2 ttl=64 time=0.063 ms
--- container3 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.042/0.051/0.063 ms

/ # ping -w 4 container1
ping: bad address 'container1'

/ # ping -w 4 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.104 ms
64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.052 ms
64 bytes from 172.17.0.2: seq=2 ttl=64 time=0.127 ms
64 bytes from 172.17.0.2: seq=3 ttl=64 time=0.057 ms

--- 172.17.0.2 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.052/0.085/0.127 ms

注意退出attach 时,使用ctr-p + ctr-q.
如果使用ctr-d 则会stop container.

zane@zane-V:~$ docker attach container3
/ # ping -w 4 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes

--- 172.17.0.2 ping statistics ---
4 packets transmitted, 0 packets received, 100% packet loss

上面的实验我们知道,用户自定义的网络,是可以相互解析容器名的,也就是可以用容器名来相互同行。

•定义网络别名 •--link=CONTAINER-NAME:ALIAS

1.断开container2和isolated_nw的连接,然后

zane@zane-V:~$ docker network disconnect isolated_nw container2

zane@zane-V:~$ docker network rm simple-network

•创建网络 •docker network create simple-network

•overlay网络条件 •进入一个键值存储

•支持overlay网络的docker选项 •--cluser-store

•指定子网络,网关,地址范围

•将容器添加到网络中 •docker network connect isolated_nw container2

•连接一个正在运行的容器 •docker attach

•attach 的退出 •ctr p + ctr q

•默认bridge网络不支持,容器名称通信,其他网络支持; •使用link 来支持默认网络的容器名称通信

•断开连接

•docker network disconnect isolated_nw container2

•删除网络

•docker network rm simple-network

•检测网络

•docker network inspect isolated_nw

(0)

相关推荐

  • Docker网络代理设置详解

    背景 在一些实验室环境,服务器没有直接连接外网的权限,需要通过网络代理.我们通常会将网络代理直接配置在/etc/environment./etc/profile之类的配置文件中,这对于大部分操作都是可行的.然而,docker命令却使用不了这些代理. 比如docker pull时需要从外网下载镜像,就会出现如下错误: $ docker pull hello-world Unable to find image 'hello-world:latest' locally Pulling reposit

  • Docker 网络模式(四种)详细介绍

    Docker 网络模式 本文首先介绍了Docker自身的4种网络工作方式, Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理.然而,Docker同样有着很多不完善的地方,网络方面就是Docker比较薄弱的部分.因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求. 四种网络模式 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: · host模式,使用--net=h

  • Docker为网络bridge模式指定容器ip的方法

    前言 众所周知bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace.设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上.下面来看看Docker为网络bridge模式指定容器ip的方法. 实现方法 如果只是简单创建一个bridge模式的网络是无法给容器指定ip的 [root@vultrvpn conf.d]# docker network create --driver bridge wordpress_net ad1ff3d972

  • Docker 手动配置容器网络实例详解

    Docker 手动配置容器网络 docker容器的网络是net命名空间与虚拟设备的结合,容器在启动时会创建一对虚拟接口veth pair,这一对接口分别放到本地和容器中,在本地的veth会被分配类似vethxxxx的名称并被桥接到指定网桥的上(默认为docker0),可以通过brctl show命令查看网桥上挂载的接口,在容器中的veth会从网桥获取一个未使用地址,该veth的名称会被更改为eth0并配置默认路由到vethxxxx,docker允许在启动容器的时候通过--net参数指定不同的网络

  • 详解Docker中VLAN网络模式的配置

    前言 Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理.然而,Docker同样有着很多不完善的地方,网络 方面就是Docker比较薄弱的部分.因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求. Docker网络模式选择 目前已有不少文章介绍了Docker的网络模型,但是在实际应用中还是有不少坑和需要注意的点 在Docker应用到生产环境的时候,网络模型的选择主要有以下几种 1.原生Bridge NAT模式 2.Linux Bridge

  • docker 学习笔记之docker连接网络的设置

    1.如果docker主机不需要通过代理连接外网 则docker的相关命令(如docker search)或docker容器与网络相关的操作都可以正常进行,不需要特殊设置. 2.当docker主机 是通过代理才能连接外网时,采用服务方式启动守护进程 如果docker守护进程是通过服务的方式启动的(sudo start docker) 当我们执行如  docker search ubuntu 命令时,会报错 Error response from daemon: Get https://index.

  • 详解Centos7 下建立 Docker 桥接网络

    前言 最近职业规划开始有了转变,在创业团队中一个人的角色不可能只有一个,说说我现在担任过的角色:配置管理,项目经理,售前技术支持,售后技术支持,测试,少许开发工作,产品策划:除了市场营销,其他杂七杂八的都干过了.最后我发现我最适合的职位也许是devops,这个岗位的工作内容请大家自行百度. 回正题,去年开始关注docker,直到今年看了坛子里的大神们对docker调研实践后,我决定也开始实践.就从改造公司研发和运维环境开始,这次的帖子主要是将自己构建docker桥接物理网络的过程讲述一遍,本来网

  • Docker 网络命令详解

    •docker network create •docker network connect •docker network ls •docker network rm •docker network disconnect •docker network inspect 创建网络 zane@zane-V:~$ docker network create simple-network zane@zane-V:~$ docker network inspect simple-network { "N

  • Docker基础命令详解

    docker基本概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上. Docker是一个重新定义了程序开发测试.交付和部署过程的开放平台,Docker则可以称为构建一次,到处运行,这就是docker提出的"Build once,Run anywhere" 创建镜像 创建镜像的方法有三种: 基于已有的容器创建 基于本地模板导入 基于dockerfile 基于已有的容器创建 主要使用docker

  • Docker常用命令详解

    一. 帮助命令 1. 查看当前docker版本 docker version 2. 显示 Docker 系统信息,包括镜像和容器数 docker info 3. 查看帮助文档,类似于CentOS的Man命令 docker --help 二. 镜像命令 1. 查看本地主机上的镜像: #列出本地所有的镜像(含中间映像层) docker images -a #只显示镜像ID docker images -q #显示完整的镜像信息 docker images --no-trunc 2.搜索镜像:http

  • Docker service命令详解(小结)

    在分布式应用程序中,应用程序的不同部分被称为"服务".例如,如果有一个视频共享网站,它可能包括一个用于将应用程序数据存储在数据库中的服务,一个在用户上传东西后在后台进行视频转码的服务,一个用于前端页面的服务等等. 服务实际上只是"生产中的容器".每个服务只运行一个映像,但它编码了镜像的运行方式 - 应该使用哪个端口,容器应运行多少个副本以满足性能要求等等. 伸缩服务可以更改运行该软件的容器实例的数量,从而为进程中的服务分配更多计算资源. 定义.运行和伸缩 Docke

  • Docker 最常用的镜像命令和容器命令详解

    本文列出了 Docker 使用过程中最常用的镜像命令和容器命令,以及教大家如何操作容器数据卷,实现容器数据的备份.熟练练习这些命令以后,再来一些简单的应用部署练习,大家就可以学习 Docker 的镜像构建.备份恢复迁移.镜像仓库.网络.集群等等更多的内容. 镜像相关命令 官方文档:https://docs.docker.com/reference/ 查看镜像 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZ

  • Docker 打包python的命令详解

    最近用Python写了一段爬虫程序,为了隔离其运行环境,易于分发,把项目打包成Docker镜像 Dockerfile FROM python:2.7.12-alpine ADD ./src /job CMD ["python", "/job/main.py"] 构建命令 $ docker build -t job . 运行 $ docker run -d --name job job 比较简单 以上所述是小编给大家介绍的Docker 打包python的命令详解,希望

  • docker备份linux系统的命令详解

    tar备份系统 sudo tar cvpzf backup.tgz --exclude=/proc --exclude=/mnt --exclude=/sys --exclude=/backup.tgz / 更多linux备份方法参考https://www.jb51.net/article/151167.htm 编写dockerflie 新建目录Dockerfile,在Dockerfile目录下编辑Dockerfile脚本,如下内容: FROM scratch COPY rootfs / RUN

  • docker版es、milvus、minio启动命令详解

    1.es启动命令: docker run -itd -e TAKE_FILE_OWNERSHIP=1111 -v /data/elasticsearch/data:/usr/share/elasticsearch/data -p 9200:9200 --name es elasticsearch:6.4.2 需要添加环境变量 TAKE_FILE_OWNERSHIP,值随意. 含义请参考我的另一篇文章://www.jb51.net/article/200198.htm 挂载目录用来存储es的数据.

  • Docker探索namespace详解

    Docker通过namespace实现了资源隔离,通过cgroups实现了资源限制,通过写时复制(copy-on-write)实现了高效的文件操作. 1.namespace资源隔离 namepsace的6项隔离: namespace 系统调用参数 隔离内容 UTS CLONE_NEWUTS 主机名与域名 IPC CLONE_NEWIPC 信号量,消息队列和共享内存 PID CLONE_NEWPID 进程编号 Network CLONE_NEWNET 网络设备,网络栈,端口等 Mount CLON

  • Docker Machine深入详解

    Docker 与 Docker Machine 的区别 Docker 是一个 Client-Server 架构的应用,人家是有官称的:Docker Engine.Docker 只是大家对 Docker Engine 的昵称,当然 Docker 还有其他的意思,比如一家公司的名称.简单起见,本文中的 Docker 等同于 Docker Engine. 提到 Docker 我们必须要知道它包含了三部分内容: Docker daemon 一套与 Docker daemon 交互的 REST API 一

随机推荐