內(nèi)容尚不完善,做做記錄
關(guān)鍵組成部分
- 操作系統(tǒng)CentOS7
- 容器運行環(huán)境Docker
- 遠端版本控制代碼倉庫Gitlab
- 持續(xù)集成工具Gitlab-runner
- 私有鏡像倉庫Harbor
- 鏡像管理Rancher
- 微服務(wù)注冊中心與配置中心jhipster-registry
- 微服務(wù)網(wǎng)關(guān)jhipster-gateway
未來默認配置
- Harbor的GUI操作地址端口:10.101.88.101:8088
- Rancher的GUI操作地址端口:10.101.88.102:8080(只能)
- Gitlab地址:10.101.88.100:8081
- registry:8761
- gateway:80
一青灼、操作系統(tǒng)安裝+操作
- 至centOS官網(wǎng)下載centOS7安裝包進行安裝(操作系統(tǒng)操作不再贅述暴心,默認已經(jīng)會一些基礎(chǔ)的Linux系統(tǒng)操作)
二、Docker安裝杂拨、配置奕坟、操作
2.1 說明(方便理解)
- 是什么贰剥?
- 是一個開源的應(yīng)用容器引擎巍举,簡單可類比為一整個打包溶其、開箱使用的過程
- 為什么要使用?運行原理策橘?
- 開發(fā)者可以將自己通過各種技術(shù)開發(fā)的應(yīng)用+所依賴的軟件包炸渡、環(huán)境一并打包起來成一個docker鏡像,然后在任何裝有docker引擎的地方運行丽已。
- 優(yōu)點蚌堵?
- 由于其基于LXC的輕量級虛擬化的特點(可理解為運行時只運行一套應(yīng)用所需最基礎(chǔ)的內(nèi)容環(huán)境,不需要像傳統(tǒng)部署應(yīng)用一樣在硬件上先運行操作系統(tǒng)沛婴、再運行操作系統(tǒng)內(nèi)其他基礎(chǔ)服務(wù)吼畏、再運行運行環(huán)境、再運行我們開發(fā)的應(yīng)用)瘸味,docker相比KVM之類最明顯的特點就是啟動快宫仗,資源占用小。類比:一次打包應(yīng)用和所依賴環(huán)境配件成一個集裝箱發(fā)貨(而且里面沒有其他無關(guān)雜貨)旁仿,收貨開箱即用藕夫,也正如docker這個單詞的意思
- 版本支持
- 在CentOS6.8是可以支持docker孽糖,但是有些特性無法使用,因此至少使用3.8的內(nèi)核版本毅贮,建議是使用3.10版本以上办悟。國內(nèi)生產(chǎn)環(huán)境很多都是使用CentOS,所以一般使用CentOS7即可滩褥。當然如果是Ubuntu/Debian/Deepin系列的發(fā)行版本也是支持的病蛉。
- 軟件源和鏡像源
- 許多軟件源等資源服務(wù)器在國外一般速度都很慢,這里將docker的軟件源設(shè)置成阿里的瑰煎,并且未來使用的一些鏡像源也會設(shè)置成阿里的(速度快而且和國外服務(wù)器版本同步做的挺好)
2.2 安裝(默認采用root用戶權(quán)限)
-
docker依賴于系統(tǒng)的一些必要的工具铺然,可以提前安裝
yum install -y yum-utils device-mapper-persistent-data lvm2
設(shè)置軟件源(阿里云)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
安裝docker社區(qū)版
yum -y install docker-ce
-
啟動docker服務(wù)
systemctl start docker
-
查看版本方式
docker version
2.3 配置
設(shè)置鏡像源(阿里),下載一些公共鏡像會快些
打開阿里云——>在所有功能里面進入容器鏡像服務(wù)——>鏡像加速器
找到專屬的鏡像加速器地址類似:https://------.mirror.aliyuncs.com 復(fù)制
-
修改docker的一項配置文件(這里采用vim編輯器進行編輯,使用root用戶權(quán)限)
vim /etc/docker/daemon.json
-
添加如下內(nèi)容(如果已經(jīng)有酒甸,則將連接粘貼進去列表即可):
{ "registry-mirrors":[ "https://------.mirror.aliyuncs.com" (如果要指定自己的其他鏡像倉庫還可繼續(xù)在這個列表添加) ] }
設(shè)置允許使用不安全的源(比如自己搭建的未使用https的)魄健,因為新版docker默認使用https,不設(shè)置會報錯
-
如上在 /etc/docker/daemon.json文件內(nèi)加入以下內(nèi)容:
{ "insecure-registries":["ip/域名:端口"] }
-
以上兩個內(nèi)容操作完務(wù)必重新加載配置并重啟docker
systemctl daemon-reload systemctl restart docker
新裝docker可能遇到"can not connect to docker daemon at unix:///----------",解決方法:執(zhí)行重新加載配置并重啟docker插勤,操作在設(shè)置鏡像源中最后一步沽瘦。
2.4 基本常用操作
打包鏡像
-
拉取鏡像
docker pull ip:port/鏡像路徑+名
-
保存鏡像為本地壓縮文件(用于手動轉(zhuǎn)移)
docker save ip:port/鏡像路徑+名 -o /本地路徑.../fileName.tar
-
加載鏡像文件
docker load
運行鏡像
2.5 Dockerfile
dockerfile是用于制定鏡像的文本文件,內(nèi)部定義了各類用于制定一個鏡像所需要的命令农尖,最后由docker build指令讀取并打包定制完成這個鏡像析恋。
2.6docker-compose工具
- Docker-Compose項目是Docker官方的開源項目,負責實現(xiàn)對Docker容器集群的快速編排盛卡。用戶可以在docker-compose.yml內(nèi)預(yù)先配置整個系統(tǒng)需要用到的各個docker鏡像容器信息助隧、配置信息、運行環(huán)境變量等窟扑,并使用本工具的docker-compose命令創(chuàng)建和啟動定義好的所有鏡像容器服務(wù)喇颁÷┙。可以順便也裝上嚎货,后期harbor會使用
2.6.1安裝和使用
-
官方文檔
https://docs.docker.com/compose/install/
-
安裝下載最新二進制文件到/usr/local/bin目錄下(此目錄是直接可運行目錄放這里就不用做軟連接)
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" \ -o /usr/local/bin/docker-compose
-
添加執(zhí)行權(quán)限
sudo chmod +x /usr/local/bin/docker-compose
-
運行命令查看版本,測試可用性
docker-compose --version
三蔫浆、GitLab安裝殖属、運行、配置
3.1 說明
- Gitlab是一個開源的遠端代碼托管工具平臺瓦盛,功能和github洗显、gitee等,但由于開源原环,可以被大家自行修改挠唆、部署應(yīng)用,一般被企業(yè)用來做自己內(nèi)部的代碼托管平臺
- 這里也是看中了gitlab比較出色的持續(xù)集成工具
3.2 安裝并運行(由于已經(jīng)安裝docker嘱吗,所以可以直接拉取gitlab發(fā)布的鏡像即可開箱即用玄组、包括其需要的其他組件)
-
官網(wǎng)文檔:
https://docs.gitlab.com/omnibus/docker/README.html
-
注釋:
-d 后臺運行僅返回一個容器id,這樣避免終端接下來進入某個運行鏡像的交互 --name 給docker運行容器名 --env 環(huán)境變量 --volume(-v) 掛載數(shù)據(jù)(為了把容器內(nèi)數(shù)據(jù)持久化到宿主機不丟失) 宿主機的某個路徑:容器內(nèi)部的使用路徑 --link 服務(wù)連接 目標服務(wù)的服務(wù)名(自己取的):默認服務(wù)名 --publish(-p) 端口映射 宿主機端口:容器內(nèi)運行端口 --restart always 自動重啟(看情況使用,萬一存在服務(wù)連接,則關(guān)注啟動的先后順序)
-
安裝Gitlab所需要的組件 postgresql俄讹、redis
docker run --name gitlab-postgresql -d \ --env 'DB_NAME=gitlabhq_production' \ --env 'DB_USER=gitlab' \ --env 'DB_PASS=password' \ --volume /home/ws/docker/volumes/gitlab/postgresql:/var/lib/postgresql \ sameersbn/postgresql:9.4-12 docker run --name gitlab-redis -d \ --volume /home/ws/docker/volumes/gitlab/redis:/var/lib/redis \ sameersbn/redis:latest
-
安裝Gitlab
docker run --name gitlab -d \ --link gitlab-postgresql:postgresql \ --link gitlab-redis:redisio \ --publish 10022:22 \ --publish 8081:8081 \ --publish 4431:443 \ --volume /home/ws/docker/volumes/gitlab/gitlab/log:/var/log/gitlab \ --volume /home/ws/docker/volumes/gitlab/gitlab/opt:/var/opt/gitlab \ --volume /home/ws/docker/volumes/gitlab/gitlab/conf:/etc/gitlab \ gitlab/gitlab-ce:latest
3.3 訪問和配置
-
運行后打開xx.xx.xx.xx:8081(服務(wù)器地址)發(fā)現(xiàn)是打不開的哆致,因為我們只是把內(nèi)部8081地址映射了出來,實際上內(nèi)部運行監(jiān)聽的端口是默認80
-
解決辦法:更改掛載目錄下的girlab.rb文件患膛,做如下修改摊阀,即可正常訪問
nginx['listen_port'] = 8081
-
-
運行后發(fā)現(xiàn)項目的git地址是容器id,并不是正確的地址
-
解決辦法:更改掛載目錄下的girlab.rb文件踪蹬,做如下修改胞此,修改容器內(nèi)的運行端口,由于上面已經(jīng)做了映射跃捣,所以即可正常訪問
external_url 'http://xx.xx.xx.xx:8081'
-
順便加入以下配置豌鹤,更改ssh訪問方式端口
gitlab_rails['GITLAB_SHELL_SSH_PORT'] = 8081
-
-
重啟容器
docker restart gitlab
四、GitLab-runner安裝枝缔、配置
4.1 說明
- gitlab-ci持續(xù)集成功能借助于gitlab-runner執(zhí)行更優(yōu)
4.2 安裝與運行
-
拉取并運行
docker run --name gitlab-runner -d \ --restart always \ --volume /home/ws/docker/volumes/gitlab/runner:/etc/gitlab-runner \ --volume /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:latest
-
此處的掛載十分重要2几怼!--volume /var/run/docker.sock:/var/run/docker.sockT感丁灵临!由于采用了docker作為執(zhí)行器,runner在執(zhí)行時會運行docker命令趴荸。然而我們采用了docker環(huán)境下安裝runner儒溉,runner在自己的容器內(nèi)沒有docker環(huán)境從而不能運行docker,會進行報錯Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
解決:讓runner通過某種方式在宿主機運行docker命令发钝。由于docker命令實質(zhì)上是訪問本地/var/run/docker.sock路徑進行的一次請求(可以參考官方文檔)顿涣,那么我們只需要吧宿主機的/var/run/docker.sock路徑和runner容器內(nèi)/var/run/docker.sock路徑掛載就可以巧妙解決這個問題
-
由此引發(fā)!T秃馈涛碑!runner采用docker安裝時會配置默認鏡像,然而孵淘,這個默認鏡像在運行時也會用到docker命令蒲障,但是它的內(nèi)部沒有,所以比如在runner運行打包docker鏡像的時候常常會報錯:I/O exception (java.io.IOException) caught when processing request to {}->unix://localhost:80: No such file or directory
解決:配置runner的配置文件config.toml中的默認鏡像掛載:/var/run/docker.sock:/var/run/docker.sock
-
4.3 配置(這里使用全局配置一個共享的runner)
打開gitlab用root用戶登錄->設(shè)置->Overview->Runners
關(guān)閉系統(tǒng)防火墻瘫证、注意gitlab和gitlab-runner的版本匹配問題(全部安裝最新的一般沒問題)揉阎,以避免注冊失敗
-
注冊成為gitlab所使用的runner
docker exec -it gitlab-runner gitlab-ci-multi-runner register
-
這里將產(chǎn)生交互式操作,以進行配置背捌,按照提問填入相應(yīng)內(nèi)容即可,部分內(nèi)容來自之前打開的頁面
**Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):-------填gitlab的訪問地址** http://10.101.80.101:8081/ **Please enter the gitlab-ci token for this runner:-------填頁面上第三點的token** B9jx_m2wGzyzTz****之類 **Please enter the gitlab-ci description for this runner::-------填描述** 隨便填 **Please enter the gitlab-ci tags for this runner (comma separated):-------填標簽(注意這個tag需要在以后項目的.gitlab-ci.yml文件中指定毙籽,以便指定使用哪一個runner)** 隨便填 **Please enter the executor: kubernetes, custom, docker, shell, virtualbox, docker-ssh+machine, docker-ssh, parallels, ssh, docker+machine::-------執(zhí)行方式,這里一般使用docker毡庆,其支持功能更強大,具體參考官方文檔表格中的列舉** docker **please enter the default Docker image (e.g. ruby:2.6)::-------默認鏡像坑赡,這里可以隨便填一個docker鏡像比如openjdk:8,這是防止在未來的gitlab-ci.yml文件里面漏填了image參數(shù)** openjdk:8
至此一個共享的runner創(chuàng)建完成
注意:在設(shè)置中runner的tag選項巡扇,如果在gitlab-ci.yml中沒有指定tag,則需要把tag選項允許無標記的作業(yè)垮衷,才能被使用
4.4 Maven的優(yōu)化配置
- 因為我們使用了docker作為執(zhí)行器厅翔,在使用gitlab-runner自動執(zhí)行maven相關(guān)操作時,會啟動一個新容器進行執(zhí)行搀突,因為容器內(nèi)沒有maven和一些依賴包刀闷,所以每次流水線都會自動下載maven-wrapper.properties內(nèi)部定義的對應(yīng)版本的maven和各種所需依賴。而新下載的maven因為沒有配置國內(nèi)鏡像因而下載依賴也很慢,導(dǎo)致流水線嚴重緩慢仰迁。
- 解決:把容器內(nèi)存放maven相關(guān)內(nèi)容的文件夾掛載到宿主機中甸昏,持久化,并且手動改setting配置國內(nèi)或者內(nèi)部鏡像倉庫
-
為了方便管理徐许,首先單獨指定容器內(nèi)的maven相關(guān)文件夾目錄(默認情況下都會放在緩存文件夾/cache)
在流水線gitlab.ci文件中的編譯部分加入?yún)?shù): -Dmaven.repo.local = /root/.m2
-
打開之前已經(jīng)持久化到宿主機的gitlab-runner的目錄施蜜,修改config.toml文件
把執(zhí)行器內(nèi)目錄掛載出來,這里要賦予讀寫權(quán)限即:rw volumes = [ "宿主機目錄自己定:/root/.m2:rw" "/home/ws/docker/volumes/gitlab/runner-m2:/root/.m2:rw"]
然后就可以打開宿主機目錄內(nèi)的下載好的maven修改setting,同時其他依賴包也會被下載到這里
此方式適用于其他任何需要做執(zhí)行器內(nèi)部數(shù)據(jù)持久化的操作,不僅僅是maven
-
- 解決:把容器內(nèi)存放maven相關(guān)內(nèi)容的文件夾掛載到宿主機中甸昏,持久化,并且手動改setting配置國內(nèi)或者內(nèi)部鏡像倉庫
五雌隅、私有鏡像倉庫Harbor的使用
5.1說明
- 一些我們自己打包的鏡像不需要傳到公共鏡像倉庫中翻默,而且公共鏡像倉庫管理不便,安全性和效率也得不到保證恰起,這時候就需要一個私有鏡像倉庫修械,harbor是vmware公司開發(fā)的一款開源企業(yè)級Docker Registry,綜合了作為鏡像倉庫的管理检盼、權(quán)限等強大功能肯污。
5.2安裝使用
harbor將采用本地安裝而非docker安裝
-
官方文檔:
https://goharbor.io/docs/2.1.0/install-config/
-
準備環(huán)境
docker、docker-compose環(huán)境吨枉,已安裝
-
獲取離線安裝包(-P 下載到指定目錄)
wget -P /home/ws/horbor https://github.com/goharbor/harbor/releases/download/v2.1.0/harbor-offline-installer-v2.1.0.tgz
-
解壓壓縮包到/home/ws/harbor目錄
cd /home/ws/harbor tar -zxvf ./harbor-offline-installer-v2.1.0.tgz
下載速度慢的話可以通過其他方式下載下來然后挪到自己定義的目錄進行解壓
-
進入解壓完的目錄蹦渣,復(fù)制一份默認配置文件harbor.yml.tmpl命名為harbor.yml(此文件harbor安裝啟動后默認會讀取,如果不復(fù)制貌亭,則會以默認配置文件.tmpl為準柬唯。早期版本的harbor配置文件是harbor.cfg)
cp ./harbor.yml.tmpl ./harbor.yml
-
修改配置信息,更改admin密碼属提、運行端口权逗、數(shù)據(jù)持久路徑
vim ./harbor.yml
-
在vim編輯器內(nèi)修改:
http.port為自己的端口 harbor_admin_password為自己的密碼 data_volume為自己定義的路徑 https及其子參數(shù)全部注釋(這里我們采用http方式美尸,所以務(wù)必將https部分注釋掉冤议, 同時注意其他任何使用本機器上的harbor做鏡像倉庫的,一定要把docker的daemon.json中加入本機ip地址可信)
-
安裝并運行
./install.sh
瀏覽器內(nèi)打開配置的地址登錄即可訪問
5.3maven使用dockerfile-maven-plugin插件打包推送鏡像至私有鏡像倉庫
- 參考http://www.reibang.com/p/3929099711ec
- 在pom.xml內(nèi)引入插件
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${dockerfile-maven-plugin.version}</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<!--未來的鏡像地址师坎,同時也是鏡像名恕酸,這里的ip端口就是我們自己部署的IP端口-->
<repository>10.101.80.157/platform/${project.artifactId}</repository>
<!--標簽,一般是鏡像:后面的版本號-->
<tag>${project.version}</tag>
<contextDirectory>${project.build.directory}</contextDirectory>
<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
</configuration>
</plugin>
- 編寫一份dockerfile運用指令:
mvn package dockerfile:build
- 遇到unauthorized: unauthorized to access repository: 胯陋。蕊温。袱箱。。义矛。发笔。沒有登錄
- 如果是手動推送的話,手動登錄即可凉翻,但是當我們使用maven插件時我們需要吧賬號密碼交給maven了讨,即我們需要在maven的setting.conf中配置server
<servers>
<server>
<id>鏡像倉庫地址IP端口</id>
<username>賬號</username>
<password>密碼</password>
</server>
</servers>
- 當使用gitlab-runner并采用docker方式流水線打包推送時,我們需要把之前掛載出來的.m2中的maven進行配置制轰,以便于在容器中的maven知道賬號密碼進行登錄推送前计。
六、Rancher容器管理平臺
6.1說明
- 這里使用rancher1.x版本垃杖,相比2.x版本男杈,1.x定位為各類容器編排工具的上層管理平臺,而2.x移除了其他編排工具调俘,只剩下k8s并進行了拓展伶棒,2.x的模式實質(zhì)上就是阿里云等云廠商整合后的k8s服務(wù)等等。
- 1和2的區(qū)別:https://www.zhihu.com/question/309076492/answer/579260940
6.2安裝使用
-
官方文檔:
https://docs.rancher.cn/docs
-
使用docker拉取彩库、配置并運行rancher
docker run --name rancher -d \ --restart=always \ -p 8080:8080 \ -v /home/ws/docker/volumes/rancher-server/mysql:/var/lib/mysql \ rancher/server
瀏覽器打開地址進行訪問測試
-
操作說明:
-
分級:環(huán)境-應(yīng)用-服務(wù)/容器
環(huán)境:rancher上面可以管理多個環(huán)境苞冯,每個環(huán)境內(nèi)可以管理多個“基礎(chǔ)架構(gòu)”標簽內(nèi)的環(huán)境, 比如主機侧巨、存儲等等舅锄。抽象理解為你管理著一個機房,里面有好多臺服務(wù)器司忱,即整個環(huán)境皇忿。 應(yīng)用:每一個環(huán)境下,可以部署多個應(yīng)用坦仍,應(yīng)用即我們具體話的一套系統(tǒng)鳍烁、軟件、平臺等繁扎。 抽象理解為我們在這幾臺服務(wù)器上裝一些軟件總合成一套可以為用戶提供服務(wù)的系統(tǒng) 服務(wù)/容器:微服務(wù)架構(gòu)下幔荒,一個應(yīng)用由多個服務(wù)共同配合完成,每個服務(wù)又可以跑多份梳玫, 每一份即一個獨立docker容器爹梁。抽象理解為部署分布式應(yīng)用。
-
七提澎、微服務(wù)注冊中心與配置中心jhipster-registry
7.1說明
- jhipster-registry由jhipster團隊開發(fā)并開源姚垃,他是一個綜合了注冊中心和配置中心等功能的應(yīng)用。他內(nèi)部集成了Eureka用于服務(wù)發(fā)現(xiàn)和注冊盼忌、并且集成了對springcloud項目的配置和管理等功能积糯。所以與其使用傳統(tǒng)的注冊中心不如直接使用它來完成這些一條龍服務(wù)掂墓。
7.2使用
-
克隆原始項目,從github下載(git各類操作默認已熟悉)
git clone https://github.com/jhipster/jhipster-registry.git
編譯運行項目