跳至页脚内容
使用 IRONSECUREDOC

Docker Compose网络(它是如何为开发人员工作的)

什么是Docker

Docker是一个开源平台,使用基于容器的概念来自动化轻量级、可移植容器中的应用部署和扩展。 简单来说,Docker容器将所有的应用代码及其依赖项一起放在一个单元内,从开发者的笔记本电脑到测试服务器或生产云服务器,环境保持一致。

Docker Compose Network(开发者如何使用):图1

容器不如传统虚拟机(VM)那样运行,因为它们共享主机系统的操作系统内核。 因此,容器更高效,启动速度更快。 实际上,Docker容器保证了开发周期所有阶段的一致行为。

事实上,Docker镜像是用于描述容器的模板,其中保存了应用环境。 这个集合中还包括用于管理容器生命周期的工具包。 例如,可以使用Docker Compose来协调由多个容器组成的应用程序。 然后是Docker Hub,一个用于共享镜像的注册表。

什么是Docker Compose网络?

Docker Compose网络允许在Docker Compose应用程序中运行的服务在相同的封装环境中相互通信。 如果您在docker-compose.yml文件中定义多个服务,Docker Compose会自动创建一个默认网络,以便这些服务可以使用服务名称作为主机名相互通信。 基本上,它允许用户定义自己的网络并创建多个具有此网络的服务。

默认桥接网络:如果在运行docker-compose up时没有为容器定义网络,Docker会自动创建一个桥接网络。 所有容器都可以在这个默认的驱动程序网络上使用其服务名称作为主机名相互通信。

自定义网络:通过这些选项,用户可以定义一个或两个自定义网络,甚至更多的用户定义网络。 您可以在容器端口和docker-compose.yml文件中定义自定义网络。通过将服务分配给这些网络,您可以控制容器之间如何通信:

  • 内部网络将服务与其他网络隔离。
  • 多网络允许某些服务相互通信,同时拒绝其他服务的访问。

服务发现:每个服务都获得与其配置名称相同的主机名。 也就是说,您可以在一个容器中使用另一个服务名来引用该服务。例如,在web服务中,可以使用db来引用数据库容器的IP。

网络模式:您还可以设置网络模式以使用主机、桥接或无服务。 最常用的是桥接,它隔离容器流量。

什么是Docker网络驱动程序?

Docker网络驱动程序描述了容器之间及容器与其他系统之间的连接和通信。 有多种应用场景,可以根据这些场景应用网络驱动程序,每种提供不同等级的隔离、连接性和性能。 我们将逐一介绍每种网络驱动程序及其使用。

Docker网络驱动程序的类型

桥接(默认)

内部docker网络允许容器基于单个主机与其他容器进行通信。如果您不指定网络启动容器,Docker使用默认的桥接网络。

# Create a custom bridge network
docker network create --driver bridge my_bridge_network

# Run containers and connect to the custom network
docker run -d --name container1 --network my_bridge_network busybox sleep 3600
docker run -d --name container2 --network my_bridge_network busybox sleep 3600
# Create a custom bridge network
docker network create --driver bridge my_bridge_network

# Run containers and connect to the custom network
docker run -d --name container1 --network my_bridge_network busybox sleep 3600
docker run -d --name container2 --network my_bridge_network busybox sleep 3600
SHELL

在此,服务名称可以用于通信,如ping container1container2

Host

使用主机驱动程序,容器直接共享主机网络栈,因此容器不会获得自己的自定义网络隔离。

# Run a container using the host network
docker run -d --network host nginx
# Run a container using the host network
docker run -d --network host nginx
SHELL

NGINX容器现在共享主机的IP和网络接口,因而绕过网络隔离。

Overlay

它跨多个主机连接容器,主要用于Docker Swarm或Kubernetes环境,通过容器与物理或虚拟机进行安全通信,使用虚拟网络。

# Create an overlay network for use in a Docker Swarm cluster
docker network create -d overlay my_overlay_network

# Deploy a service in the Swarm cluster
docker service create --name web --network my_overlay_network nginx
# Create an overlay network for use in a Docker Swarm cluster
docker network create -d overlay my_overlay_network

# Deploy a service in the Swarm cluster
docker service create --name web --network my_overlay_network nginx
SHELL

这在Swarm集群中创建了一个跨多个Docker主机延展的服务。

None

此无驱动程序禁用容器的网络功能。 该容器与任何外部网络通信完全隔离。

