第一篇:把代碼鏈接到容器 html
第二篇:定製Docker鏡像web
第三篇:發佈鏡像sql
Docker提供了兩種方式能夠用來作容器間的鏈接/通訊:docker
Legacy Linking,也就是按照容器名進行鏈接。數據庫
要想使用Legacy Linking,總共分這幾步:bash
我準備使用ASP.NET Core作一個Web應用,數據庫使用PostgreSQL,應用和數據庫分別放在兩個不一樣的容器裏。網絡
先弄數據庫:post
https://store.docker.com/images/postgres網站
docker pull postgresspa
而後運行容器,別忘了起名:
這裏設置了POSTGRES_PASSWORD這個環境變量,它在容器裏就是數據庫的密碼。
而後再創建一個ASP.NET Core 項目:
就選擇ASP.NET Core MVC模板,不帶身份驗證,創建一個項目便可。
而後須要添加Npgsql.EntityFrameworkCore.PostgreSQL這個庫。
創建DbContext:
在Startup裏配置:
配置鏈接字符串:
設置自動遷移,並添加種子數據:
去掉HTTPS相關設置,讓其監聽5000端口:
而後添加一個Migration:
創建Dockerfile:
建立鏡像:
運行容器:
在這裏, --link my-postgres:postgres-server 就是經過容器名鏈接到了my-postgres這個容器,鏈接以後把該my-postgres這個容器名映射爲postgres-server這個名稱,這個名稱和鏈接字符串裏的HOST的名字一致:
看一下正在運行的容器:
能夠看到數據庫和Web應用的容器都在運行。
我想看一下在數據庫容器裏是否成功建立了Students表,以及裏面是否有種子數據了。可使用:
docker exec 容器名/ID 命令,來對容器執行某個命令。
這裏我這樣寫:
進入交互模式,並打開bash。
能夠看到種子數據已經添加成功了。
使用docker logs 容器名/ID來查看log:
應該沒問題。
最後訪問http://localhost:5000:
能夠看到,web應用和數據庫兩個容器之間已經正常的鏈接並運行了。
容器的網路,或者叫橋接的網絡。
能夠這樣想,在一個Docker Host裏,有許多容器,他們之間須要相互通訊。咱們可使用容器名進行通訊,尤爲是開發的時候。
可是當容器比較多的時候,你可能就傾向於對一些容器進行隔離,或者叫作分組。
而咱們經過Docker客戶端就能夠建立這種隔離的網絡。每個隔離網絡裏的容器能夠相互通訊,這時也使用容器名進行通訊。
有了這種隔離的網絡,對容器間的通訊管理就方便多了。
使用這個命令建立網絡:
docker network create --driver bridge 網絡名。
這句話就是使用橋接網絡來創建一個自定義網絡。
而後我讓容器加入到這個網絡裏。其命令大體以下:
docker run -d --network=網路名 --name 網絡內的容器名 鏡像名。
首先爲了演示方便,我把其他的容器都刪掉了:
而後,我把現有的網絡列舉一下。docker network ls:
能夠看到以前創建的my-net也在裏面。
咱們也能夠inspect一下這個網絡:
能夠看到裏面尚未任何的容器。
而後,我運行postgres的容器,讓其加入該網絡:
這時再次inspect該網絡,能夠看到這個容器已經進入網絡了:
而後再把ASP.NET Core應用的容器添加到該網絡:
注意這裏不須要使用--link了。
再次inspect該網絡:
能夠看到裏面有兩個容器了。
而後訪問http://localhost:5000,網站仍然能夠正常訪問:
今天先到這。。。