接觸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進行構建操作,後台就會進行構建映象,上傳備份映象,更新服務,重啟服務,達到半自動化的效果。
而且還有一些手動更新的命令:
列出所有服務視覺化介面的話我用portainer管理,新版本的ui更一目了然。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
#更新某服務到指定映象版本
更新完成。
建議使用命令列,遇到更新失敗能及時回滾,只能回滾乙個版本,如果要回滾更舊的需要用更新命令指定某舊版本號。
#回退至上個版本
總結: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,通過資源約束實現容器的合理排程。其中,對容器資源的約束,包括硬約束和軟約束,硬約束是指記憶體資源的實際限制條件,而軟約束則是當伺服器實際記憶體資源有...