
- Docker 教程
- Docker - 首頁
- Docker - 概述
- Docker - Linux 安裝
- Docker - 安裝
- Docker - Hub
- Docker - 映象
- Docker - 容器
- Docker - 登錄檔
- Docker - Compose
- Docker - 使用容器
- Docker - 架構
- Docker - 層
- Docker - 容器與主機
- Docker - 配置
- Docker - 容器與 Shell
- Docker - Dockerfile
- Docker - 構建檔案
- Docker - 公共倉庫
- Docker - 管理埠
- Docker - Web 伺服器
- Docker - 命令
- Docker - 容器連結
- Docker - 資料儲存
- Docker - 卷
- Docker - 網路
- Docker - 安全
- Docker - 工具箱
- Docker - 雲
- Docker - 雲構建
- Docker - 日誌
- Docker - 持續整合
- Docker - Kubernetes 架構
- Docker - Kubernetes 的工作原理
- Docker - 生成式 AI
- Docker - 託管
- Docker - 最佳實踐
- Docker 設定服務
- Docker - 設定 Node.js
- Docker - 設定 MongoDB
- Docker - 設定 NGINX
- Docker - 設定 ASP.Net
- Docker - 設定 MySQL
- Docker - 設定 Go
- Docker - 設定 Rust
- Docker - 設定 Apache
- Docker - 設定 MariaDB
- Docker - 設定 Jupyter
- Docker - 設定 Portainer
- Docker - 設定 Rstudio
- Docker - 設定 Plex
- Docker 設定 - Flame
- Docker 設定 - PostgreSQL
- Docker 設定 - Mosquitto
- Docker 設定 - Grafana
- Docker 設定 - Nextcloud
- Docker 設定 - Pawns
- Docker 設定 - Ubuntu
- Docker 設定 - RabbitMQ
- Docker - 設定 Python
- Docker - 設定 Java
- Docker - 設定 Redis
- Docker - 設定 Alpine
- Docker - 設定 BusyBox
- Docker 設定 - Traefik
- Docker 設定 - WordPress
- Docker 有用資源
- Docker - 快速指南
- Docker - 有用資源
- Docker - 討論
Docker - 容器連結
Docker 容器連結是一個引人注目的功能,它使容器能夠以非常安全有效的方式相互通訊。當您連結容器時,它會在容器之間建立一個安全的隧道,以便一個容器可以訪問在另一個容器中執行的服務。這在微服務架構的設定中尤其方便,因為不同的服務必須放在單獨的容器中。
在本章中,讓我們瞭解什麼是容器連結以及如何使用 Docker 命令和示例來實現它。
什麼是 Docker 容器連結?
如上所述,Docker 中的容器連結可以幫助您構建相互連線的服務網路,這些服務協同工作以形成一個完整的應用程式。連結容器時,需要指定環境變數,並更新 /etc/hosts 檔案,以便更容易地讓連結的容器相互發現。
請注意,Docker 容器連結已經是一個遺留功能,容器相互通訊的現代方法在於 Docker 網路。Docker 網路在容器間通訊方面提供了更大的靈活性和可管理性以及可擴充套件性。使用 Docker 網路,容器的新增或刪除會動態進行,而不會中斷現有的通訊渠道。
雖然連結容器對於開發環境仍然有用,但 Docker 建議對於更復雜和生產級的環境,應該使用 Docker 網路。轉向使用網路反映了 Docker 向更強大、可擴充套件和可管理的容器編排解決方案演進。
使用連結系統連線容器
使用 --link 選項連線 Docker 容器提供安全、直接的通訊,其中一個容器可以連線到另一個容器中提供的服務並使用這些服務。它設定環境變數並填充接收容器的 /etc/hosts 配置檔案,以便在不將任何冗餘埠暴露給外部世界的情況下連線這兩個容器。
要使用 --link 將 Docker 容器連結在一起,在啟動新容器時,可以使用以下語法:
$ docker run -d --name recipient_container --link source_container:image_alias image_name:tag
以下是命令的細分:
- -d - 以分離模式執行容器。
- --name recipient_container - 可以指定接收容器名稱。
- --link source_container/image_alias - 將源容器連結到給定映象別名的接收容器。
- image_name:tag - 指定用於建立接收容器的 Docker 映象。
例如,將名為 db 的 MySQL 資料庫容器與 PHP 應用程式容器連結:
$ docker run -d --name php_app --link db:mysql php:latest

