首页 > 其他分享 >docker ——网络配置和管理

docker ——网络配置和管理

时间:2024-04-09 19:58:14浏览次数:25  
标签:容器 0.0 配置 网络 hmm docker root

docker网络基础

了解docker网络

两种docker网络

  • 单主机与多主机的docker网络

网络驱动

网络驱动 介绍
bridge 桥接网络,这是默认的网络驱动程序
host 主机网络
overlay 覆盖网络
macvlan 将mac地址分配给容器,使容器作为网络上的物理设备
none 表示关闭容器的所有网络连接
网络插件 可以通过Docker安装和使用第三方的网络插件

选择网络驱动的原则

  • 用户自定义桥接网络最适合用于同一个docker主机上运行多个容器之间需要通信的场景。
  • host乌拉盖诺最适用于当网不能与docker主机隔离,而容器的其他地方需要被隔离的场景
  • overlay网络适用于不同docker主机上运行的容器需要的通信的场景,或者多个应用程序通过Swarm集群服务一起工作的场景
  • macvlan网络适用于从虚拟机迁移过来的场景,或者向网络上的乌力吉一样,拥有独立的mac地址的场景
  • 迪斯拉罕网络插件适用与将docker与专用网络栈进行集成的场景

容器的网络模式

创建容器时,可以指定容器的我那个若模式。docker可以有以下四种模式:
一.bridge 模式
1.了解

  • 生产环境中被弃用。
    image
    • docker守护进程为每一个启动的容器创建一个VETH对 设备。VETH对设备总是成对出现,他们组成了一个数据通道。数据从一个设备进入,就会从另一个设备出来。
      image
  • 默认配置运行一个容器,会添加一张VETH的网卡。
  • 删除容器,网卡消失。
  • docker0 是docker的守护进程一启动,就会在主机上创建docker0的虚拟网桥
    2.操作
    (1).查看网络连接和查看网络详细信息
