選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
4 分鐘閱讀時間 (776 個字)

Dockeried Service 部署指南

woman-typing-on-the-microsoft-surface-laptop-mockup

tags: Docker CentOS

Dockerized Service 部署指南

 一、前言

本文主要是說明如何在 CentOS 上於網路及網路時安裝 Docker,接著將容器化的系統部署在機器上的流程,
閱讀此篇的前提假設是讀者已經會定義 Dockerfile 透過 Docker daemon 將服務建置成 docker image。

作業系統的環境配置如下:

OS : CentOS 7 64-bit
RAM: 4G (如果有要跑sonarqube建議6G以上)
CPU: 2-Core
HDD: 24GB

二、安裝Docker(有網路)

先用uname -a檢查一下是x64且3.10以上:

接著follow官方的步驟:

  1. 刪除舊版(如果有的話):
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine


  1. 設定repository:
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo


  1. 安裝:
yum -y install docker-ce


  1. 安裝完成,檢查一下是否有安裝成功:
docker version

錯誤訊息告知docker daemon沒在運行,如下修正:

systemctl daemon-reload
systemctl enable docker
systemctl restart docker

docker version

看到Client跟Server都有出現就對了,
如果此時有網路連線可以再測一下docker版的hello world:

docker run hello-world

嗯!看來一切正常了!

三、安裝Docker(無網路)

特別留意: 以下步驟 1-7 皆需先在有網路的環境操作。

  1. 安裝 Epel(Extra Packages for Enterprise Linux)
    指令: yum install -y epel-release.noarch

  2. 安裝 yum-utils
    這是為了之後會用到的 yum-config-manager 而安裝的
    指令: yum install yum-utils

  3. 安裝 docker CE yum 的 repository
    指令1: yum-config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
    指令2: yum-config-manager --enable docker-ce-nightly

  4. 建置 yum 的快取
    前面步驟1-3安裝了docker相關的package到yum的manager,因此要把yum cache裡的東西build一下
    指令: yum makecache fast

  5. 下載 docker 相關的 rpm
    a. 先建一個 docker 資料夾
    b. 再把相關的 rpm 載到該資料夾

    指令: yumdownloader --resolve docker-ce

  6. 將rpm打包成 tar
    指令: tar cvzf ~/docker.tar.gz *

  7. 在無網路的機器上安裝 docker
    利用步驟6包好的 tar,解開其內容後執行rpm即可
    指令1:mkdir docker && tar xvf docker.tar.gz -C docker
    指令2:cd docker && rpm -ivh --replacefiles --replacepkgs *.rpm



  8. 驗證 docker 已安裝
    指令: docker version

    如下圖,好像出了什麼錯?

    這是因為還沒有把 docker 設定為 service 並重開服務
    指令: systemctl enable docker.service && systemctl restart docker

    如下圖,有兩個區塊的資訊才正確

四、打包dockerized service的image

因為沒有網路,或是image本身並不是在docker hub公開的,
可以利用docker save image-name target-file的語法來匯出tar檔:

docker save registry-server:5000/datastash > datastash.tar
docker save registry-server:5000/acl > acl.tar
docker save registry-server:5000/sdlc > sdlc.tar
docker save registry-server:5000/jenkins > jenkins.tar
docker save registry-server:5000/psql > psql.tar
docker save sonarqube > sonarqube.tar
docker save docker.elastic.co/kibana/kibana:7.0.1 > kibana.tar
docker save docker.elastic.co/elasticsearch/elasticsearch:7.0.1 > elasticsearch.tar

五、匯入打包的image

  1. 先檢查機器上的images是不是空的
docker images


  1. 接著再匯入
docker load < datastash.tar
docker load < acl.tar
docker load < sdlc.tar
docker load < jenkins.tar
docker load < psql.tar
docker load < sonarqube.tar
docker load < kibana.tar
docker load < elasticsearch.tar


  1. 確認image都有匯入了
docker images

六、安裝docker-compose(有無網路都一樣)

  1. 這裡下載binary檔

    或透過指令:

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

  1. 接著將該檔搬到/usr/local/bin(假設目前路徑為/root/temp)
mv /root/temp/docker-compose /usr/local/bin/

  1. 更改它的權限為可執行的
chmod +x /usr/local/bin/docker-compose

  1. 確認是不是安裝成功了
docker-compose --version

七、利用docker-compose開啟所有service

以下所啟動的服務主要是筆者所在團隊開發的一套 叫 AVC 的產品,其他的 Domain 就不多加說明,重點在系統有如預期正常運作即可。

利用以下指令可以將docker-compose.yml裡所定義的服務都開啟:

docker-compose up

由於要載入的服務相當之多,等console輸出的各種訊息到一個差不多的點(沒有再有新的輸出),可以打開瀏覽器來看是不是能正常登入AVC:

http://<<host-ip>>:8084/gssdlc-portal-web

試著登入看看?

建一個gitlab/github的權限(如果客戶有的話)

建一個專案

新增一張申請單並啟動它

成功啦!

下載成功的結果

恭禧!已經用docker-compose啟動整套SSDLC了!

八、結論

以上就是 dockerized service 的部署,
由於客戶端很有可能是沒有網路的,什麼都不能裝或下載,
所以最後再提醒一下在客戶端「無」網路時必須先在「有網路」的環境需要備齊的檔案:

  1. docker 的 binary 檔
  2. docker-compose 的 binary 檔
  3. 匯出的 docker image 的 tar file(s)
  4. docker-compose.yml

以上。

Jenkins 容器中執行 docker 指令
透過 Aspose.Words 讓設定 SectionBreakOddPage(自下個奇數頁起) 的...

相關文章