1. 程式人生 > >Spring Cloud基於Docker進行打包部署1-環境配置和docker打包執行

Spring Cloud基於Docker進行打包部署1-環境配置和docker打包執行

1、使用linux虛擬機器離線安裝docker

(2)將安裝包拷貝到本地linux虛擬機器中,使用dpkg -i xxx.deb命令安裝。這裡有個問題,docker有一些依賴包,需要一併安裝:

下載依賴deb。

網址:https://pkgs.org/

搜尋:libltdl7

搜尋:libgcrypt20

搜尋:libsystemd-journal0

以上三個deb檔案和docker安裝包一起安裝。將四個deb檔案拷貝到一個目錄中,執行dpkg -i *.deb命令

以上四個包我已經下載好了,大家可以直接用:

(3)敲命令docker -v 命令確認是否安裝成功

2、開啟遠端訪問/搭建java編譯環境

如果開發環境是windows,為了在windows機器上能訪問docker進行相關操作,這裡需要在linux上開放一個埠並啟用遠端訪問

(1)我們修改/etc/default/docker,然後重啟docker服務即可。

# vim /etc/default/docker
DOCKER_OPTS="-H unix:///var/run/docker.sock -H 0.0.0.0:2375"
# service docker restart

現在本地和遠端均可通過2375埠訪問docker程序了。

(2)windows機器上配置環境變數DOCKER_HOST


以上操作不一定能成功,原因不明尷尬

建議在linux環境下編譯jar包,所以需要在linux下安裝jdk、maven並配置環境變數和maven倉庫。如果虛擬機器不能連線大網,還需要藉助Nginx做一個代理。

(1)

安裝JDK

(3)配置maven倉庫,如果虛擬機器不能連線大網,則需要先安裝Nginx,配置使用與虛擬機器連通的能連大網的機器代理外部映象源。

3、開啟專案(eureka-server微服務)路徑,在main資料夾下新增docker資料夾,新增dockerfile

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD microservice-discovery-eureka-0.0.1-SNAPSHOT.jar app.jar
#RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
EXPOSE 8761

注意:ADD那一行的jar包名稱和版本號要與pom中的artifactId和version一致,或者寫成*.jar

如果需要設定容器的時區,在dockerfile中加上

ENV TZ=Asia/Shanghai #或者PST8PDT等,你需要的時區。
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
    echo $TZ > /etc/timezone

4、修改pom加入編譯外掛

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
			<!-- tag::plugin[] -->
			<plugin>
				<groupId>com.spotify</groupId>
				<artifactId>docker-maven-plugin</artifactId>
				<version>0.4.13</version>
				<configuration>
					<imageName>mambo/${project.artifactId}</imageName>
					<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
					<resources>
						<resource>
							<targetPath>/</targetPath>
							<directory>${project.build.directory}</directory>
							<include>${project.build.finalName}.jar</include>
						</resource>
					</resources>
				</configuration>
			</plugin>
			<!-- end::plugin[] -->
		</plugins>
	</build>

5、修改application.yml

server:
  port: 8761

spring:
  application:
    name: microservice-discovery-eureka

eureka:
  instance:
    hostname: localhost
    prefer-ip-address: true
#    表示將自己的Ip註冊到eureka server,如不配置或為false,表示註冊所在作業系統的hostname到eureka server
#    prefer-ip-address: true
  client:
#  eureka.client.registerWithEureka:false和fetchRegistry:false來表明自己是一個eureka server
    registerWithEureka: false
#    表示是否從eureka server 獲取註冊資訊,預設為true,因為這是一個單點的eureka server,
#不需要同步其他eureka server節點的資料,故而設定為false
    fetchRegistry: false

6、從dockerfile中可以看到,打包依賴

frolvlad/alpine-oraclejdk8:slim

這個映象,所以,在打包之前我們需要先在liunx虛擬機器中新增該映象,如何新增呢,咱們的linux虛擬機器連不上外網docker-hub,解決方法如下:

(1)找一個能連線到外網的linux虛擬機器(比如說綠區虛擬機器、阿里雲的雲主機等),安裝docker,配置映象加速器,加快訪問docker-hub的速度:

echo "DOCKER_OPTS=\"--registry-mirror=https://yourlocation.mirror.aliyuncs.com\"" | sudo tee -a /etc/default/dockersudo service docker restart

(2)使用docker pull frolvlad/alpine-oraclejdk8:slim下載映象

