第一篇:把代碼鏈接到容器 html
第二篇:定製Docker鏡像node
第三篇:發佈鏡像web
第四篇:容器間的鏈接docker
Compose是一個用來定義和運行多容器Docker應用的工具。使用Compose的時候,你可使用一個YAML文件來配置你應用的服務。而後根據配置,使用一個命令便可建立並運行全部的服務。數據庫
使用Compose的時候一般分三步:緩存
Docker Compose能夠作不少事情,可是若是隻考慮在開發環境裏,它能夠作下面這些事情:服務器
一般來講,若是你的應用稍微有點規模,例如你的Web應用須要使用Web服務器,緩存服務器,數據庫服務器。。。若是你手動管理這樣的docker應用,就很繁瑣,也很容易出錯。網絡
而若是使用Docker Compose的話,它能夠定義一個docker-compose.yml文件,在這個文件裏,你能夠定義全部的這些服務,以及它們之間的關係。工具
docker-compose.yml文件就是用來配置服務的,這裏有一個官網給出的例子:post
這個文件寫好以後,就能夠開始Docker Compose的構建過程了。
這個構建的過程實際上會生成鏡像,而後使用這些鏡像就能夠建立容器了。
而後再使用一個簡單的命令,就可讓這些服務啓動並運行了。
下面簡單講一下這個docker-compose.yml文件:
第一行是版本。
下面services,就是服務。
在services裏,能夠定義當構建docker-compose.yml文件時想要運行的服務,而後把這些鏡像以容器運行。這裏能夠定義ASP.NET Core,node,數據庫,緩存等等。
看一下服務裏的東西:
也能夠在裏面定義networks等等。
此外還有這些經常使用形式的命令:
這個命令會構建/從新構建定義在docker-compose.yml文件裏的全部的服務,使用這一個命令就會一次性把全部服務須要的鏡像都建立好。
此外還能夠構建單獨的服務,例如: docker-compose build mongo。有時候你不想把全部的東西都從新構建一遍,你只想構建其中的一個服務。
一切都構建好以後,就能夠啓動並運行了。這時就會使用docker-compose up這個命令。
它會自動建立容器,並運行這些容器。
該命令還能夠加一些參數,例如 docker-compose up --no-deps node,它表示從新構建node鏡像,中止、銷燬從新建立node,但不從新建立node所依賴的服務。
該命令會中止全部的容器,而後刪除它們。
若是隻想中止容器,並不刪除,那麼應該使用docker-compose stop。
此外若是你還想同時刪除全部的鏡像和volumes,你能夠:
docker-compose down --rmi all --volumes。
前面文章裏,我經過手動輸入命令實現了一套ASP.NET Core 和 PostgreSQL的docker 應用。儘管該應用很簡單,只有兩部分組成,但當時仍是輸入了很多命令,也遇到了幾回錯誤,相對仍是繁瑣一些。
如今我把這兩個容器刪掉(包括相應的鏡像和網絡都刪掉吧),而後使用docker-compose來實現。
注意,我還沒寫完。
這裏我指定了版本爲‘3’,當前也就是這個版本。
而後在services裏,我定義了coreweb服務(ASP.NET Core Web應用),它的構建的上下文環境 context是.,也就是當前目錄;使用的dockerfile是標準的Dockerfile;端口是映射到8080,內部端口是5000;使用的網絡是aspcore-network。
最後邊定義了網絡,名爲aspcore-network,類型是bridge橋接網絡。
而後繼續寫:
這裏又添加了postgres-server這個服務,它是直接使用的官方鏡像postgres,網絡仍是同一個網絡,可是這裏設置了一個環境變量,是數據庫的密碼。
定義好docker-compose.yml以後,就能夠進行構建了,執行docker-compose build:
很快就完成了。
而後看一下鏡像列表:
第一個就是我創建的coreweb,其實咱們能夠自定義它的名稱。
而postgres這個鏡像我早就下載下來了,因此它的建立時間比較早。
docker-compose up:
這裏出現了一些問題:這是我第一次運行該項目,運行項目的同時,代碼裏會作數據庫的自動遷移,可是ASP.NET Core Web應用先跑起來了,它開始作遷移,而後發現數據庫服務還沒跑起來呢,因此ASP.NET Core項目就報錯了,它的容器就停掉了。而過了一會postgres的服務才啓動完成。。。
這也很好辦,如今postgres的服務起來了,那麼,我再手動啓動一下ASP.NET Core Web的容器就能夠了。docker-compose start coreweb:
而後訪問http://localhost:8080:
網站就能夠正常訪問了。
如今這種操做還有一點瑕疵,由於docker-compose up以後,終端裏都是log,咱們處在log模式下,沒法作其它操做。須要再打開一個終端來執行其它命令:
因此我想從新搞一下,先把這套東西拆了:docker-compose down:
爲了不上述問題,此次咱們使用daemon mode 守護進程模式,docker-compose up -d:
而後咱們此次使用這個命令來看進程,docker-compose ps:
能夠看到這兩個容器,而後Web應用又發生前面的問題了,我在單獨跑一下它:
此次就OK了。
再次訪問網站:
仍是能夠正常運行的。
下面看一下log,docker-compose logs:
最後銷燬這套東西,此次我把相應的鏡像也刪掉 docker-compose down --rmi all:
能刪的都刪除了,但這裏postgres這個鏡像沒法刪除是由於我還有其它容器使用該鏡像。