Docker是一個開源的引擎,能夠輕鬆的爲任何應用建立一個輕量級的、可移植的、自給自足的容器。開發者在筆記本上編譯測試經過的容器能夠批量地在生產環境中部署,包括VMs(虛擬機)、bare metal、OpenStack 集羣和其餘的基礎應用平臺。
Docker一般用於以下場景:html
Docker 的優勢java
一、簡化程序:
Docker 讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux 機器上,即可以實現虛擬化。Docker改變了虛擬化的方式,使開發者能夠直接將本身的成果放入Docker中進行管理。方便快捷已是 Docker的最大優點,過去須要用數天乃至數週的 任務,在Docker容器的處理下,只須要數秒就能完成。linux
二、避免選擇恐懼症:
若是你有選擇恐懼症,仍是資深患者。Docker 幫你 打包你的糾結!好比 Docker 鏡像;Docker 鏡像中包含了運行環境和配置,因此 Docker 能夠簡化部署多種應用實例工做。好比 Web 應用、後臺應用、數據庫應用、大數據應用好比 Hadoop 集羣、消息隊列等等均可以打包成一個鏡像部署。web
三、節省開支:
一方面,雲計算時代到來,使開發者沒必要爲了追求效果而配置高額的硬件,Docker 改變了高性能必然高價格的思惟定勢。Docker 與雲的結合,讓雲空間獲得更充分的利用。不只解決了硬件管理的問題,也改變了虛擬化的方式。spring
上面文字參考了相關文章;另,關於docker 的安裝和基本的使用見相關教程。docker
環境條件:數據庫
本文采用的工程來自第一篇文章的工程,採用maven的方式去構建項目,並採用docker-maven-plugin去構建docker鏡像。windows
在pom文件加上插件:bash
<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.3</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>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>複製代碼
Spotify 的 docker-maven-plugin 插件是用maven插件方式構建docker鏡像的。架構
修改下配置文件:
server:
port: 8761
eureka:
instance:
prefer-ip-address: true
client:
registerWithEureka: false
fetchRegistry: false複製代碼
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD eureka-server-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複製代碼
FROM <image>
FROM <image>:<tag>
FROM <image> <digest>複製代碼
使容器中的一個目錄具備持久化存儲數據的功能,該目錄能夠被容器自己使用,也能夠共享給其餘容器。當容器中的應用有持久化數據的需求時能夠在Dockerfile中使用該指令。
從src目錄複製文件到容器的dest。其中src能夠是Dockerfile所在目錄的相對路徑,也能夠是一個URL,還能夠是一個壓縮包
指定Docker容器啓動時執行的命令,能夠屢次設置,可是隻有最後一個有效。
爲Docker容器設置對外的端口號。在啓動時,可使用-p選項或者-P選項。
執行構建docker鏡像maven命令:
mvn clean
mvn package docker:build複製代碼
構建eureka-server鏡像成功。
eureka:
client:
serviceUrl:
defaultZone: http://eureka-server:8761/eureka/ # 這個須要改成eureka-server
server:
port: 8763
spring:
application:
name: service-hi複製代碼
在這裏說下:defaultZone發現服務的host改成鏡像名。
dockefile 編寫同eureka-server
構建鏡像:
mvn clean
mvn package docker:build
複製代碼
docker run -p 8761: 8761 -t forezp/eureka-server
docker run -p 8763: 8763 -t forezp/service-hi複製代碼
訪問localhost:8761
Compose 是一個用於定義和運行多容器的Docker應用的工具。使用Compose,你能夠在一個配置文件(yaml格式)中配置你應用的服務,而後使用一個命令,便可建立並啓動配置中引用的全部服務。下面咱們進入Compose的實戰吧。
採用docker-compose的方式編排鏡像,啓動鏡像:
version: '3'
services:
eureka-server:
image: forezp/eureka-server
restart: always
ports:
- 8761:8761
service-hi:
image: forezp/service-hi
restart: always
ports:
- 8763:8763複製代碼
輸入命令: docker-compose up
發現2個鏡像按照指定的順序啓動了。
docker-compose也能夠構建鏡像,如今咱們採用docker-compose的方式構建鏡像。
如今以eureka-server爲例:
將Dockerfile移到eureka-server的主目錄,改寫ADD的相對路徑:
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD ./target/eureka-server-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複製代碼
同理修改service-hi目錄;
編寫構建鏡像docker-compose-dev文件:
version: '3'
services:
eureka-server:
build: eureka-server
ports:
- 8761:8761
service-hi:
build: service-hi
ports:
- 8763:8763複製代碼
docker-compose -f docker-compose.yml -f docker-compose-dev.yml up 複製代碼
Spring Cloud大型企業分佈式微服務雲架構源碼請加企鵝求求:一七九一七四三三八零