準(zhǔn)備工作
- 會(huì)一點(diǎn)springboot
不會(huì)沒關(guān)系罚渐,花十幾分鐘補(bǔ)一下Quick-SpringBoot - 會(huì)一點(diǎn)Maven
不會(huì)沒關(guān)系唇辨,花幾分鐘補(bǔ)一下Maven的快速應(yīng)用 - 會(huì)一點(diǎn)Linux命令
不會(huì)沒關(guān)系免都,花十幾分再補(bǔ)一下Linux菜鳥教程 - 一臺(tái)聯(lián)網(wǎng)的Centos機(jī)器
安裝Docker
進(jìn)入Centos終端轻黑,執(zhí)行命令
yum install docker
靜待一會(huì),等待安裝成功琴昆,之后再執(zhí)行
systemctl start docker
然后查看安裝的docker版本
[root@iZ2zejaebtdc3kosrltpqaZ ~]# docker version
Client:
Version: 1.12.6
API version: 1.24
Package version: docker-1.12.6-68.gitec8512b.el7.centos.x86_64
Go version: go1.8.3
Git commit: ec8512b/1.12.6
Built: Mon Dec 11 16:08:42 2017
OS/Arch: linux/amd64
Server:
Version: 1.12.6
API version: 1.24
Package version: docker-1.12.6-68.gitec8512b.el7.centos.x86_64
Go version: go1.8.3
Git commit: ec8512b/1.12.6
Built: Mon Dec 11 16:08:42 2017
OS/Arch: linux/amd64
準(zhǔn)備Springboot項(xiàng)目
簡(jiǎn)單的創(chuàng)建一個(gè)工程,實(shí)現(xiàn)一個(gè)接口即可馆揉,然后在pom中添加docker插件业舍,相關(guān)代碼如下
@SpringBootApplication
@RestController
public class DockerApplication {
@RequestMapping("/hello")
public String hello() {
return "<h1>Hello Spring-Boot Maven Docker</h1>";
}
public static void main(String[] args) {
SpringApplication.run(DockerApplication.class);
}
}
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</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>
</plugins>
</build>
再創(chuàng)建一個(gè)Dockerfile,注意里面的ADD xxx.jar
是你使用maven打包之后的jar包的名稱升酣,其他的不變
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD quick-docker-1.0-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
最終的目錄結(jié)構(gòu)如下
.
├── pom.xml
└── src
└── main
├── docker
│ └── Dockerfile
├── java
│ └── com
│ └── docker
│ └── DockerApplication.java
└── resources
└── application.properties
你也可以直接下載源碼https://github.com/vector4wang/spring-boot-quick/tree/master/quick-docker
運(yùn)行的效果如下
使用Docker部署服務(wù)
將src文件和pom放在任意文件夾下舷暮,執(zhí)行命令
mvn package docker:build
在打包的過程中比以往多了以下幾步
[INFO] Building image vector4wang/quick-docker
Step 1 : FROM frolvlad/alpine-oraclejdk8:slim
Trying to pull repository docker.io/frolvlad/alpine-oraclejdk8 ...
Pulling from docker.io/frolvlad/alpine-oraclejdk8
ff3a5c916c92: Pull complete
51d82ddde372: Pull complete
31b0b3ea6b23: Pull complete
Digest: sha256:52864f95ade9d007fb439f9d396742a104dc1067d32b6837caf6df1e0f1a5dc1
---> 7d711dabe19e
Step 2 : VOLUME /tmp
---> Running in 04ce9f4dce7d
---> f46d6639a6f3
Removing intermediate container 04ce9f4dce7d
Step 3 : ADD quick-docker-1.0-SNAPSHOT.jar app.jar
---> 1540566b402c
Removing intermediate container e8139d4f64e5
Step 4 : RUN sh -c 'touch /app.jar'
---> Running in ae7be1b36370
---> 49a6d6c256ac
Removing intermediate container ae7be1b36370
Step 5 : ENV JAVA_OPTS ""
---> Running in ea06fa1e72ff
---> af945e1fd8b3
Removing intermediate container ea06fa1e72ff
Step 6 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar
---> Running in a1b9bed3a100
---> d1dcc0ee4b44
Removing intermediate container a1b9bed3a100
Successfully built d1dcc0ee4b44
[INFO] Built vector4wang/quick-docker
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 36.315 s
[INFO] Finished at: 2018-01-18T21:58:53+08:00
[INFO] Final Memory: 32M/77M
[INFO] ------------------------------------------------------------------------
[root@iZ2zejaebtdc3kosrltpqaZ code]#
Docker啟動(dòng)服務(wù)
先來看下服務(wù)部署完之后,docker里多了些什么吧,執(zhí)行docker images
簡(jiǎn)單的看到了docker中存在的鏡像噩茄、標(biāo)簽下面、鏡像ID、已經(jīng)創(chuàng)建的時(shí)間和大小绩聘,看下vector4wang/quick-docker
這個(gè)是在pom中<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
配置的沥割,比較重要耗啦,因?yàn)樗徒酉聛硪v的將鏡像提交到DockerHub有著密切的聯(lián)系。
執(zhí)行docker run -d -p 8080:8080 vector4wang/quick-docker
來啟動(dòng)服務(wù)机杜。
簡(jiǎn)單解釋下這個(gè)命令
- -d 代表后臺(tái)運(yùn)行
- -p 標(biāo)識(shí)宿主機(jī)與docker服務(wù)的端口映射帜讲,注意誰前誰后:【宿主端口:docker內(nèi)服務(wù)端口】
- vector4wang/quick-docker 就是啟動(dòng)鏡像的名稱,當(dāng)然了使用IMAGE ID 也是可以的
好了椒拗,看下docker是否將服務(wù)啟動(dòng)成功似将,執(zhí)行docker ps
很順利,運(yùn)行成功了
-
CONTAINER ID
容器ID -
PORTS
宿主與docker內(nèi)部的服務(wù)映射 -
NAMES
容器名稱蚀苛,跟容器ID對(duì)應(yīng)在验,如果你不指定名稱的話,docker會(huì)隨機(jī)給你分配一個(gè)name堵未, 名字還是很有意思的
接下來腋舌,就是驗(yàn)證的時(shí)候了,在瀏覽器輸入對(duì)應(yīng)URL
4.png
到此兴溜,docker部署springboot服務(wù)的過程就結(jié)束了侦厚,接下來就是將自己開發(fā)的鏡像推送到DockerHub
DockerHub
推送鏡像通俗的說就是類似把代碼推送到github一樣,這個(gè)是把一個(gè)完整的應(yīng)用程序推送到DockerHub拙徽,供其他Docker pull與使用刨沦。
首先你需要注冊(cè)一個(gè)賬號(hào),很簡(jiǎn)單不再贅述
創(chuàng)建倉(cāng)庫(kù)的時(shí)候膘怕,回頭看看pom里的配置想诅,兩者有著密切的聯(lián)系
這個(gè)你可以理解成maven里面的依賴jar包的“坐標(biāo)”
回到終端,執(zhí)行
docker login
按照提示輸入用戶名和密碼
[root@iZ2zejaebtdc3kosrltpqaZ code]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username (vector4wang): vector4wang
Password:
Login Succeeded
[root@iZ2zejaebtdc3kosrltpqaZ code]#
接下來就是推送的了岛心,執(zhí)行命令docker push vector4wang/quick-docker:latest
latest是tag来破,相當(dāng)于版本號(hào)
包比較大網(wǎng)絡(luò)傳輸?shù)谋容^慢,等了幾分鐘過程如下(如果失敗就多重試幾次)
再來看看DockerHub頁面
注意右邊紅框的代碼忘古,意思就是說徘禁,在任何docker執(zhí)行
docker pull vector4wang/quick-docker
就能快速部署并啟動(dòng)一個(gè)應(yīng)用,網(wǎng)絡(luò)快的話髓堪,能達(dá)到秒級(jí)別的
快速部署
現(xiàn)在來感受下docker的強(qiáng)大之處
我把docker所有容器和鏡像清空送朱,快速的去部署quick-docker服務(wù)
注意看右下角時(shí)間,剛剛好一分鐘~~~~
最后
Docker的強(qiáng)大之處你也見識(shí)了干旁,真的是再一次解放了程序員驶沼,讓程序員不再關(guān)心如何去配置項(xiàng)目需要的環(huán)境。接下來我會(huì)持續(xù)記錄學(xué)習(xí)和使用Docker的過程争群,并從以下幾個(gè)問題著手:
- 什么是Docker
- Docker常用命令
- Image和Continer兩者的關(guān)系
- Dockerfile的應(yīng)用
- 容器的生命周期
- Docker內(nèi)部服務(wù)的監(jiān)控與性能調(diào)優(yōu)
- 回怜。。换薄。
CSDN:http://blog.csdn.net/qqhjqs?viewmode=list
博客:http://vector4wang.tk/
簡(jiǎn)書:http://www.reibang.com/u/223a1314e818
Github:https://github.com/vector4wang
Gitee:https://gitee.com/backwxc
如果感覺有幫助的話玉雾,點(diǎn)個(gè)贊哦~