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

以上。

×
Stay Informed

When you subscribe to the blog, we will send you an e-mail when there are new updates on the site so you wouldn't miss them.

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

相關文章

Comment for this post has been locked by admin.
 

評論