前段時間一直在使用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中遠程部署的自動化運維方式.