docker+私有倉庫實現微服務的簡單部署

前段時間一直在使用docker,雖然中間出了不少問題,但還是記錄下,從手動部署到自動化的過程.

剛接觸docker的時候,最早使用的就是docker-compose.yml+registry的方式.

docker和docker-compose的安裝過程不再描述.

1.在/usr/local/,下創建docker文件夾,在路徑下創建父工程文件夾,在創建各位微服務的文件夾

2.在idea中將微服務打成jar包通過xftp將你剛纔的jar,傳入對應的文件夾裏,創建Dockerfile,docker-compose.yml

3.編寫Dockerfile

FROM openjdk:8-jre                要事先在docker裏安裝java jdk環境
MAINTAINER XQloveXH<[email protected]>

RUN mkdir /app                
COPY recommend-eureka.jar  /app/app.jar

ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/app.jar", "--spring.profiles.active=prod"]    啓動命令

EXPOSE 8761          這個是暴露的端口

4.編寫docker-compose.yml

version: '3.1'
services:
  recommend-eureka:
    image: xxx.xx.49.175:5000/recommend-eureka    這裏是你的服務器地址/你的鏡像名字
    container_name: recommend-eureka   容器名字
    ports:
      - 8761:8761   映射端口

 

5.啓動微服務鏡像

在對應微服務目錄下,

docker build -t='image_name' .docker_file    執行dockerfile文件打成鏡像

docker-compose up -d,執行docker-compose.yml文件

但首先你必須開啓並啓動docker的registry,這裏不進行過多描述

等待執行完成

 

因爲微服務需要高併發,高可用,這時候你需要多個服務器,所以這個服務器只是用作倉庫使用,我們需要在其他服務器上拉取我們倉庫裏的微服務鏡像.

6.連接其他服務器拉取

先查看下倉庫裏的鏡像

curl http://xxx.xx.xx.xxx:5000/v2/_catalog

我這裏之前多傳了幾個

docker pull recomend-eureka    這個來拉取你倉庫裏有的就行.

 

7.創建docker-compose.yml進行服務編排

按照之前的操作,在這臺服務器創建/usr/local/docker/項目名

單獨的docker鏡像之間是無法通信的,也就是說服務之間是不能訪問的,所以我們要通過服務編排來解決這個問題.服務編排,也解決了批量啓動微服務的問題.

然後創建 docker-compose.yml

編寫docker-compose.yml

version: '3.1'
services:
  recommend-config:
    image: XXX.XX.XXX.175:5000/recommend-config
    container_name: recommend-config
    ports:
      - 8888:8888
    
  recommend-eureka:
    image: XXX.XX.XXX.175.175:5000/recommend-eureka
    container_name: recommend-eureka
    ports:
      - 8761:8761
    depends_on:
      - recommend-config
    links:
      - recommend-config
    restart: always
    command: ["./wait-for-it.sh", "recommend-config:8888", "", ""]
#    volumes:
#      - ./wait-for-it.sh:/wait-for-it.sh
#    entrypoint: "sh /wait-for.sh recomend-config:8888 -- java -jar /recommend-eureka.jar"
  recommend-service-admin:
    image: XXX.XX.XXX.175.175:5000/recommend-service-admin
    container_name: recommend-service-admin
    ports:
      - 8501:8501
    depends_on:
      - recommend-config
      - recommend-eureka
    links:
      - recommend-config
      - recommend-eureka
    restart: always
    command: ["./wait-for-it.sh", "recommend-config:8888,recommend-eureka:8761", "", ""]
#    volumes:
#      - ./wait-for-it.sh:/wait-for-it.sh
#    entrypoint: "sh /wait-for.sh recommend-config:8888,recommend-eureka:8761 -- java -jar /recommend-service-admin.jar"

 

註釋的地方是因爲之前想的是讓微服務啓動的先後等待的問題,但最後還是沒有解決,需要寫等待的腳本,網上有教程,可惜非運維人員的我無法理解..所以有些需要依賴的微服務會出現問題,這時候需要單獨重新啓動有問題的微服務.

但最終實現了簡單的微服務docker手動人工部署.算了熟練了下docker的操作...

總結

1.每擴展了一個微服務後,需要手動傳jar包到服務器,然後傳到倉庫,在通過倉庫分發給各個服務器,在各個服務器上在docker-compose,編排進行批量部署.

2.可以通到shell腳本來控制微服務的啓動順序,但暫時還沒有做到...

3.這種docker的部署方式對於大量的微服務來說,極度麻煩,運維太難了....

 

所以在下一篇中記錄下,在idea中遠程部署的自動化運維方式.

 

 

 

 

 

 

 

 

 

 

發佈了6 篇原創文章 · 獲贊 0 · 訪問量 1453
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章