[root@hmm ~]# docker network inspect bridge  //查看网络详情
[
    {
        "Name": "bridge",
        "Id": "5afc9ac7b6a51ccd2d1a6fe00c6b5e64760817ff084b8d10609cf52686978a49",
        "Created": "2024-04-09T16:01:59.731474913+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "0557f384f47cc9a105ea79770dcaa5455c1b501dfb5cd8d2e7844ef18ef1c8cf": {
                "Name": "gifted_shannon",
                "EndpointID": "5dd14220ecb730e61bafb08715a4acab3ebb4fe5492bbe377fe79da3cdcd524f",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            },
            "34f04786c73664ed062d99fc4b8d96a462810e581573f2278ea80d11dbfa548b": {
                "Name": "myregistry",
                "EndpointID": "b8a0deb96a314ead633c3d7dca013124144cbebac4b385fb7e4e07242f3e55ed",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]
[root@hmm ~]# docker network ls   //查看网络列表
NETWORK ID     NAME      DRIVER    SCOPE
5afc9ac7b6a5   bridge    bridge    local
67bc430327bc   host      host      local
5f92e59bee8f   none      null      local

eg:

  • 容器的网络桥接信息中,网络和默认桥接网络完全对应
    docker守护进程为每一个启动的容器

二.host模式
1.了解host模式

  • 选择host模式的容器使用host驱动,直接连接到docker主机网络栈。这种网络模式实质上是关闭docker网络,而让容器直接使用主机操作系统的网络
  • host模式没有为容器创建一个隔离的网络环境,容器没有隔离的网络名称空间,也不会获得一个独立的网络名称空间,而是和docker主机共用一个网络名称空间

三.container模式
1.了解

  • 主要用于容器和容器的直接频繁交流的情况
  • 该模式指定新创建的容器和现有的一个容器,而不是和docker主机共享同一个网络名称空间
  • 两个容器除了网络方面,其他的如文件系统,进程列表等还是互相隔离的。两个容器的进程可以通过回环网络接口进行通信的
    image
    四.none模式
    1.了解
  • 将容器放置在自己的网络栈中,但是并不进行任何配置,实际上关闭了容器的网络功能。
    五。用户自定义网络
    1.了解
  • 可以使用docker网络驱动,或第三方网络驱动插件创建一个自定义的网络,然后将多个容器连接到同一个自定义网络
  • 用户自定义桥接网络与默认桥接网络的主要区别
  • 优点:可以通过名称或者别名互相访问。

2.实操
(1)默认情况下,容器之间不能用别名访问

[root@hmm ~]# docker ps 
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS             PORTS                                       NAMES
0557f384f47c   centos            "/bin/bash"              19 minutes ago   Up 19 minutes                                                  gifted_shannon
34f04786c736   registry:latest   "/entrypoint.sh /etc…"   13 days ago      Up About an hour   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   myregistry
[root@hmm ~]# docker exec -ti 055 /bin/bash
[root@0557f384f47c /]# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.151 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.060 ms
^C
--- 172.17.0.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.060/0.105/0.151/0.046 ms
[root@0557f384f47c /]# ping 34f04786c736
ping: 34f04786c736: Name or service not known
[root@0557f384f47c /]#   //可以使用ip ping ,但是使用主机名时访问不到

容器之间的通信方案

image

传统的容器连接

[root@hmm ~]# docker run -tid --name yun3test centos
93baea338e296e65137c58caaa91f4f48495340cbe018e9d3404b44492e47267
[root@hmm ~]# docker run  -tid --link yun3test:y3t centos  //要连接的容器名字:别名
524cd67dc2fe09e41858443b79a4e8d2cbad443cf432c01707192d40f19e457c
[root@hmm ~]# docker exec -ti 524c /bin/bash
[root@524cd67dc2fe /]# ping y3t //使用定义的别名连接
PING y3t (172.17.0.4) 56(84) bytes of data.
64 bytes from y3t (172.17.0.4): icmp_seq=1 ttl=64 time=0.198 ms
64 bytes from y3t (172.17.0.4): icmp_seq=2 ttl=64 time=0.054 ms
^C
--- y3t ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 0.054/0.126/0.198/0.072 ms
[root@524cd67dc2fe /]#

从外部访问容器

1.介绍
简单来说就是 将容器的一个端口映射到docker主机上的一个端口,允许从外部网络通过端口访问容器
要让容器能够被外部网络(docker主机外部)或者那些未连接到该端口访问容器。
2.实例:

root@hmm ~]# docker run -tid -p 8080:80 --name web-test  httpd 
7461b82860224f05276b12cae589fd89fa213ccc15d3222e08232c02125608d3
[root@hmm ~]# docker ps 
CONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS          PORTS                                       NAMES
7461b8286022   httpd             "httpd-foreground"       8 seconds ago   Up 7 seconds    0.0.0.0:8080->80/tcp, :::8080->80/tcp       web-test
34f04786c736   registry:latest   "/entrypoint.sh /etc…"   2 weeks ago     Up 36 minutes   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   myregistry
[root@hmm ~]# curl 10.0.0.10:8080
<html><body><h1>It works!</h1></body></html>
[root@hmm ~]# 

