史上最全的Docker详解(四)之——Docker 端口映射及相关网络配置

这篇具有很好参考价值的文章主要介绍了史上最全的Docker详解(四)之——Docker 端口映射及相关网络配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Docker中,要理解容器的网络配置以及如何进行端口映射,我们可以从以下几个方面进行详细说明。

1. 查找容器IP地址

通过容器ID来获取容器的IP地址是常见的需求,可以使用以下命令:

$ sudo docker inspect <container_id> | grep IPAddress | cut -d '"' -f 4

需要注意的是,这些IP地址是基于本地系统的,并且容器的端口默认无法从外部主机访问。此外,容器每次启动时这些IP地址都会更改。

2. Docker解决的问题

Docker解决了容器的这两个问题,同时提供了一种简单可靠的方法,允许外部客户端访问容器内运行的服务。Docker通过将主机系统接口上的端口绑定到容器内部,实现了这一点。为了简化容器之间的通信,Docker提供了不同的网络连接机制。

3. 自动映射端口

Docker提供了自动映射容器端口的功能,可以使用以下命令:

$ sudo docker run -t -P --expose 22 --name server ubuntu:14.04

使用docker run -P可以自动绑定容器内部所有需要对外提供服务的端口,映射的端口会从未使用的端口池中自动选择。具体的映射信息可以通过docker psdocker inspect <container_id>docker port <container_id> <port>来确定。

4. 绑定端口到指定接口

Docker允许你将容器端口绑定到指定的接口,并提供了不同的语法选项:

4.1 绑定TCP端口

# 将容器的TCP端口8080绑定到主机的TCP端口80上
$ sudo docker run -p 127.0.0.1:80:8080 <image> <cmd>
# 将容器的TCP端口8080绑定到主机上的一个动态分配的TCP端口上
$ sudo docker run -p 127.0.0.1::8080 <image> <cmd>
# 将容器的TCP端口8080绑定到主机的所有可用网络接口上的TCP端口80
$ sudo docker run -p 80:8080 <image> <cmd>
# 将容器的TCP端口8080绑定到主机的所有可用网络接口上的动态分配的TCP端口上
$ sudo docker run -p 8080 <image> <cmd>

4.2 绑定UDP端口

# 将容器的UDP端口5353绑定到主机的UDP端口53上
$ sudo docker run -p 127.0.0.1:53:5353/udp <image> <cmd>

5. Docker网络配置

Docker使用Linux桥接来实现容器之间的通信,docker0桥接接口的创建和配置是Docker守护进程启动时执行的操作。以下是Docker网络配置的一些关键概念和命令。

5.1 Docker四种网络模式

Docker提供了四种网络模式:

  • host模式: 使用--net=host指定,容器与宿主机共享网络命名空间,使用宿主机的IP和端口。
  • container模式: 使用--net=container:NAMEorID指定,容器与另一个容器共享网络命名空间,它们可以通过lo设备进行通信。
  • none模式: 使用--net=none指定,容器有自己的网络命名空间,但不进行任何网络配置,需要手动添加网卡和配置IP等。
  • bridge模式: 使用--net=bridge指定,默认设置,为容器分配独立的网络命名空间和IP。

5.2 Docker的默认桥接网络

Docker的默认网络模式是bridge模式,它创建docker0虚拟网桥,并将容器连接到该虚拟网桥上。docker0的IP地址会被分配给容器的默认网关。

5.3 查看当前主机网桥

可以使用以下命令查看当前主机上的网桥信息:

$ sudo brctl show

docker 端口,wordpress建站,服务器维护相关,docker,网络,容器

5.4 查看当前docker0的IP地址

可以使用以下命令查看当前docker0虚拟网桥的IP地址:

$ sudo ifconfig docker0

docker 端口,wordpress建站,服务器维护相关,docker,网络,容器

5.5 自定义桥接网络

如果需要自定义桥接网络,可以按照以下步骤进行:

  1. 停止Docker守护进程。
  2. 创建自定义的网桥。
  3. 为网桥分配特定的IP地址。
  4. 使用-b选项重新启动Docker,指定使用自定义网桥。

具体操作如下:

$ sudo service docker stop
$ sudo ip link set dev docker0 down
$ sudo brctl delbr docker0

# 创建自定义网桥
$ sudo brctl addbr bridge0
$ sudo ip addr add 192.168.5.1/24 dev bridge0
$ sudo ip link set dev bridge0 up

# 将Docker配置为使用自定义网桥(具体命令可能因系统而异)
$ echo 'DOCKER_OPTS="-b=bridge0"' >> /etc/default/docker
$ sudo service docker start

6. 跨主机容器通信

