Docker Swarm的集群化實踐以及感想

2021-08-21 08:10:30 字數 2516 閱讀 8215

接觸docker也有幾年,分為幾個階段:

1、最早只會run,stop,start,打好war包丟容器內去跑,把容器當成虛擬機器使用。

2、把jar包直接打成映象,服務隨映象啟動而生。

3、使用gitlab、jenkins和docker集群、以及阿里雲容器映象服務,jenkins持續構建,用指令碼打成映象後push到阿里雲倉庫管理,可隨時回滾專案。

4、學習k8s中,計畫把當前服務發現治理都用k8s實現

下面分享一下我的實現方案:

1、jenkins和gitlab關聯,並新增構建完成時指令碼:

# 進入target 目錄複製jar包

#構建docker 映象

docker build -t $image_name .

date_hour="`date +%y%m%d%h%m`"

date_day="`date +%y%m%d`"

#打包映象,版本號為日期和到分鐘

docker tag $image_name $image_name:latest

docker push $image_name:latest

docker tag $image_name $image_name:$date_hour

docker push $image_name:$date_hour

docker tag $image_name $image_name:$date_day

docker push $image_name:$date_day

#更新映象

然後是dockerfile檔案:

#修改時區和編碼 以及配一些服務必要的許可權

env tz=asia/shanghai

run ln -snf /usr/share/zoneinfo/$tz /etc/localtime && echo $tz > /etc/timezone

run localedef -i zh_cn -f utf-8 zh_cn.utf-8

run groupadd -r admin -g 1000 && \

useradd -u 1000 -r -g admin -d /home/admin -c "docker image user" admin

run chown -r admin:admin /home/admin /logs &&\

chmod -r 777 /home/admin /logs

#開放的埠

expose 30000

user admin在發布stack的時候定義一些執行時的命令:

version: '3'

services:

volumes:

- /data/jars/logs:/logs

container_name: multi

network_mode: "bridge"

ports:

- "30000:30000"

extra_hosts:

- "nameserver:172.11.x.x"

- "rocketmq:172.11.x.x"

- "agent:172.11.x.x"

將每個微服務都獨自開乙個服務,最後只要**需要更新,在jenkins進行構建操作,後台就會進行構建映象,上傳備份映象,更新服務,重啟服務,達到半自動化的效果。

而且還有一些手動更新的命令:

列出所有服務 

docker service ls

新增副本

--update-delay 59s:更新間隔

滾動更新

latest:版本號

--update-delay 59s:更新間隔,如果只有乙個服務可不用

馬上回滾

--update-delay 59s:回滾間隔,如果只有乙個服務可不用

更新步驟:

1、預發布與生產環境用同一套映象,預發布伺服器上通過jenkins構建,生成映象,得到乙個版本號,如:201806130101,進行測試。

2、測試通過後更新生產環境:

2選1

2.2、或者,ssh對應伺服器,執行:

#列出所有服務

docker service ls

#更新某服務到指定映象版本

更新完成。

建議使用命令列,遇到更新失敗能及時回滾,只能回滾乙個版本,如果要回滾更舊的需要用更新命令指定某舊版本號。

#回退至上個版本

視覺化介面的話我用portainer管理,新版本的ui更一目了然。

總結:docker真的是個不錯的東西,我僅僅將其發揮到一成,k8s是趨勢,希望我能在下個容器欄目寫的是k8s。

docker swarm集群部署應用

參考 使用docker machine搭建docker swarm集群並部署nginx服務 docker machine ssh swarmmng docker service create replicas 3 name web nginx p 80 80 nginx 或者先登入管理節點機器,然後...

Docker Swarm集群 使用NFS共享儲存

系統環境為centos,一共有7臺機子組成了docker swarm集群,每台機子都要安裝nfs ipdocker角色 nfs角色 111.111.3.41 manager server 111.111.3.42 manager client 111.111.3.43 manager client ...

Docker Swarm 經濟高效的容器排程

本文講的是docker swarm 經濟高效的容器排程 編者的話 本文 了幾種容器排程策略,並以記憶體約束為例,討論了如何利用docker swarm,通過資源約束實現容器的合理排程。其中,對容器資源的約束,包括硬約束和軟約束,硬約束是指記憶體資源的實際限制條件,而軟約束則是當伺服器實際記憶體資源有...