iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 22
0
DevOps

不一樣的 CI/CD 工具:Concourse 初探系列 第 22

22 - 自訂資源 (2)

  • 分享至 

  • xImage
  •  

為了要能夠自己製作 Concourse 的資源,我們需要先了解 Docker 的基本使用才行。

關於 Docker 安裝的方法在一開始架設 Concourse 的時候已經介紹過了,目前不論是 Windows / Mac / Linux 的安裝都相對的簡單,只要能夠將對應的套件安裝到作業系統上就可以使用。

下載 Docker Image

一般來說 Docker 的 Image 是透過一個類似 Git Commit 的方式組成,所以是一種類似樹狀的結構。當我們指定使用某個 Image 的時候就會自動下載,不過也可以預先下載好 Image 在系統中加快操作的速度。

Concourse 也是一樣的,如果在操作中使用到的 Image 已經被下載的話,就不用重新下載。除非指定的版本不存在,一般都是沒有指定版本使用最新版的時候才會需要執行這個動作。

docker pull username/repoistory

大多數的 Docker Image 都會是由 usernamerepoistory 所組成的,如果遇到像是 ruby ubuntu 這類的,就代表是官方所提供的 Docker Image。

運行 Docker Image

如果 Docker Image 有編譯的行為,直接使用 Dockerfile 設定後重新執行有時候會花上不少時間,所以通常會先執行一個作為基底的 Docker Image 先模擬一次操作,再開始動作。

docker run [options] username/repoistory command

舉例來說,我們要執行 Ruby 的 2.3

docker run -it ruby:2.3 /bin/bash

如果不指定版本的話,可以省略 :2.3 的設定,使用 -it 是表示 interactivetty 兩個設定,這會讓我們可以對 Docker Image 操作以及看到輸出的畫面。

建置 Docker Image

當我們寫好 Dockerfile 之後,就會需要將他轉換為實際的 Docker Image。不過實際上就是由 Docker 自動地跑一次設定環境的流程,然後再封存成一個檔案。

docker build path

一般來說 path 通常會用 . 來表示目前這個目錄。不過直接用 build 會有生成的 Image 沒有命名的問題,所以一般大多是這樣使用。

docker build -t elct9620/mrb-compiler .

-t 表示 tag 來標記 Docker Image 的名稱和標先(如果想要指定成某個版本可以用 elct9620/mrb-compiler:1.2.0 來指定)並且指定 Dockerfile 在目前的目錄下。

有時候也會看到專案的目錄結構類似下面這樣。

  • /example-project
    • Dockerfile
    • /redis
      • Dockerfile
    • /postgres
      • Dockerfile

這就表示專案下有多個 Docker Image 需要建置,也就是指定 path 的使用時機。

上傳 Docker Image

當我們製作完成 Docker Image 之後,就需要上傳到 Registery (儲存 Docker Image 的伺服器)這時候就需要使用這個指令。

docker push username/repoistory

規則上基本是一樣的,不過前置的 username 只能用自己的帳號當作名稱。

如果還沒有帳號,可以到 Docker Hub 註冊一個,或者使用自己架設的 Register 伺服器。

如果想上傳到自己的伺服器,可以改為下面的指令。

docker push server/username/repoistory

簡單說就治明確的指定伺服器的網址即可。

如此一來,我們就可以在 Concourse 裡面使用我們自己的 Docker Image 來當作自訂資源的基礎。

下一篇文章會介紹基本的 Dockerfile 寫法。


上一篇
21 - 自訂資源 (1)
下一篇
23 - 自訂資源 (3)
系列文
不一樣的 CI/CD 工具:Concourse 初探30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言