补充:-p和-P的区别

  • -p(静态
[root@hmm ~]# docker run -tid --name web-test3 -p 8081:80 httpd
efbee0e06554994c394c01668ad83147b8d7b47aafc70b81559841915d3cd1b6
[root@hmm ~]# docker port web-test3
80/tcp -> 0.0.0.0:8081
80/tcp -> [::]:8081
[root@hmm ~]# curl http://10.0.0.10:8081
<html><body><h1>It works!</h1></body></html>
[root@hmm ~]# 
  • -P(动态
[root@hmm ~]# docker run -tid --name web-test2 -P httpd
0b7a0b621f553c8668b274be47aa4da30e80ea038e55f427cbda686742b8e649
[root@hmm ~]# docker ps 
CONTAINER ID   IMAGE             COMMAND                  CREATED              STATUS          PORTS                                       NAMES
0b7a0b621f55   httpd             "httpd-foreground"       About a minute ago   Up 59 seconds   0.0.0.0:32768->80/tcp, :::32768->80/tcp     web-test2
7461b8286022   httpd             "httpd-foreground"       7 minutes ago        Up 7 minutes    0.0.0.0:8080->80/tcp, :::8080->80/tcp       web-test
34f04786c736   registry:latest   "/entrypoint.sh /etc…"   2 weeks ago          Up 43 minutes   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   myregistry
[root@hmm ~]# docker port web-test2
80/tcp -> 0.0.0.0:32768
80/tcp -> [::]:32768
[root@hmm ~]# curl  http://10.0.0.10:32768
<html><body><h1>It works!</h1></body></html>
[root@hmm ~]#  //可以使用多个-p设置任意数量的端口映射

了解容器的网络配置用法

一.设置容器网络连接
1.容器启动时,可以用--network选项设置容器要连接的网络,即网络模式

  • none:使用none模式,容器不联网
  • bridge:使用默认桥接网络
  • hosy:使用默认的主机网络
  • container:容器使用另一个容器的网络
  • 网络名或网络ip:连接自定义网络,通常用这个。

2.案例:
none:

[root@hmm ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
9157d67bb75c   bridge    bridge    local
67bc430327bc   host      host      local
5f92e59bee8f   none      null      local
[root@hmm ~]# docker run --network none -tid --name none-test1 centos
e488e527ebc0b4a9c0b1b3706d47b5338b045d58aba0a8f372934bb4b6b4f7bf
[root@hmm ~]# docker ps 
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                                       NAMES
e488e527ebc0   centos            "/bin/bash"              44 seconds ago   Up 43 seconds                                               none-test1
411f6067d60a   centos            "/bin/bash"              2 minutes ago    Up 2 minutes                                                none-test
efbee0e06554   httpd             "httpd-foreground"       12 minutes ago   Up 12 minutes   0.0.0.0:8081->80/tcp, :::8081->80/tcp       web-test3
0b7a0b621f55   httpd             "httpd-foreground"       15 minutes ago   Up 15 minutes   0.0.0.0:32768->80/tcp, :::32768->80/tcp     web-test2
7461b8286022   httpd             "httpd-foreground"       22 minutes ago   Up 22 minutes   0.0.0.0:8080->80/tcp, :::8080->80/tcp       web-test
34f04786c736   registry:latest   "/entrypoint.sh /etc…"   2 weeks ago      Up 58 minutes   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   myregistry

[root@hmm ~]# docker inspect none-test1 --format="{{ json .HostConfig.NetworkMode }}"     //json后面需要空格 表示应用的变量
"none"
[root@hmm ~]#

二.为容器添加网络作用域的别名
1.解释
容器在网络作用域中允许有别名,别名在所在的网络中可以直接访问
使用--network-alias选项指定容器在网络中的别名
2.实例

  1. 网络作用域别名只支持用户自定义网络

错误:

[root@hmm ~]# docker run -tid --name test-alias --network-alias websrv can
docker: network-scoped aliases are only supported for user-defined networks.
See 'docker run --help'.
[root@hmm ~]#
//使用用户默认的网络使用自定义 是不支持的

成功:

[root@hmm ~]# docker network create --driver bridge yun3-nat
167e7d89276f2c1974ee208271a4f97b31ef1f836856360179bc8cff19b5ed7a
[root@hmm ~]# docker network ls
NETWORK ID     NAME       DRIVER    SCOPE
9157d67bb75c   bridge     bridge    local
67bc430327bc   host       host      local
5f92e59bee8f   none       null      local
167e7d89276f   yun3-nat   bridge    local
[root@hmm ~]# docker run -tid --name test-alias01 --network yun3-nat --network-alias ta01 centos
c88e88c2559b8572bcfe84b36d2272525ff0995fc7429d9cfe9ebb9bccd5c2ab
[root@hmm ~]# docker run -tid --name test-alias02 --network yun3-nat --network-alias ta02 centos
59b7a48e36393570e5ff57b4e2dc22ba6e0123adb2ad44972ad95bfdc1dcaed0
[root@hmm ~]# docker exec -ti test-alias01 /bin/bash
[root@c88e88c2559b /]# ping ta02
PING ta02 (172.18.0.3) 56(84) bytes of data.
64 bytes from test-alias02.yun3-nat (172.18.0.3): icmp_seq=1 ttl=64 time=0.247 ms
^C
--- ta02 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.247/0.247/0.247/0.000 ms
[root@c88e88c2559b /]# ping alias02 
ping: alias02: Name or service not known
[root@c88e88c2559b /]# ping test-alias02
PING test-alias02 (172.18.0.3) 56(84) bytes of data.
64 bytes from test-alias02.yun3-nat (172.18.0.3): icmp_seq=1 ttl=64 time=0.049 ms
64 bytes from test-alias02.yun3-nat (172.18.0.3): icmp_seq=2 ttl=64 time=0.146 ms
^C
--- test-alias02 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1004ms
rtt min/avg/max/mdev = 0.049/0.097/0.146/0.049 ms
[root@c88e88c2559b /]#

三.设置容器的ip地址
四.设置容器的网络接口mac地址
五.设置

标签:容器,0.0,配置,网络,hmm,docker,root
From: https://www.cnblogs.com/humlogs/p/18124308

相关文章

  • 快速上手IntelliJ IDEA:配置与使用指南
    引言在当今软件开发领域,选择一款强大而高效的集成开发环境(IDE)对于开发人员来说至关重要。而IntelliJIDEA作为一款功能丰富、强大灵活的Java开发工具,在业界享有盛誉。本博客将带领读者深入了解IntelliJIDEA的配置与使用,旨在让开发者能够快速上手并熟练运用这一工具,提高开......
  • Windows(Win11) 安装 Docker (Docker Desktop)
    目录前言下载安装wsl安装DockerDesktop启动DockerDesktop 配置国内镜像拉取镜像前言一般docker都是直接安装在Linux服务器上,用来快速部署一些中间件(比如redis,rocketmq等等),省去繁琐的安装以及配置过程。很少有在window上跑docker的情况,不过总有意想不......
  • Dockerfile简介
      1.什么是dockerfiledockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。2.Dockerfile构建过程解析dockerfile构建过程解析:  Docker执行Dockerfile的大致流程:    ......
  • Bcdboot - Bcd 启动文件创建和修复工具。BCDEDIT - 启动配置数据存储编辑器。
    BCDBOOT/?Bcdboot-Bcd启动文件创建和修复工具。bcdboot.exe命令行工具用于将关键启动文件复制到系统分区以及创建新的系统BCD存储。bcdboot<源>[/l<区域设置>][/s<卷号>[/f<固件>]][/v]         [/vbcd][/m[{OSLoaderID}]][/addlast]......
  • Dockerfile 保留字 简介
       FROM基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是FROMMAINTAINER:RUNEXPOSE:当前容器对外暴露出的端口。WORKDIR:指定在创建容器后,终端默认登录的进来工作目录,一个落脚点ENV:......
  • 计算机网络常见网络命令使用与协议的分析
    实验目的常见网络命令使用与协议的分析实验条件Windows,ethereal实验内容常见命令使用:Ipconfig     网络协议分析:IPArp                       tcpudp           Ping/pingip–n–l        ......
  • 计算机网络路由的配置
    路由器的基本配置,单个路由器接口,多个路由器接口Windows,Ciscopackettracer路由器的基本配置,单个路由器接口,多个路由器接口路由器的基本配置路由器改名字Continuewithconfigurationdialog?[yes/no]:noPressRETURNtogetstarted!Router......
  • 突破编程_C++_网络编程(Windows 套接字(API 接口(2)))
    1TCP连接管理1.1connect函数connect函数用于发起一个TCP连接请求到远程服务器。这个函数通常用于客户端套接字,以建立与服务器的连接。(1)函数原型intconnect(SOCKETs,conststructsockaddr*name,intnamelen);(2)参数说明s:一个已创建但未连接的套接字描述符......
  • Spring Boot、Nacos配置文件properties、yml、yaml的优先级
    在标准的SpringBoot应用中,本地配置加载顺序如下:bootstrap.yamlbootstrap.propertiesbootstrap-{profile}.yamlbootstrap-{profile}.propertiesapplication.yamlapplication.propertiesapplication-{profile}.yamlapplication-{profile}.propertiesnacos配置中心共享......
  • nginx开机启动配置
    参考文档:https://blog.csdn.net/weixin_51410036/article/details/109098193 开机启动配置需要用到WinSW.NET4.exe;百度网盘:https://pan.baidu.com/s/192khsPq1KNSRbB7PrBsBQA提取码:7yhn或者下载https://files.cnblogs.com/files/y593216/WinSW.NET4.zip?t=1712658484&......