Docker 端口映射与容器互联的实现

 更新时间:2025年01月07日 10:41:37   作者:耿雨飞  
Docker的端口映射和容器互联是构建和管理微服务架构时重要的概念,本文主要介绍了Docker 端口映射与容器互联的实现,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧

前言

Docker的端口映射和容器互联是构建和管理微服务架构时重要的概念。这些功能使你能够可以将服务暴露给外部世界,并让容器间可以通过网络通信。下面将详细介绍这两个概念以及如何在Docker中实现。

Docker端口映射

端口映射指的是将容器的端口映射到主机的端口,使得外部用户能够通过主机的IP地址和端口访问容器内运行的服务。

启动容器并进行端口映射

使用-p标志可以在启动容器时进行端口映射。语法如下:

docker run -p <host_port>:<container_port> <image_name>
  • host_port:主机的端口号
  • container_port:容器内部的端口号

示例

假设我们有一个运行在8080端口的Web应用,并希望将其映射到主机的8080端口。

docker run -d -p 8080:8080 my-web-app
  • -d:后台运行容器
  • my-web-app:镜像名称

Docker容器互联

容器互联指的是多个容器之间可以互相访问。Docker为容器之间的通信提供了网络支持。

创建自定义网络

使用自定义网络可以使容器之间更加安全和便捷地进行通信。创建内部网络的命令如下:

docker network create my-network

 启动容器并连接到网络

启动容器并将其连接到创建的网络:

docker run -d --name web --network my-network -p 8080:8080 my-web-app
docker run -d --name db --network my-network my-database-image

此处,--network标志指定容器要连接的网络。

在容器间通信

一旦容器在同一网络中,它们就可以通过容器名称访问彼此的服务。例如,如果web容器需要连接到名为db的数据库容器,它可以通过db主机名与之通信(例如使用db:5432来连接到数据库服务)。

示例:创建一个Web应用和数据库的互联

假设我们有一个简单的Web应用,该应用需要连接到PostgreSQL数据库。

创建自定义网络

docker network create my-network

运行数据库容器

docker run -d --name db --network my-network -e POSTGRES_PASSWORD=mysecretpassword postgres

运行Web应用容器

docker run -d --name web --network my-network -p 8080:8080 my-web-app

在Web应用中连接数据库

在Web应用的配置文件中,你可以使用db作为数据库主机名进行连接,例如:

import psycopg2

conn = psycopg2.connect(
    dbname='postgres',
    user='postgres',
    password='mysecretpassword',
    host='db',  # 使用容器名称
    port=5432
)

查看网络和容器

可以使用以下命令查看网络中的容器:

docker network inspect my-network

docker ps -a

小结

以上介绍了Docker中的端口映射和容器互联的基本概念与实践。通过端口映射,可以将容器服务暴露给主机,供外部访问;而通过自定义网络与容器互联,可以安全高效地进行容器间的通信。这些特性使得Docker在开发、测试和生产环境中成为管理应用服务的强大工具。

补充

docker 的网络原理

Docker的网络功能是其核心特性之一,允许容器之间以及容器与外部之间进行通信。Docker的网络原理包括多个网络模式、网络驱动程序和网络的配置管理。下面将详细介绍Docker网络的原理及各个组成部分。

Docker网络模型

Docker网络模型主要包括以下几种网络类型:

  • 桥接网络 (Bridge Network): 默认网络类型。当你启动一个Docker容器时,如果没有指定网络类型,它会自动连接到名为bridge的默认网络。容器连接到同一个桥接网络时,可以通过容器名称进行相互通信。

  • 主机网络 (Host Network): 在这种模式下,容器共享主机的网络栈,容器不会取得自己的IP地址,而是直接使用主机的IP地址。这种模式适用于对性能要求高的网络场景,但会牺牲网络隔离。

  • 叠加网络 (Overlay Network): 用于跨多个Docker主机的容器间通信,尤其用在Docker Swarm集群中。Overlay网络在Docker主机之间创建一个虚拟网络,使得不同主机上的容器能够以直观的方式进行通信。

  • 容器网络 (Container Network): 允许一个容器直接使用另一个容器的网络栈,这意味着它可以共享IP地址和端口。通过--network container:<container_name>来连接到另一个容器的网络。

  • 自定义网络: 用户可以创建自定义的桥接网络或叠加网络。自定义网络允许用户更加灵活地配置网络策略和容器之间的通信。

网络驱动程序

