docker的好處自不必多說,啟動迅速,占用資源少,方便管理。把jar包build構建成docker鏡像,再結合docker-compose管理docker容器的啟動,簡直是開發Spring cloud項目的最佳助手!
一、安裝docker和compose
參考:安裝docker 使用CentOS7
參考:安裝compose
1.安裝穩定版docker compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2.文件授權
sudo chmod +x /usr/local/bin/docker-compose
3.查看是否安裝成功
$
docker-compose --version
docker-compose version 1.25.0, build 1110ad01
二、准備jar包
自行准備一個可運行的jar包即可,測試使用的是一個eureka注冊中心的項目jar包。步驟:
1.創建springboot項目
2.添加eureka依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
3.添加application配置
spring:
application:
name: eureka-server
server:
port: 8761
eureka:
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
三、編寫配置文件

- 測試jar包
- Dockerfile: 構建docker鏡像配置
- docker-compose.yml: compose配置,創建docker容器
1. Dockerfile
FROM java:8
MAINTAINER lin
ADD eurake-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8761
ENTRYPOINT ["java","-jar","app.jar"]
- FROM: 基礎鏡像,通過jdk8鏡像開始
- MAINTAINER: 維護者
- ADD: 復制jar包到鏡像內,名字為app.jar
- EXPOSE: 聲明端口
- ENTRYPOINT: docker啟動時,運行的命令.這里就是容器運行就啟動jar服務
進入Dockerfile的同級目錄,指定鏡像構建:
docker build -t lin/eureka .
最后的點不要漏掉,lin/eureka
是給鏡像起的名字
查看鏡像: docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
lin/eureka latest f45c58780812 4 hours ago 691MB
redis latest dcf9ec9265e0 3 weeks ago 98.2MB
java 8 d23bdf5b1b1b 2 years ago 643MB
2. docker-compose.yml
version: '3'
services:
eureka:
image: lin/eureka
container_name: lin-eureka
restart: always
ports:
- 8761:8761
- services: 指定容器服務,下面可配多個服務
- eureka: 服務名字,自己指定.這里就代表我的eureka服務
- image: 指定啟動的鏡像,就是上邊通過Dockerfile構建的鏡像
- container_name: 給容器起一個名字
- restart: 可重啟,使用always就好
- ports: 聲明映射端口
檢查配置是否正確
docker-compose config
啟動容器服務
docker-compose up
停止並刪除容器服務
docker-compose down
強制啟動重新建立容器
docker-compose up -d --force-recreate
3. 查看服務
查看進程: docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f21fdb5bb57c lin/eureka "java -jar app.jar" 4 hours ago Up 4 hours 0.0.0.0:8761->8761/tcp lin-eureka
查看日志: docker logs lin-eureka
2019-12-16 17:18:17.104 INFO 1 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.2.2.RELEASE)
2019-12-16 17:18:17.482 INFO 1 --- [ main] com.lyf.eurake.EurakeApplication : No active profile set, falling back to default profiles: default
2019-12-16 17:18:19.690 WARN 1 --- [ main] o.s.boot.actuate.endpoint.EndpointId : Endpoint ID 'service-registry' contains invalid characters, please migrate to a valid format.
2019-12-16 17:18:20.315 INFO 1 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=6ff43722-b2c2-392e-b72c-6151fa54c3dd
2019-12-16 17:18:21.170 INFO 1 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-12-16 17:18:22.379 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8761 (http)
四、補充docker-compose配置
docker-compose配置,除了使用image
指定鏡像之外,還可以使用build
把構建鏡像和啟動容器放在一起執行.
version: '3'
services:
eureka2:
build: ./eureka
image: lin-eureka:2
container_name: lin-eureka-2
restart: always
ports:
- 8762:8761
- build: 指定構建目錄,可以使用相對路徑
- image: 跟在build后面,指定構建鏡像的名字
構建鏡像並啟動: docker-compose up -d
Creating network "work_default" with the default driver
Building eureka2
Step 1/5 : FROM java:8
---> d23bdf5b1b1b
Step 2/5 : MAINTAINER lin
---> Using cache
---> 79ef5083226e
Step 3/5 : ADD eurake-0.0.1-SNAPSHOT.jar app.jar
---> 7efd60a9f862
Step 4/5 : EXPOSE 8761
---> Running in 6968db6d10ad
Removing intermediate container 6968db6d10ad
---> a01061f73fe1
Step 5/5 : ENTRYPOINT ["java","-jar","app.jar"]
---> Running in 00c5dc7031e0
Removing intermediate container 00c5dc7031e0
---> 2ed328e41b1c
Successfully built 2ed328e41b1c
Successfully tagged lin-eureka:2
重新構建:
docker-compose build
或者docker-compose up --build
查看鏡像: docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
lin-eureka 2 2ed328e41b1c 49 seconds ago 691MB