(3)使用docker save -o alpine-oraclejdk8_slim.tar frolvlad/alpine-oraclejdk8:slim將映象打成tar包,傳到離線linux虛擬機器中

(4)使用docker load --input alpine-oraclejdk8_slim.tar載入映象,輸入docker images命令檢視映象是不是載入成功。

7、執行打包命令:

(1)cmd到微服務pom.xml所在目錄

(2)輸入命令:mvn clean

(3)輸入命令: mvn package docker:build

此時在docker宿主機指定docker images命令可以發現映象已經生成

8、將該映象跑起來:

linux虛擬機器中執行命令:

docker run --name microservice-discovery-eureka -d -p 8761:8761 -t mambo/microservice-discovery-eureka

同理,打包athena-gateway服務,啟動時使用--link關聯到eureka服務:

docker run --name athena-gateway --link microservice-discovery-eureka:8761 -d -p 8762:8762 -t mambo/athena-gateway

執行docker images和docker ps -a可以看到映象已經裝好而且容器已經執行。

9、訪問下試試:


後記:

其實還有更方便的建立映象的方法,就不用在windows下配置環境變數,也不用在linux中安裝java和maven了:

1、在最外層的pom中加入編譯外掛,各個模組的pom使用上文中的編譯外掛。這樣就可以在該pom路徑下執行maven clean package一鍵打包各個微服務,各個模組的target目錄下有生成的jar包檔案:

    <!--
        指定maven外掛編譯版本
        1:maven:since2.0, 預設用jdk1.3來編譯,maven 3.x 
           貌似是預設用jdk 1.52:windows預設使用GBK編碼,java專案經常編碼為utf8,
          也需要在compiler外掛中指出,否則中文亂碼可能會出現編譯錯誤。 
     -->
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.7.0</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
            <encoding>UTF8</encoding>
        </configuration>
    </plugin>

2、將jar包和Dockerfile拷貝到Linux下同一資料夾下,

3、執行docker build -t 映象名:標籤 . 構建映象


相關推薦

Spring Cloud基於Docker進行打包部署1-環境配置docker打包執行

1、使用linux虛擬機器離線安裝docker(2)將安裝包拷貝到本地linux虛擬機器中,使用dpkg -i xxx.deb命令安裝。這裡有個問題,docker有一些依賴包,需要一併安裝:下載依賴deb。網址:https://pkgs.org/搜尋:libltdl7搜尋:l

