前言
Docker作爲一個容器無論在生產環境還是開發環境,真的是讓小編愛不釋手,使用以前電腦放在家裏用來做自己的私人服務器使用docker技術安裝各種不同的服務真的是爽歪歪。本文通過介紹在docker中運行eureka服務註冊中心項目來跟大家介紹一下docker運行spring cloud工程。
一、編寫一個eureka服務註冊中心並測試運行
1、編輯pom文件
在idea中創建一天eureka註冊中心的項目,編輯pom文件。
首先,加入eureka註冊中心依賴
<dependencies>
<!--eureka服務端依賴-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
如果在idea中運行eureka註冊中心只添加上面依賴就可以了,如果要把項目使用docker容器中運行就需要將項目打成jar包,在編輯dockerfile文件構建成docker鏡像文件,所以需要加入spring-boot-maven-plugin項目,用maven工具將maven打包成jar包,否則打包成jar包後找不到main函數。
<build>
<plugins>
<!--添加maven-plugin項目.使用maven將項目打包成jar包-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2、編輯eureka註冊中心項目
編輯完pom註冊中心之後,就可以正常編輯eureka註冊中心的業務邏輯,這裏不是本文重點,本文就不再贅述了。
3、打包eureka註冊中心項目並運行
編輯完項目後可以使用maven工具的package命令,或者使用idea中的maven插件將項目打包,並使用java -jar命令測試運行。
二、構建docker鏡像運行項目
1、使用docker命令構建運行eureka註冊中心項目
1)編輯docker file文件
編輯docker file文件可以分爲以下幾個步驟:
-
指定基礎鏡像
-
添加鏡像作者
-
將可執行jar包添加到基礎鏡像的跟目錄下
-
暴露項目網絡端口
-
在基礎鏡像上中運行,即在基礎鏡像中執行的命令
這裏需要注意的是,第三個參數需要和ADD命令中的第二個參數相同,因爲在ADD命令中已講可執行jar包添加到名稱爲第二個參數的容器鏡像中,所以二者需要相同,否則構建是還報找不到可執行jar包的錯誤。
# 指定基礎鏡像
FROM java:8
# 作者
MAINTAINER Strive to Positive Energy
# 把可執行jar包複製到基礎鏡像的跟目錄下
ADD eureka3200-1.0-SNAPSHOT.jar /eureka3200.jar
# 鏡像要暴露端口,如果需要使用端口,在執行run命令時使用-p命令映射
EXPOSE 3200
# 在鏡像運行,爲容器後期執行的命令
ENTRYPOINT ["java","-jar","/eureka3200.jar"]
2)構建docker鏡像
DockerFile文件和可執行jar包導入Linux系統,DockerFile文件中ADD命令可中執行jar沒有寫文件路徑,默認與DockerFile在同一路徑下,如果不在同一路徑下需要在jar文件名前添加文件所在路徑。
使用docker build命令構建docker鏡像:
docker build -t s2pe/eureka:v1.0 .
參數介紹:
-
-t 爲指定鏡像名字和TAG
-
. 爲當前目錄,這裏實際上是一個剩下文路徑
構建結果:
Sending build context to Docker daemon 45.18 MB
Step 1/5 : FROM java:8
---> d23bdf5b1b1b
Step 2/5 : MAINTAINER Strive to Positive Energy
---> Using cache
---> f5df4502e2b6
Step 3/5 : ADD eureka3200-1.0-SNAPSHOT.jar /eureka3200.jar
---> 20674a1a56c2
Removing intermediate container 55cf687bec5b
Step 4/5 : EXPOSE 3200
---> Running in 57e304e6fa6f
---> d0b85c07eddb
Removing intermediate container 57e304e6fa6f
Step 5/5 : ENTRYPOINT java -jar /eureka3200.jar
---> Running in 3c876154a91f
---> 828a05073472
Removing intermediate container 3c876154a91f
Successfully built 828a05073472
3)運行構建的docker鏡像
運行構建的docker鏡像,訪問docker容器:
docker run -d --name eureka -p 3200:3200 s2pe/eureka:v1.0
訪問結果:
2、使用Intellij IDEA中Docker插件構建運行eureka註冊中心項目
1)準備工作
使用Intellij IDEA中的Docker插件也可以構建運行,首先需要在docker主機中配置遠程訪問docker,在idea中安裝Docker插件,並連接docker宿主機。
2)配置運行環境
從Run->Edit Configrations進入配置頁面,需要配飾信息和注意點如下:
-
Name
運行環境名稱,在idea中運行環境的名稱,這裏可以任意取名
-
Server
選擇已經配置好的docker宿主機。
-
DockerFile
docker file文件
-
Context folder
上下文配置文件夾,這裏指的是docker file文件上下文路徑,上文的Docker文件中沒有指定jar包的文件路徑,所以這裏的上下文配置文件夾需要配置成可執行jar包生成的文件夾。利用maven插件默認將jar生成在工程目錄下的target文件夾下,所以Context folder應該寫到target文件夾。
-
Image tag
docker鏡像名稱和TAG,對應docker build命令中的-t屬性
-
Run build image
勾選這個屬性,構建鏡像時先構建可執行jar包
-
Container name
容器名稱。
-
Publish expose ports to the host interfaces
選的暴露端口形式,因爲該進程值暴露一個端口,所以選擇Specifiy,在Bind ports中現在暴露的端口。
-
Bind ports
暴露端口,相當於docker run命令中的-p命令
-
Command preview
可以查看構建和運行命令。
-
Active tool windows
勾選工具欄窗口,可以看到構建運行中的日誌。
3)運行配置查看結果
運行日誌:
Deploying 'eureka Dockerfile: eureka3200/src/main/Dockerfile'...
Building image...
Preparing build context archive...
[==================================================>]10/10 files
Done
Sending build context to Docker daemon...
[==================================================>] 40.13MB
Done
Step 1/6 : FROM java:8
---> d23bdf5b1b1b
Step 2/6 : MAINTAINER Strive to Positive Energy
---> Running in 061f13264587
---> c9354e37b10d
Removing intermediate container 061f13264587
Step 3/6 : VOLUME /tmp
---> Running in 5967c64716b3
---> e917c8ebde82
Removing intermediate container 5967c64716b3
Step 4/6 : COPY /eureka3200-1.0-SNAPSHOT.jar /eureka3200.jar
---> 6a4c4cfd3d1f
Removing intermediate container 742e61aa7fbc
Step 5/6 : EXPOSE 3200
---> Running in 6c3ed881c55e
---> 4bbe1580bd8f
Removing intermediate container 6c3ed881c55e
Step 6/6 : ENTRYPOINT java -jar /eureka3200.jar
---> Running in 63a7dd42d0d9
---> f6a87bcd6d6d
Removing intermediate container 63a7dd42d0d9
Successfully built f6a87bcd6d6d
Creating container...
Container Id: 8677558291e0b4426dc7344a021e5438591555127374d34ecd5d0f1676c61962
Container name: 'eureka'
Attaching to container 'eureka'...
Starting container 'eureka'
'eureka Dockerfile: eureka3200/src/main/Dockerfile' has been deployed successfully.
在日誌中可以看到構建運行的每個步驟,如果有錯誤可以在此查找。