在Docker系列第一篇 Docker介紹 說明了Docker與基本的指令,這集則是介紹 Docker環境建立 ,包含container管理小技巧,以及常用的功能如port forwarding或是使用volumn及設置環境變數等。
1. Container管理小技巧
1.1 自動移除容器
只要使用docker run 啟動容器,就算該容器已經停止,容器仍然會存在,時間久了容器會很難管理
若每次測試後都要手動刪除容器十分麻煩,故可以在啟動時加入--rm的參數
1.2 背景執行容器
以下是啟動一個Image為ubuntu:14.04的容器,並執行bash指令
透過-d的參數,讓docker在背景執行
透過--name test,將容器名稱設為test,方便後續容器的辨認與操作
-t -i參數可參考上篇文章 Docker介紹與基本指令說明
若要怎麼進到容器裡進行操作,則可以執行指令:
test為容器的名稱,執行之後就會進到容器內,可以發現執行指令後,進到了容器的操作介面CLI。
若要離開,則在CLI中,先按Ctrl + P,再按Ctrl + Q
若沒有在容器的CLI介面中但想看容器內的log,則可以使用:
若加上--folow或是-f指令,容器的log只要有更新,畫面就會更新。
1.3 強制移除容器
若容器狀態是Up時,必須先停止容器後再移除,倘若不想那麼麻煩,可以強制移除容器。
2. Docker環境建立
2.1 Port Forwarding
每個容器都有自己的port,Port Forwarding可以應用在任何有開port的Server,例如MySQL、Postgres、Redis等等。
若要讓host能夠連線到容器的port,必須在run容器時,另外用--publish或-p選項設定port forwarding,以下範例將host的8080 port轉接到該容器的80 port
使用curl測試確認連線成功
若再開啟一個容器也是8080:80,則會出現port is already allocated.的訊息,代表有Port衝突了。
2.2 Volumn
每個容器都是獨立的,使用docker run建議的容器,每次都會跟全新灌好的一樣
若需要讓每個容器都存取到同一個資料夾,需要使用Bind Mount,將host的資料夾或檔案,綁定到容器裡的某個資料夾或檔案,綁定後就能夠在容器中看到host的檔案。將下列指令替換成你電腦中的某個資料路徑
2.3 Network
有了Docker後,開Server相當容易,但像是網頁的架構,需要網頁伺服器與後端連線,此時就須將兩個容器連結在一起,方法有兩種,可以使用--link參數,或是使用Network元件。
先run起web的容器,再使用busybox執行wegt指令連線到網站,其中使用的--link參數,可以給定web或是web:alias,alias是別名。
另外值得需要注意的是,原本的網址localhost變為web,主因是容器名稱即為domain name,另外port號是docker內部連線,只需要使用容器內預設的80即可。
根據上面的範例,會發現--link的用法有先後順序的關係,若第一個建立的容器想連接到第二個容器,則建議使用Docker的Network用法
使用docker network建立一個my-net的網路,就可以透過網路直接使用容器的名稱連線
2.4 環境變數
有一種情況,當我們要使用一個Image開啟很多容器時,每個容器需要不同的DB連線設定,可以用volume共享設定檔,但當容器一多會相當難管理,建議直接設定環境變數,使用-e或--environment選項。
可以執行這兩個指令比較一下輸出,其中busybox取得環境變數的指令是env,會發現第二個指令,在busybox的環境變數多了一行DB_HOST=mysql
這個-e選項可以給定多個,啟動percona容器,建立一個mysql的一個database叫做some,並設定ROOT的密碼為pass,這邊的兩個環境變數會在Docker Hub容器的文件中可以找到
3. 結論
謝謝各位讀者看到這裡,以上介紹了Docker的環境設定以及container管理小技巧,接下來的文章會再繼續透往 Docker實務應用 的方向邁進唷,敬請期待。
若你有任何覺得好用的套件或是任何建議,也歡迎您在下方留言告訴我以及分享給其他人唷
若你覺得文章對你很有幫助,歡迎在網頁右方填入你的email訂閱本站唷
參考資料:
- Docker官網
- 30天與Docker做好朋友
- Docker從入門到實踐