Spring Cloud基於Docker進行打包部署4-容器間的連線通訊(單主機環境

--- elasticsearch: image: elasticsearch:latest command: elasticsearch -Des.network.host=0.0.0.0 ports: - "9200:9200" logstash: image: logstash

Spring cloud開發的微服務部署到Linux上內存過高的問題

linux系統服務 內存參數 中間 size 但是 aps 內存占用 style 驗證 【問題描述】   在使用spring cloud過程中一個很嚴重的資源問題就是內存占用過高,而實際上開發測試並沒有很大的量,甚至卻出現了服務無法正常訪問的問題。 【原因分析】 主

Spring Cloud Sleuth(分散式服務跟蹤)(1

首先準備工作如下: 1.服務註冊中心:eureka-server。 2.微服務應用:trace-1,實現REST介面,並呼叫trace-2應用的介面。 其pom.xml檔案如下: <?xml version="1.0" encoding="UTF-8"?> <p

Spring Cloud Hystrix(服務容錯保護)(1

在前面的部落格中我已經將Eureka與Ribbon的使用展示了出來,但是如果將其中的某一個服務停止(Hello-Service)。你會發現Ribbon任然會去訪問那個頁面。 這就需要用到斷路器的功能。 首先將Ribbon工程的pom檔案中加入該jar包:

Spring Boot 系列之五:Spring Boot 通過devtools進行部署

前面已經分享過四篇學習文章: 1、Spring Boot 系統之一:Spring Boot 入門 2、Spring Boot 系統之二:Spring Boot 修改預設埠號和context path 3、Spring Boot 系統之三:Spring Boot 整合JdbcTemplat

基於openvswitch+Docker構建SDN網路測試環境 (使用ovs-docker進行構建)

這是一篇之前寫的筆記,主要記錄了使用openvswitch + Docker 等進行一個小型的SDN網路搭建的操作步驟。由於 之前臨時有其他任務,耽擱了一下,最近開始重新整理,並計劃開發一個簡單的Python指令碼,簡化該網路的建立過程。 同時希望該指令碼可以和控制器的程式進行融合,方便未來可以和docker

spring cloud微服務架構搭建(1

一、搭建Eureka服務 1、利用maven構建工具,快速搭建spring boot專案 1.1:(輸入相關專案名稱,選擇相關依賴等)  將壓縮包解壓到順手的盤,用編輯器開啟。 1.2:完善相關pom檔案和配置檔案application.propertie

Spring Cloud 基於Spring Boot 2.x的服務註冊與發現(Eureka)

一.Spring Cloud 簡介        Spring Cloud為開發人員提供了快速構建分散式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智慧路由,微代理,控制匯流排,一次性令牌,全域性鎖定,領導選舉,分散式 會話,群集狀態)。 分散式系統的協調導致鍋

Spring Cloud Netflix官方文件》1.服務發現:Eureka客戶端

原文連結 譯者:Acamy 1.     服務發現:Eureka客戶端 服務發現是微服務架構的關鍵原則之一。使用手動配置或一些約定方式來處理多服務多例項的方式是非常困難,並且十分脆弱的。Eureka同時是Netflix服務發現的服務端和客戶端。服務端可以通過配置和部署實現高可用,實現方式是每個

Spring Cloud 探索 | Eureka 高可用部署及 unavailable-replicas 問題

Eureka Server除了單點執行之外,還可以通過執行多個例項,並進行互相註冊的方式來實現高可用的部署。所以我們只需要將Eureke Server配置其他可用的 serviceUrl 就能實現高可用部署。 下面我們在上篇文章的基礎上來實現Eureka Server的高可用部署。部

spring cloud Process finished with exit code 1分析

測試環境配置一套Mongodb 副本集,發現新的配置啟動失敗,列印萬專案logo 之後報錯 spring cloud Process finished with exit code 1 控制檯直接沒有報錯資訊,沒有日誌資訊 直接查詢錯誤 開始懷疑是配置spr

基於VS2013 MFC的OPENCV3.1環境構建及測試

frame 向導 tla else 通知 -c .cpp null erp 1. 創建OPENCV工程 1)打開VS2013,點擊新建項目->MFC應用程序,並選擇保存名稱及路徑,如下圖, 2) 點擊確定進入MFC應用程序向導,設

Spring Cloud構建微服務架構分布式配置中心

post ast github 構造 clas mas files cli .class 在本文中,我們將學習如何構建一個基於Git存儲的分布式配置中心,並對客戶端進行改造,並讓其能夠從配置中心獲取配置信息並綁定到代碼中的整個過程。 準備配置倉庫 準備一個git倉庫,可

Spring Cloud Config - RSA簡介以及使用RSA加密配置文件

exp test bee 存在 publickey default label 單位 rom 簡介 RSA非對稱加密有著非常強大的安全性,HTTPS的SSL加密就是使用這種方法進行HTTPS請求加密傳輸的。因為RSA算法會涉及Private Key和Public Key分別

Spring Cloud微服務系統架構的一些簡單介紹使用

Spring Cloud 目錄 特徵 雲原生應用程式 Spring Cloud上下文:應用程式上下文服務 引導應用程式上下文 應用程式上下文層次結構

使用docker-compose來部署開發環境

evo mysql redis name fail 更新 訪問 def pri docker-compose的作用 docker-comopse可以幫助我們快速搭建起開發環境,比如你可以去把redis,mongodb,rabbitmq,mysql,eureka,config

Spring Cloud Config(一):聊聊分散式配置中心 Spring Cloud Config

目錄 Spring Cloud Config(一):聊聊分散式配置中心 Spring Cloud Config Spring Cloud Config(二):基於Git搭建配置中心 Spring Cloud Config(三):基於JDBC搭建配置中心 Sprin

spring cloud: zuul(二): zuul的serviceId/service-id配置(微閘道器)

spring cloud: zuul(二): zuul的serviceId/service-id配置(微閘道器) zuul: routes: #路由配置表示 myroute1:

基於Nginx的中介軟體架構》學習筆記---1.環境配置

一、環境除錯確認 (四項確認) 1、確認系統網路 ping www.baidu.com 2、確認yum可用 yum list|grep gcc 3、確認關閉iptables規則 iptables -L // 檢視目前的防火牆規則 iptab