Docker - 容器連結

容器連結介紹

你好,有志於Docker的愛好者!今天,我們將要進入容器連結的精彩世界。作為你們親切友善的鄰居計算機老師,我在這裡引導你們開始這個旅程,即使你們之前從未寫過一行代碼。所以,請繫好安全帶,我們一起揚帆啟航,馳騁在容器的海洋!

Docker - Container Linking

容器連結就像在派對上介紹兩個朋友。它允許容器之間互相通訊,共享信息和資源。想像你在一個百家宴(我們的Docker主機),每道菜(容器)都需要知道其他菜品的情況。這就是我們使用容器連結所做的!

容器連結的重要性

你可能會想,「我為什麼要在乎容器連結?」讓我給你講一個小故事。從前,在一個遙遠數據中心,應用程序都生活在孤立的環境中。它們無法互相交談、共享數據或合作。那是一種孤獨的存在。但隨著容器連結的出現,一切都被改變了!

容器連結讓我們能夠:

  1. 創建複雜的多容器應用程序
  2. 在容器之間共享數據
  3. 通過隔離服務來提高安全性
  4. 更容易擴展我們的應用程序

基本容器連結

讓我們從一個簡單的例子開始。我們將創建兩個容器:一個網頁服務器和一個數據庫,然後將它們連接起來。

步驟 1:創建數據庫容器

首先,我們將創建我們的數據庫容器。我們在這裡使用MySQL作為例子。

docker run -d --name mydb -e MYSQL_ROOT_PASSWORD=secret mysql:latest

讓我們分解一下:

  • -d:在後台運行容器(分離模式)
  • --name mydb:給我們的容器命名
  • -e MYSQL_ROOT_PASSWORD=secret:設置root密碼的環境變量
  • mysql:latest:使用最新的MySQL映像

步驟 2:創建網頁服務器容器

現在,讓我們創建我們的網頁服務器容器,並將其連接到數據庫。

docker run -d --name myweb --link mydb:db -p 80:80 nginx:latest

這裡發生了什麼:

  • --link mydb:db:這就是魔法!我們正在連接我們的mydb容器,並在網頁容器內稱之為db
  • -p 80:80:將主機上的80端口映射到容器中的80端口

理解連結

當我們使用--link選項時,Docker會為我們做以下幾件事:

  1. 它會在網頁容器的/etc/hosts文件中添加一個條目
  2. 它會在網頁容器中設置環境變量
  3. 它允許網頁容器連接到數據庫容器

讓我們進入我們的網頁容器看看發生了什麼:

docker exec -it myweb bash

一旦進入,我們可以檢查/etc/hosts文件:

cat /etc/hosts

你應該會看到一個對db容器的條目,以及其IP地址。

環境變量

Docker也會為我們設置環境變量。讓我們列舉它們:

env | grep DB_

你會看到像DB_PORTDB_NAME等的變量。這些讓我們的應用程序能夠輕鬆地連接到數據庫。

遗留連結與用戶定義網絡

現在,我有一個坦白。我們剛才使用的--link標誌在Docker中其實已經被視為遺留功能了。這就像在智能手機時代使用翻蓋手機一樣——它可行,但還有更好的選擇。

現在連接容器的現代方法是使用用戶定義網絡。讓我們看看這是怎麼工作的:

步驟 1:創建網絡

docker network create mynetwork

步驟 2:在網絡上運行容器

docker run -d --name mydb --network mynetwork -e MYSQL_ROOT_PASSWORD=secret mysql:latest
docker run -d --name myweb --network mynetwork -p 80:80 nginx:latest

現在,我們的容器可以使用容器名作為主機名進行通信,而不需要任何明確的連結!

用戶定義網絡的優勢

用戶定義網絡提供了以下幾個好處:

  1. 更好的隔離性
  2. 自動DNS解析
  3. 能夠在飛行中將容器連接或從網絡中斷開

實際範例:WordPress與MySQL

讓我們將我們的知識應用於現實世界的範例:使用MySQL設置WordPress。

步驟 1:創建網絡

docker network create wordpress-network

步驟 2:運行MySQL容器

docker run -d --name wordpress-db --network wordpress-network -e MYSQL_ROOT_PASSWORD=rootpassword -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpresspassword mysql:5.7

步驟 3:運行WordPress容器

docker run -d --name wordpress-site --network wordpress-network -e WORDPRESS_DB_HOST=wordpress-db -e WORDPRESS_DB_USER=wordpress -e WORDPRESS_DB_PASSWORD=wordpresspassword -e WORDPRESS_DB_NAME=wordpress -p 8080:80 wordpress:latest

現在,如果你在瀏覽器中訪問http://localhost:8080,你應該會看到WordPress的設置頁面!

結論

恭喜你!你已經踏出了進入容器連結世界的第一步。我們已經介紹了很多內容,從基本的連結到用戶定義的網絡,甚至使用容器設置了真正的WordPress網站。

記住,容器連結就是讓我們的應用程序能夠和諧地一起工作。這就像指揮一支樂團——每個容器都是一種樂器,當正確連接時,它們共同創造出美妙的音樂。

在你繼續你的Docker旅程時,請不斷嘗試不同的容器和網路選項。你越多練習,你就會越熟悉這些概念。

祝你在容器化的道路上一切順利,願你的Docker映像總是能成功構建!

方法 描述 示例
遗留連結 使用--link標誌來連接容器 docker run --name myweb --link mydb:db nginx:latest
用戶定義網絡 為容器通信創建一個自定義網絡 docker network create mynetwork
環境變量 在連接容器時由Docker自動設置 DB_PORTDB_NAME
DNS解析 允許容器使用容器名作為主機名進行通信 mysql://wordpress-db:3306
端口映射 將容器端口映射到主機 -p 8080:80

Credits: Image by storyset