Docker 中的 --link 選項提供了一種建立微服務架構的絕佳方法,其中多個容器可以安全地進行通訊。這簡化了網路設定,因為它隨時配置環境變數和主機檔案條目,以便在連結的容器之間實現順暢的通訊。
使用網路埠對映連線容器
Docker 中的埠對映允許容器與主機系統通訊。這實際上使得 Docker 容器內的幾個埠對主機機器可見,以便您可以從另一個網路或同一 Docker 網路內的其他容器訪問容器內執行的服務。
您將在 Docker run 命令中使用 -p 標誌來使用埠對映連線容器。該標誌設定主機系統和容器埠的對映。
以下是您可以執行此操作的方法:
$ docker run -d --name my-container -p host_port:container_port image_name:tag
在此命令中:
- -d - 在後臺以分離模式執行容器。
- --name my-container - 為容器命名,以便您可以輕鬆管理它。
- -p host_port:container_port - 將 Docker 容器中的 container_port 作為 host_port 暴露在主機系統上。
- image_name:tag - 這指定了容器建立時要使用的 Docker 映象。
例如,以下命令將執行一個 Nginx Web 伺服器並將容器埠 80 對映到主機埠 8080:
$ docker run -d --name my-nginx -p 8080:80 nginx:latest

此命令將從 nginx:latest 映象啟動一個名為 my-nginx 的新容器。現在,可以透過在任何 Web 瀏覽器中訪問 https://:8080 來訪問容器內的 Nginx Web 伺服器。
Docker 建立的環境變數
瞭解 Docker 環境變數,尤其是在使用 --link 連線容器並更新 /etc/hosts 檔案時,對於配置和管理相互依賴的 Docker 環境至關重要。在使用 --link 連結容器時,Docker 本身會設定一些環境變數;它還會修改接收容器中的 /etc/hosts 配置,以支援連結容器之間的順暢通訊。
對於建立的每個連結,Docker 都會在目標容器中設定相應的環境變數。這些變數會自動填充源容器連線的所有資訊,包括 IP 地址和埠。Docker 設定的環境變數:
- 環境變數格式 - Docker 設定的變數格式為 <alias>_PORT_<port>_PROTO、<alias>_PORT_<port>_PORT 和 <alias>_PORT_<port>_ADDR。
- 這裡,<alias> 是賦予源容器的別名,<port> 是源容器中公開的埠號,PROTO、PORT 和 ADDR 分別指協議型別(TCP 或 UDP)、埠號和 IP 地址。
例如,將 MySQL 容器 (DB) 連結到應用程式容器將在應用程式容器的環境中建立諸如 DB_PORT_3306_TCP_PROTO、DB_PORT_3306_TCP_PORT 和 DB_PORT_3306_TCP_ADDR 之類的變數。
更新 /etc/hosts 檔案
Docker 會修改目標容器內 /etc/hosts 的內容,為每個連結的容器新增一個條目。該條目將使用 `--link` 選項指定的別名與源容器的 IP 地址關聯。例如,如果您使用別名“mysql”將 MySQL 容器 (db) 連結起來,Docker 會將目標容器中的 /etc/hosts 內容修改為:
<IP_address_of_db_container> mysql
這允許接收容器將別名 mysql 解析為 db 已對映到的 IP 地址,以便在連結的容器之間輕鬆進行網路通訊。
重要注意事項
動態更新
所有這些環境變數和 /etc/hosts 檔案中的條目都會在每次連結或重新啟動容器時由 Docker 動態更新,以確保通訊的統一性和可靠性。
棄用
雖然 --link 仍然有效,但 Docker 建議使用使用者定義的網路來連線容器,因為它提供了更好的網路配置控制和更大的靈活性。
安全
最好防止敏感資料被硬編碼到環境變數或 /etc/host 條目中。相反,必須使用 Docker 金鑰或配置管理安全工具來管理敏感資料。
結論
Docker 透過使用 –link 和其他高階方法(如埠對映和網路配置)簡化了容器的連線,以便在 Docker 化環境中的容器之間實現順暢的互動。這在微服務架構和複雜的應用程式部署中將非常有用。
雖然 link 提供了一種連線容器的簡單方法,但使用使用者定義的網路是推薦的 Docker 方法,因為它支援增強的網路功能並符合最佳實踐。與舊方法相比,使用者定義的網路提供了對通訊、擴充套件和安全方面的更多控制。
關於 Docker 容器連結的常見問題
我們在這裡收集了一套關於如何 Docker 化容器連結的常見問題及其答案:
1. Docker 容器連結仍在使用嗎?
Docker 容器連結已被棄用,並被更現代的網路選項取代,例如使用者定義的橋接網路、Docker Compose 等。遺留連結可能仍然出現在某些舊設定中,但建議使用較新的網路選項以保持更好的安全性和安全性。
2. Docker 容器連結的替代方案是什麼?
連結容器的主要替代方案是使用者定義的橋接網路和 Docker Compose。這些具有靈活性和控制容器之間網路流量的優點。使用者定義的網路允許使用者為其容器建立隔離的網路,而 Docker Compose 使管理多容器應用程式及其網路配置更加無縫。