iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 5
0

這篇文章會著重在透過 Docker 建置 Concourse 環境上,筆者認為目前 Docker 非常適合用在這類型的應用環境,因此針對 Docker 的部分另外做討論。

安裝 Docker

要使用 Docker 需要先有 Docker 環境,目前在 Windows 和 Mac 使用官方提供的安裝檔會比較容易。

Windows / Mac

首先,到官方的下載頁面下載對應系統的安裝程式。

http://ithelp.ithome.com.tw/upload/images/20161205/20065771eB1WHNedDi.png

在 Mac 上只需要像一般安裝軟體一樣拖曳到 Applications 目錄後,啟動 Docker 進行初始化後就可以使用。

http://ithelp.ithome.com.tw/upload/images/20161205/20065771cfdYwHK5WD.png

而 Windows 部分則需要依照安裝程式指示一步步完成安裝即可。

Linux

在 Linux 上 Docker 只能運行於 64 位元的作業系統,並且需要 Linux 3.10 以上的核心版本。

uname -r

我們可以透過 uname 指令來確認 Linux 的核心版本。

目前大部分主流的發行版本(Ubuntu / Fedora 等)都有提供套件可以直接安裝,後面會以 Ubuntu 為例子。

sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates

先對套件做更新,並且安裝新增 Docker 套件來源必要的套件。

sudo apt-key adv \
               --keyserver hkp://ha.pool.sks-keyservers.net:80 \
               --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

接著使用 apt-key 指令將 Docker 的 GPG Key 新增進去,讓 Ubuntu 可以信任來自 Docker 的套件。

官方的安裝指南會列出 Ubuntu 對應版本的套件伺服器,以 Ubuntu 14.04 來說就是 deb https://apt.dockerproject.org/repo ubuntu-trusty main 這行網址,我們透過新增套件來源檔案來增加套件。

echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get update

完成上述步驟後,執行 apt-cache 檢查是否已經可以找到正確的 Docker 套件。

apt-cache policy docker-engine

如果是正確取的的話,應該會看到 docker-engine 的套件,版本大約是 1.12 左右,有些系統還能找到舊版的 docker 套件,安裝時別安裝錯了。

在 Ubuntu 14.04 之後不需要做太多額外的處理,只需要安裝一些 Linux 核心的擴充就可以使用 Docker 。

sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual

執行完上述的指令後,就可以來安裝 Docker 了!

sudo apt-get install docker-engine

完成後,用 service 指令啟動 Docker 讓 Docker 可以運作。

sudo service docker start

安裝 Docker Compose

已架設網站來說,通常會需要網頁伺服器、資料庫等等服務,透過 Docker 管理並不是那麼方便的。使用 Docker Compose 可以統一的撰寫設定,一次性的設置完伺服器。

而 Concourse 也提供 Docker Compose 設定檔,讓我們可以快速建置 Concourse 的環境。

Windows / Mac

在前面的步驟我們使用了 Docker Native 的方式安裝,實際上系統已經裝好 Docker Compose 了,不需要另外做任何事情就可以使用 Docker Compose。

Linux

Docker Compose 基本上只是一個單一執行檔,因此將其下載下來後放到 Linux 上的執行檔目錄即可使用。

curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

目前 Docker Compose 的版本為 1.9.0 下載好之後,還要再賦予執行的權限。

 chmod +x /usr/local/bin/docker-compose

完成上述指令後,就可以使用 Docker Compose 了!

啟動 Concourse

首先,我們需要一個專案的目錄給 Concourse 使用。

mkdir concourse

然後將 Docker Compose 的設定(docker-compose.yml)產生,將以下內容放進去。

concourse-db:
  image: postgres:9.5
  environment:
    POSTGRES_DB: concourse
    POSTGRES_USER: concourse
    POSTGRES_PASSWORD: changeme
    PGDATA: /database

concourse-web:
  image: concourse/concourse
  links: [concourse-db]
  command: web
  ports: ["8080:8080"]
  volumes: ["./keys/web:/concourse-keys"]
  environment:
    CONCOURSE_BASIC_AUTH_USERNAME: concourse
    CONCOURSE_BASIC_AUTH_PASSWORD: changeme
    CONCOURSE_EXTERNAL_URL: "${CONCOURSE_EXTERNAL_URL}"
    CONCOURSE_POSTGRES_DATA_SOURCE: |-
      postgres://concourse:changeme@concourse-db:5432/concourse?sslmode=disable

concourse-worker:
  image: concourse/concourse
  privileged: true
  links: [concourse-web]
  command: worker
  volumes: ["./keys/worker:/concourse-keys"]
  environment:
    CONCOURSE_TSA_HOST: concourse-web

如果是要部署在正式的機器上,建議將 POSTGRES_USERPOSTGRES_PASSWORD 都更改一下,以增進安全性。

在 Concourse 預設都是使用基本驗證的,所以我們要先將使用者的帳號密碼設定進去。

CONCOURSE_BASIC_AUTH_USERNAME: concourse
CONCOURSE_BASIC_AUTH_PASSWORD: changeme

修改完以上數值後,跟前一篇文章一樣需要產生三個必要的金鑰才行。

mkdir -p keys/web keys/worker

ssh-keygen -t rsa -f ./keys/web/tsa_host_key -N ''
ssh-keygen -t rsa -f ./keys/web/session_signing_key -N ''

ssh-keygen -t rsa -f ./keys/worker/worker_key -N ''

cp ./keys/worker/worker_key.pub ./keys/web/authorized_worker_keys
cp ./keys/web/tsa_host_key.pub ./keys/worker

Docker Compose 設定檔中已經寫好自動對應 Docker 容器的規則,所以我們需要新增一個 keys 目錄以對應設定檔。

當上面的設定都完成後,就可以執行 Docker Compose 的指令啟動伺服器。

docker-compose up

如果想在背景執行的話,可以加上 -d 的選項。

docker-compose up -d

最後打開 http://localhost:8080 看看是否正常啟用,以及能不能用設定的帳號密碼登入吧!

下一篇會介紹 Concourse 的 Fly 命令列工具。


上一篇
04 - 建構環境 (1)
下一篇
06 - 用 Fly 控制 Concourse
系列文
不一樣的 CI/CD 工具:Concourse 初探30

尚未有邦友留言

立即登入留言