Docker提供了多种网络驱动程序来支持不同的网络接口:

  • bridge: 当没有指定网络时,Docker容器默认使用的驱动程序。适合于在单个主机上的容器之间的通信。

  • host: 直接使用宿主机的网络。这种方式在性能上可得到提升,但容器间缺少隔离。

  • overlay: 用于跨多个Docker主机通信,支持Docker Swarm集群的网络模式。

  • macvlan: 允许容器获取物理网络接口的MAC地址,适用于需要在物理网络上与其他设备直接通信的情况。

Docker网络的工作机制

网络命名空间

每个Docker容器在启动时会创建一个独立的网络命名空间。命名空间对容器的网络资源进行隔离,确保不同容器之间的网络不会相互干扰。每个容器都有自己的网络接口、IP地址和路由表。

假设路由和DNS

  • 容器间通信:在同一Docker网络内的容器可以使用容器名称或者容器内的服务名进行相互通信。Docker内置了一个DNS服务器来处理容器名称的解析。

  • 默认网关和路由: 每个Docker网络都有自己的默认网关。Docker在创建网络时会自动配置路由,以确保容器和主机的网络流量正常。

网络连接

  • 使用docker run命令时,可以通过--network选项指定容器连接的网络。容器启动后,可以通过IP地址、容器名称、主机名等方式进行互访。

Docker的网络管理

Docker CLI提供了一组命令用于网络管理:

# 创建网络:
docker network create my-network

# 查看网络列表
docker network ls

# 查看特定网络的详细信息
docker network inspect my-network

# 删除网络
docker network rm my-network

到此这篇关于Docker 端口映射与容器互联的实现的文章就介绍到这了,更多相关Docker 端口映射与容器互联内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一次Docker中Redis连接暴增的问题排查实战记录

    一次Docker中Redis连接暴增的问题排查实战记录

    这篇文章主要给大家介绍了一次Docker中Redis连接暴增的问题排查的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-06-06
  • docker-compose集成Jenkins部署,打包,发布方式

    docker-compose集成Jenkins部署,打包,发布方式

    在Docker环境中安装配置Jenkins,需挂载JDK、Maven等至容器指定路径,设置国内镜像提升下载速度,并添加插件与凭据完成环境配置
    2024-10-10
  • 如何修改docker官方镜像内部内容并重新build镜像

    如何修改docker官方镜像内部内容并重新build镜像

    这篇文章主要介绍了如何修改docker官方镜像内部内容并重新build镜像问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Docker 教程之基本概念(镜像,容器,仓库)详解

    Docker 教程之基本概念(镜像,容器,仓库)详解

    这篇文章主要介绍了Docker 教程之基本概念(镜像,容器,仓库)详解的相关资料,这里对Docker 的基本知识做一个介绍,需要的朋友可以参考下
    2016-12-12
  • 在 Docker 中查看日志的方法

    在 Docker 中查看日志的方法

    文章介绍了如何在Docker中查看容器的日志,包括使用dockerlogs命令的基本方法、实时查看日志、查看特定时间范围内的日志以及配置日志驱动程序,还提到了通过docker-compose查看多个服务的日志,并讨论了日志轮换和集成日志聚合工具的高级技巧,感兴趣的朋友一起看看吧
    2025-03-03
  • docker实践之容器的导入与导出

    docker实践之容器的导入与导出

    Docker技术为IT界带来了巨大的改变,它使得云服务可以用来共享应用和工作流程自动化,使得应用可以用组件快速组合,消除了开发、品质保证、产品环境间的摩擦。这篇文章我们将详细的介绍docker容器的导入与导出,感兴趣的朋友们下面来一起看看吧。
    2016-10-10
  • Docker基础命令详解

    Docker基础命令详解

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。本文给大家分享docker基础命令,感兴趣的朋友一起看看吧
    2016-10-10
  • 教你使用docker查看运行中的容器

    教你使用docker查看运行中的容器

    这篇文章主要介绍了使用docker查看运行中的容器,本文内容简单给大家讲解的很明白,对docker查看运行的容器相关知识感兴趣的朋友一起看看吧
    2022-04-04
  • Docker 查询、停止、删除和重启容器的详细过程

    Docker 查询、停止、删除和重启容器的详细过程

    这篇文章主要介绍了Docker 查询、停止、删除和重启容器,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • docker利用单个镜像映射到多个端口操作

    docker利用单个镜像映射到多个端口操作

    这篇文章主要介绍了docker利用单个镜像映射到多个端口操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11

最新评论