跳至頁尾內容
USING IRONSECUREDOC

Docker Compose 網路(開發者如何工作)

什麼是Docker

Docker是一個開源平台,使用基於容器的概念,自動化應用程式的部署和擴展,容於輕便、可攜的容器中。 簡單來說,Docker容器將所有應用程式程式碼及其依賴項集合成一個單元,保持在各個環境之間的一致性,從開發者的筆記型電腦到測試伺服器或生產雲伺服器。

Docker Compose Network(對開發人員的工作原理):圖1

容器不像傳統虛擬機器(VMs)行事,因為它們共享主機系統的作業系統核心。 因此,容器更加高效且啟動速度更快。 事實上,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。

網路模式:您還可以設置網路模式以便為服務使用host、bridge或none。 最常用的是bridge,它隔離容器流量。

什麼是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

在這裡,服務名稱可以用來通信,例如container2

主機

使用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和網路介面,從而繞過網路隔離。

覆蓋

它跨多個主機互連容器,主要用於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

這個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

即使是忙碌的容器也無法存取互聯網,並且無法向其他容器的網路或外部世界發出呼叫。

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地址,而不是依賴於第2層(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

它將共享主機的第2層乙太網介面,但擁有不同的IP地址。

自定義插件

Docker的自定義插件是第三方或使用者開發的網路驅動程式,提供超出Docker預設功能之上的網路能力。 第三方Docker插件可以與外部網路解決方案框架整合,如軟體定義網路,從而提升功能如安全性、可擴展性,以及多主機網路。 Docker為開發者和供應商提供了一個多功能的網路插件架構,允許其以與本地驅動程式相同的方式安裝和使用。

IronSecureDoc

IronSecureDoc for Docker讓開發者更容易將安全文件處理能力新增到其容器化應用程式中。 利用Docker,您可以將您的ASP.NET Core應用程式與IronSecureDoc在一個統一的環境中封裝,方便部署和擴展。 為了使其運行,您需要建立一個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 run命令將啟動一個IronSecureDoc的容器實例。 假設網路隔離是橋接網路。 這也通過使用標誌http://localhost:8080的外部存取; 這將容器網路上運行在端口8080的內部服務暴露給主機網路的端口8080。

預設情況下,容器在Docker的橋接網路上運行,因此它們與其他容器和外部世界隔離,除非您通過端口映射將它們暴露,在這裡您可以做到這一點。 所傳遞的環境變數(HTTP_PORTS)在容器中配置應用程式的行為。 標誌--rm導致容器在停止時被移除。

這樣的設置的優點在於,橋接網路隔離了容器並且對內部連接服務,而端口映射則是從主機機器橋接外部的流量到容器的服務,從而使存取變得簡單。

Docker Compose Network(對開發人員的工作原理):圖4

使用IronSecureDoc與Docker網路端口

IronSecureDoc的REST API允許使用者在Docker中安裝和啟動時編修、認證和加密文件。 欲知更詳細的步驟,請參閱文件此處

例如,要提交文件以進行加密,您可以向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之類的工具在容器中設置Docker的安全文件處理,通過Dockerfile和docker-compose.yml配置環境實現網路隔離。

在Docker中通過REST API進行文件加密需要哪些步驟?

要在Docker中通過REST API加密文件,請使用比如cURL的工具在容器化設置中通過POST請求將文件和參數發送到安全文件處理API。

Docker的網路功能如何提高應用程式的可擴展性?

Docker的網路功能通過允許有效管理服務之間的交互和通信來增強應用程式的可擴展性,簡化工作流程和部署體驗。

將IronSecureDoc整合到現有的Docker系統中的過程是什麼?

通過使用Docker命令設置,利用端口映射和環境變數來保證持續部署和擴展,將IronSecureDoc整合到現有Docker系統中。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話