# Run a container with no network
docker run -d --network none busybox sleep 3600
# Run a container with no network
docker run -d --network none busybox sleep 3600
SHELL

busybox容器将无法访问互联网,也无法发送呼叫给其他容器的网络或外部世界。

Macvlan

Macvlan驱动程序使容器在网络中显示为物理设备,具有自己的MAC地址,因此它们可以直接访问物理网络。

# Create a Macvlan network
docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 \
  -o parent=eth0 macvlan_network

# Run a container on the Macvlan network
docker run -d --network macvlan_network busybox sleep 3600
# Create a Macvlan network
docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 \
  -o parent=eth0 macvlan_network

# Run a container on the Macvlan network
docker run -d --network macvlan_network busybox sleep 3600
SHELL

IPvlan

IPvlan驱动程序类似于Macvlan,但着重于分配IP地址,而不是依赖于第二层(MAC地址)。 它允许多个容器共享同一网络接口。

# Create an IPvlan network
docker network create -d ipvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 ipvlan_network

# Run a container on the IPvlan network
docker run -d --network ipvlan_network busybox sleep 3600
# Create an IPvlan network
docker network create -d ipvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 ipvlan_network

# Run a container on the IPvlan network
docker run -d --network ipvlan_network busybox sleep 3600
SHELL

它将与网络共享主机的第二层以太网接口,但具有不同的IP地址。

自定义插件

Docker的自定义插件是第三方或用户开发的网络驱动程序,提供更精细的网络能力而不是Docker可能提供的默认选项。 第三方Docker插件可以与类似软件定义网络的外部网络解决方案框架集成,从而提高安全性、可扩展性、多主机网络等方面的能力。 Docker为开发者和供应商提供了一个通用的网络插件架构,允许以与本地驱动相同的方式安装和使用它们。

IronSecureDoc

IronSecureDoc for Docker使开发者可以轻松地将安全文档处理功能添加到他们的容器化应用程序中。 使用Docker,您可以在一个统一的环境中封装带有IronSecureDoc的ASP.NET Core应用程序,从而简化部署和扩展。 要运行它,您需要构建一个Dockerfile,使用IronSecureDoc库和其他可能需要的安装脚本或配置来组合您的ASP.NET Core应用程序。

Docker Compose Network(开发者如何使用):图2 - IronSecureDoc

它还包括一个docker-compose.yml文件,其中包含服务依赖项、环境变量和映射的端口,因而可以访问此功能。 因此,涉及文档安全性的任务更易于管理,这样您的web应用程序将在开发或生产中以外的环境中高效运行。 在Docker情况下,安装和配置IronSecureDoc是必需的,以充分利用加密文档、反向编辑等功能。

安装与运行 IronSecureDoc

在命令提示符或打开的终端窗口中运行以下命令以从存储库中获取IronSecureDoc Docker镜像。

# Pull IronSecureDoc Docker image
docker pull ironsoftwareofficial/ironsecuredoc
# Pull IronSecureDoc Docker image
docker pull ironsoftwareofficial/ironsecuredoc
SHELL

Docker Compose Network(开发者如何使用):图3

从Docker存储库中拉取镜像后,您可以使用另一个命令来启动作为正在运行的容器的IronSecureDoc。

# Run a container with network isolation and environment variables
docker container run --rm -p 8080:8080 \
  -e IronSecureDoc_LicenseKey=<IRONSECUREDOC_LICENSE_KEY> \
  -e ENVIRONMENT=Development \
  -e HTTP_PORTS=8080 \
  ironsoftwareofficial/ironsecuredoc:latest
# Run a container with network isolation and environment variables
docker container run --rm -p 8080:8080 \
  -e IronSecureDoc_LicenseKey=<IRONSECUREDOC_LICENSE_KEY> \
  -e ENVIRONMENT=Development \
  -e HTTP_PORTS=8080 \
  ironsoftwareofficial/ironsecuredoc:latest
SHELL

上述Docker运行命令将启动一个IronSecureDoc的容器实例。 假设将使用桥接网络进行网络隔离。 这也使得可以使用标志-p 8080:8080通过http://localhost:8080对容器内部暴露的服务进行外部访问; 这会将容器网络上运行在端口8080的内部服务暴露给主机网络上的端口8080。

默认情况下,容器在Docker的桥接网络上运行,因此它们与其他容器和外界隔离,除非通过端口映射暴露,如此处所做的这般。 传递的环境变量(IronSecureDoc_LicenseKeyENVIRONMENTHTTP_PORTS)可配置应用程序在容器中的行为。 --rm标志导致容器在停止时被移除。