不同主机上的容器之间通信可以借助pipework工具。以下是一些相关步骤:

  1. 安装pipework以及相关依赖软件。
  2. 配置桥接网络。
  3. 使用pipework为容器创建虚拟网卡并将其桥接到自定义的网桥上。
  4. 配置其他主机上的容器以实现跨主机通信。
    以下是相关操作实例命令:

不同容器之间的通信可以借助于 pipework 这个工具。首先,需要安装 pipework 并满足相关依赖。

# 在主机上安装 pipework
$ git clone https://github.com/jpetazzo/pipework.git
$ sudo cp -rp pipework/pipework /usr/local/bin/

6.1 安装相应依赖软件

# 安装必要的依赖软件
# For Ubuntu/Debian
$ sudo apt-get install iputils-arping bridge-utils -y

# For CentOS/RHEL
$ sudo yum install iputils bridge-utils -y

6.2 桥接网络

桥接网络配置可以参考一下网上关于桥接的配置说明,这里不再赘述,有机会龙哥写一篇相关内容。

# 查看当前主机上的桥接网络
$ brctl show

bridge name     bridge id               STP enabled     interfaces
br0             8000.000c291412cd       no              eth0
docker0         8000.56847afe9799       no              vetheb48029

您可以删除 docker0,直接将 Docker 的桥接指定为 br0。或者保留默认配置,让单主机容器之间的通信使用 docker0,而跨主机不同容器之间通过 pipework 创建的 Docker 容器的网卡桥接到 br0,从而实现跨主机容器通信。

在 Ubuntu 上的配置:
# 停止 Docker 服务
$ sudo service docker stop

# 关闭 docker0 网桥
$ sudo ip link set dev docker0 down

# 删除 docker0 网桥
$ sudo brctl delbr docker0

# 配置 Docker 使用 br0 网桥
$ echo 'DOCKER_OPTS="-b=br0"' | sudo tee -a /etc/default/docker

# 重新启动 Docker 服务
$ sudo service docker start
在 CentOS/RHEL 7 上的配置:
# 停止 Docker 服务
$ sudo systemctl stop docker

# 关闭 docker0 网桥
$ sudo ip link set dev docker0 down

# 删除 docker0 网桥
$ sudo brctl delbr docker0

# 配置 Docker 使用 br0 网桥
$ sudo sed -i 's/OPTIONS=/OPTIONS="--bridge=br0 --selinux-enabled"/' /etc/sysconfig/docker

# 重新启动 Docker 服务
$ sudo systemctl start docker

6.3 使用 pipework 进行容器通信

不同容器之间的通信可以通过 pipework 工具来实现,该工具会创建虚拟网卡并将其桥接到 br0 网桥上。

# 示例:使用 pipework 桥接容器到 br0
$ sudo docker run --rm -ti --net=none ubuntu:14.04 /bin/bash
root@a46657528059:/#
$                  # 使用 Ctrl-P + Ctrl-Q 返回到宿主机 shell,容器保持在后台运行状态
$ sudo docker ps
CONTAINER ID    IMAGE          COMMAND       CREATED         STATUS          PORTS      NAMES
a46657528059    ubuntu:14.04   "/bin/bash"   4 minutes ago   Up 4 minutes               hungry_lalande

# 使用 pipework 进行桥接
$ sudo pipework br0 -i eth0 a46657528059 192.168.115.10/24@192.168.115.2
# 如果不指定网卡设备名,将默认添加为 eth1

此时,容器已经被成功桥接到 br0,并分配了 IP 地址。

$ sudo docker exec -it a46657528059 ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 86:b6:6b:e8:2e:4d
          inet addr:192.168.115.10  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::84b6:6bff:fee8:2e4d/64 Scope:Link
          UP

 BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:648 (648.0 B)  TX bytes:690 (690.0 B)

$ sudo docker exec -it a46657528059 route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.115.2   0.0.0.0         UG    0      0        0 eth0
192.168.115.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0

如果需要添加静态路由,可以使用 ip netns 命令在容器内手动添加。另外, pipework 也支持创建容器的 VLAN 网络,详情请参考官方文档。

这些步骤可用于配置不同主机上的容器以实现跨主机容器通信。确保在其他主机上执行相应的配置,并创建容器并使用 pipework 进行桥接以测试通信情况。

总结

最后,pipework还支持创建容器的VLAN网络,详细操作可参考pipework的官方文档。

今天龙哥写的这篇内容提供了Docker端口映射和网络配置的详细说明,可以帮助Docker用户更好地理解和配置容器网络。

本篇为史上最全的Docker详解(四)之——Docker 端口映射及相关网络配置篇,如需了解其他Docker内容,关注一下翻看一下我其他章节。文章来源地址https://www.toymoban.com/news/detail-763620.html

