Docker 簡(jiǎn)介
Docker 官方這么解釋自己:
Seamlessly build and share any application — from legacy to what comes next — and securely run them anywhere.
無縫地構(gòu)建和共享任何應(yīng)用程序(從遺留到下一個(gè)應(yīng)用程序),并安全地在任何地方運(yùn)行它們钉凌。
Docker 是一個(gè)開源的應(yīng)用容器引擎刁俭,基于Go 語言并遵從Apache2.0協(xié)議開源列赎。
Docker 可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個(gè)輕量級(jí)奇钞、可移植的容器中砂心,然后發(fā)布到任何流行的 Linux 機(jī)器上介却,也可以實(shí)現(xiàn)虛擬化讨韭。
容器是完全使用沙箱機(jī)制柱搜,相互之間不會(huì)有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低迟郎。
一個(gè)簡(jiǎn)單的SpringBoot項(xiàng)目
使用spingBoot官方https://start.spring.io/,創(chuàng)建一個(gè)簡(jiǎn)單SpringBoot項(xiàng)目聪蘸,添加web依賴宪肖。
創(chuàng)建一個(gè)簡(jiǎn)單訪問:
@SpringBootApplication
@RestController
public class Application {
@RequestMapping("/")
public String home() {
return "Hello Docker World";
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
到這里一個(gè)簡(jiǎn)單SpringBoot項(xiàng)目完成,有疑問可以參考我的一篇文章springboot(一):Hello word
SpringBoot項(xiàng)目添加Docker支持
在pom.xml 文件中添加Docker鏡像名稱
<properties>
<docker.image.prefix>lconcise</docker.image.prefix>
</properties>
plugins中添加Docker構(gòu)建插件
<!-- Docker maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<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>
在目錄src/main/docker下創(chuàng)建 Dockerfile 文件宇姚,Dockerfile 文件用來說明如何來構(gòu)建鏡像匈庭。
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD docker-demo-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
這個(gè) Dockerfile 文件很簡(jiǎn)單,構(gòu)建 Jdk 基礎(chǔ)環(huán)境浑劳,添加 Spring Boot Jar 到鏡像中阱持,簡(jiǎn)單解釋一下:
- FROM ,表示使用 Jdk8 環(huán)境 為基礎(chǔ)鏡像魔熏,如果鏡像不是本地的會(huì)從 DockerHub 進(jìn)行下載
- VOLUME 衷咽,VOLUME 指向了一個(gè)/tmp的目錄,由于 Spring Boot 使用內(nèi)置的Tomcat容器蒜绽,Tomcat 默認(rèn)使用/tmp作為工作目錄镶骗。這個(gè)命令的效果是:在宿主機(jī)的/var/lib/docker目錄下創(chuàng)建一個(gè)臨時(shí)文件并把它鏈接到容器中的/tmp目錄
- ADD ,拷貝文件并且重命名
- ENTRYPOINT 躲雅,設(shè)置容器啟動(dòng)時(shí)運(yùn)行的命令鼎姊。
切記:鏡像名稱全部為小寫
到此,SpringBoot添加Docker依賴就完成了相赁。
Docker部署項(xiàng)目
打包
把新建的項(xiàng)目拷貝到服務(wù)器上相寇,進(jìn)入項(xiàng)目路徑下進(jìn)行打包
mvn package
構(gòu)建Docker鏡像
mvn docker:build
構(gòu)建成功如下圖
鏡像構(gòu)建成功。通過docker images查看鏡像:
lconcise/docker-demo 就是我們構(gòu)建好的鏡像钮科。
啟動(dòng)鏡像
docker run -p 8080:8080 -t lconcise/docker-demo
-p表示端口映射唤衫,冒號(hào)左邊為docker容器外的端口號(hào),右邊為容器內(nèi)的端口號(hào)绵脯。
8080:8080意思是將docker容器的8080端口映射到服務(wù)器上的8080端口佳励。
查看運(yùn)行鏡像
docker ps
源碼地址:https://github.com/lbshold/springboot/tree/master/Spring-Boot-Docker
SpringBoot和Docker 結(jié)合 官方文檔 https://spring.io/guides/gs/spring-boot-docker/