该设置的好处在于,桥接网络隔离容器并在内部连接服务,而端口映射将外部流量从主机机器桥接到容器的服务中,从而简化访问。

Docker Compose Network(开发者如何使用):图4

使用IronSecureDoc与Docker网络端口

安装并启动在Docker中后,IronSecureDoc的REST API允许用户编辑、认证和加密文档。 有关更详细的步骤,请参见此处的文档。

例如,要提交加密文档,您可以对IronSecureDoc API执行POST请求:

# POST a document for encryption using cURL
curl -X 'POST' \
  'http://localhost:8080/v1/document-services/pdfs/encrypt?user_password=demo' \
  -H 'accept: */*' \
  -H 'Content-Type: multipart/form-data' \
  -F 'pdf_file=@test.pdf;type=application/pdf'
# POST a document for encryption using cURL
curl -X 'POST' \
  'http://localhost:8080/v1/document-services/pdfs/encrypt?user_password=demo' \
  -H 'accept: */*' \
  -H 'Content-Type: multipart/form-data' \
  -F 'pdf_file=@test.pdf;type=application/pdf'
SHELL

此命令会自动将文档发送到IronSecureDoc,届时它将被适当地加密。

结论

Docker网络在控制应用程序交互及其与其他应用程序和外界的通信中起着至关重要的作用,它具备不同的驱动程序和配置,以满足不同应用程序的需求。 默认的桥接网络配置允许基本隔离,因为服务可以通过端口映射向主机系统开放,IronSecureDoc应用程序即是一个例子。 它方便了容器化应用程序的管理和配置,增强了应用程序的操作灵活性和可扩展性。

IronSecureDoc是一种先进的文档处理工具,它利用Docker在容器化方面的能力,允许快速和可靠的应用部署。 这确保支持多个环境,同时无缝集成Docker网络与IronSecureDoc,令应用程序的集成变得简单、易达且易于管理。

因此,它简化了工作流,提高了效率,增强了操作,特别是在处理文档时。 这最终丰富了开发和部署体验,使其成为现代软件应用程序的有价值的解决方案。 有关IronSecureDoc许可的更多信息,请访问此页面。 要了解Iron Software提供的众多产品,请访问此链接

常见问题解答

Docker Compose 网络如何促进服务通信?

Docker Compose 网络允许 Docker Compose 应用程序内的服务使用服务名称作为主机名进行通信,实现同一封装环境内的交互。

默认桥接网络在 Docker Compose 中的作用是什么?

Docker 自动创建的默认桥接网络允许容器在未定义特定网络时使用其服务名称作为主机名进行通信。

自定义网络如何增强 Docker Compose 应用程序?

Docker Compose 中的自定义网络通过允许在服务之间定义隔离和选择性通信来增强应用程序,这是在 docker-compose.yml 文件中定义的。

有哪些类型的 Docker 网络驱动程序及其用途是什么?

Docker 网络驱动程序如桥接、主机、覆盖、无、Macvlan 和 IPvlan 提供不同程度的隔离、连接性和性能,适用于不同的应用需求。

覆盖网络驱动程序如何支持多主机通信?

覆盖网络驱动程序通过虚拟网络连接多个主机上的容器,提供安全通信,常用于 Docker Swarm 或 Kubernetes 环境。

为什么在容器环境中安全的文件处理很重要?

使用 IronSecureDoc 等安全的文件处理在容器环境中很重要,因为它允许通过 Docker 的网络功能高效封装、部署和扩展应用。

如何在 Docker 中设置安全的文件处理?

您可以通过将 IronSecureDoc 等工具部署在容器内,通过 Dockerfile 和 docker-compose.yml 配置环境进行网络隔离,从而在 Docker 中设置安全的文件处理。

在 Docker 中通过 REST API 加密文件需要哪些步骤?

要在 Docker 中通过 REST API 加密文件,使用 cURL 等工具在容器化设置中发送包含文件和参数的 POST 请求至安全文件处理 API。

Docker 的网络功能如何提高应用程序的可扩展性?

Docker 的网络功能通过允许高效管理服务之间的交互和通信,简化工作流程和部署体验,从而提高应用程序的可扩展性。

将 IronSecureDoc 集成到现有 Docker 系统的过程是什么?

通过使用 Docker 命令进行设置,利用端口映射和环境变量确保一致的部署和扩展,将 IronSecureDoc 集成到现有 Docker 系统中。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。