到了这里,关于史上最全的Docker详解(四)之——Docker 端口映射及相关网络配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker 配置 mysql 指定端口映射和存储地址

    要配置Docker中的MySQL容器以指定端口映射和存储地址,可以按照以下步骤进行操作: 从Docker Hub上下载MySQL镜像,可以使用以下命令: 创建一个新的MySQL容器并指定端口映射和存储地址。在这个例子中,我们将MySQL端口映射到主机上的3306端口,并将MySQL数据存储在主机上的/my/

    2024年02月13日
    浏览(29)
  • 史上最全Azure Kinect相关安装教程

    本教程旨在向无Azure Kinect开发经验的新手进行相关环境的安装。 https://github.com/microsoft/Azure-Kinect-Sensor-SDK/blob/develop/docs/usage.md 安装 SDK 时,请记住要安装到的路径。 例如,“C:Program FilesAzure Kinect SDK 1.2”。 你将要在此路径中查找文章中参考的工具。此处建议按照默认位置安

    2024年02月07日
    浏览(30)
  • Docker网络(网络通信),资源控制(CPU优化,内存优化,磁盘优化),数据管理(数据卷,端口映射,容器互联)

    目录 docker网络 网络实现原理 网络实现实例 网络模式 查看Docker中的网络列表: 指定容器网络模式 模式详解 Host模式(主机模式): Container模式(容器模式): None模式(无网络模式): Bridge模式(桥接模式): 自定义网络: cpu优化概述 1. 资源限制: 2. CPU 实时调度策略:

    2024年01月16日
    浏览(70)
  • Proxmox VE 网络配置 NAT共享IP 端口映射iptables、brook

    配置桥接网卡,使Proxmox VE(PVE)可以同时创建NAT虚拟机和独立IP虚拟机,同时可以使用脚本映射NAT虚拟机的端口到外网。 文件最后加入如下配置 新增一个vmbr172网桥,并设置流量转发 重启 此处使用的是ubuntu做dhcp服务器 参考地址 IPv4是经过内网转发的,所以现在只可以访问外网

    2024年02月20日
    浏览(30)
  • 史上最全ThreadLocal 详解(二)

    ThreadLocal 内存泄露的原因及处理方式 目录 1、ThreadLocal 使用原理 2、ThreadLocal 内存泄露的原因 3、 为什么不将key设置为强引用 3.1 、key 如果是强引用 3.2、key 如果是强引用 3.3  那么为什么 key 要用弱引用 3.4 如何正确的使用ThreadLocal        前文我们讲过ThreadLocal的主要用途是

    2024年02月02日
    浏览(39)
  • 史上最全网络安全面试题+答案

    1、什么是SQL注入攻击 前端代码未被解析被代入到数据库导致数据库报错 2、什么是XSS攻击 跨站脚本攻击 在网页中嵌入客户端恶意脚本,常用s语言,也会用其他脚本语言 属于客户端攻击,受害者是用户,网站管理员也属于用户,攻击者一般也是靠管理员身份作为跳板 3、什么

    2024年02月13日
    浏览(34)
  • 史上最全网络安全面试题汇总

    最近有不少小伙伴跑来咨询: 想找网络安全工作,应该要怎么进行技术面试准备? 工作不到 2 年,想跳槽看下机会,有没有相关的面试题呢? 为了更好地帮助大家高薪就业,今天就给大家分享一份网络安全工程师面试题,希望它们能够帮助大家在面试中,少走一些弯路、更

    2024年02月07日
    浏览(40)
  • Oracle聚合函数XMLAGG详解(史上最全)

    XMLAGG函数是Oracle数据库中一种特定的聚合函数,主要用于将多行数据转化为一个XML类型的值。通过对多个行数据的拼接,生成XML文档。该函数可以自定义XML文档的结构,实现灵活的数据拼接和文档构建。 XMLAGG函数的语法如下: XMLELEMENT是一个指定XML元素的函数。该函数需要提

    2024年02月01日
    浏览(32)
  • 【网络篇】socket编程——TCP(史上最全)

    目录 一、初始TCP 1.TCP协议特点 2.TCP头:  3.确认应答机制 4.超时重传机制 5.流量控制 6.拥塞控制 (1)TCP 的拥塞控制方法 慢开始 拥塞避免 快重传 快恢复 二、建立连接——三次握手  三、断开连接——四次挥手 四、socket编程 ##客户端API函数 ##服务端API函数 (1)TCP 是 面向连

    2024年02月08日
    浏览(32)
  • 史上最全AP、mAP详解与代码实现

    我们在深度学习的论文经常看到实验对比指标mAP,比较mAP@0.5与mAP@0.5:0.95指标。然,又有很多博客并未完全说明清楚,特别说结合代码解释该指标。为此,本文章将梳理mAP指标,主要内容分为mAP原理解释,如何使用代码获得mAP指标,进一步探讨如何结合模型而获得mAP指标。

    2024年02月11日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包