iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 6
1
DevOps

就是「懶」才更需要重視DevOps系列 第 6

Day6 Docker-Composr 與 Docker Command 差異

昨天示範透過 docker command 快速啟動 nginx,但是通常docker command只會用於測試使用,原因是如果服務本身只有透過指令建置,缺點會有以下幾項:

  • 無法進行版本控制:
    透過指令建制雖然很快速,但是當容器執行動作較為複雜時,往往難以使用簡短指令達成建置,另一方面每當新環境或者新機器需要相同服務時,都必須執行相同指令,容器數量越多時就越難以控制。
  • 當機器死亡時,沒有辦法迅速將服務建置完成:
    萬一線上機器死亡且沒有備援機器時,需要迅速啟動服務,這時還需要找指令及建置會花費太多時間,這樣就失去使用 docker 用意。

所以建議透過 docker-compose.yml 檔案做為版控保留,以下示範 docker-compose.yml 檔案寫法,yml 檔案注重排版對齊,往往會因為多一個空白鍵或者少一個,造成服務無法建置。docker-compose 安裝步驟

  • 實用工具
    在開始撰寫 docker-compose.yml 之前,先介紹一個管理 docker 的UI工具,執行以下指令在開啟Pontainer 頁面
docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /home/rdmb0369/RD/Portainer:/data portainer/portainer

開始介紹該如何使用 docker-compose.yml 建置,下方 yml 檔文件在搭配docker-compose up -d 指令,即可完成 nginx 服務建置,但是目前服務尚未對外,且建議將 container 名稱採用有意義的命名,往後在為運時比較能看懂,故仍需要修正 docker-compose.yml 後才可以讓專案使用。

version: '3'            # 目前使用的版本

services:               # services 固定字
  web:                  # 可以隨機命名,識別用
    image: nginx:1.12.1 # image 容器 + 版本號

每一次調整 docker-compose.yml 後,只需要在重新執行 docker-compose up -d 指令,服務就會重新佈署。

version: '3'                      # 目前使用的版本

services:                         # services 固定字
  web:                            # 可以隨機命名,識別用
    image: nginx:1.12.1           # image 容器 + 版本號
    container_name: nginx-servie  # 容器名稱
    restart: always               # 當機器重新啟動時,服務會自動啟動
    ports:                        # 容器外與容器內的Port
      - 8081:80

上述的範例執行完畢後,打開 nginx 頁面 ,即可看見 nginx 畫面,接著會介紹該如何將自己開發的專案,掛載到容器內。

// default.conf
server {
    listen       80;
    server_name  localhost;

    location / {
        root   /home/project;
        index  index.html index.htm;
    }

}
// index.html
<h1>1234</h1>
version: '3'                      # 目前使用的版本

services:                         # services 固定字
  web:                            # 可以隨機命名,識別用
    image: nginx:1.12.1           # image 容器 + 版本號
    container_name: nginx-servie  # 容器名稱
    restart: always               # 當機器重新啟動時,服務會自動啟動
    ports:                        # 容器外與容器內的Port
      - 8081:80
    volumes:                      # 將容器外檔案掛載至容器內,如果容器內相同路徑已經存在相同檔案,則會覆蓋內容
      - ./default.conf:/etc/nginx/conf.d/default.conf
      - ./index.html:/home/project/index.html

上方範例除了覆蓋容器內原本的 default.conf 內容,更掛載新的 index.html 檔案至 /home/project/ 路徑底下。

透過docker-compose.yml可以了解到,每一次的更改都可以推至版控工具(ex:github or gitlab...),需要重新佈署服務時只需要執行 docker-compose up -d就完成啦~是不是很快呢。


上一篇
Day5 K8S架構 & Docker 快速建立環境示範
下一篇
Day7 容器世界該如何彼此溝通
系列文
就是「懶」才更需要重視DevOps30

1 則留言

0
icekimo
iT邦新手 3 級 ‧ 2019-09-21 18:06:17

我後面幾天也有寫portainer.io耶/images/emoticon/emoticon43.gif

我要留言

立即登入留言