學(xué)習(xí)Docker之Docker初體驗(yàn)---SpringBoot集成Docker的部署、發(fā)布與應(yīng)用

DOCKER.png

準(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菜鳥教程
  • 一臺聯(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)目

簡單的創(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

簡單的看到了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ù)。
簡單解釋下這個(gè)命令

  • -d 代表后臺運(yùn)行
  • -p 標(biāo)識宿主機(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對應(yīng),如果你不指定名稱的話,docker會(huì)隨機(jī)給你分配一個(gè)name, 名字還是很有意思的
    接下來,就是驗(yàn)證的時(shí)候了,在瀏覽器輸入對應(yīng)URL
    4.png

    到此,docker部署springboot服務(wù)的過程就結(jié)束了,接下來就是將自己開發(fā)的鏡像推送到DockerHub

DockerHub

推送鏡像通俗的說就是類似把代碼推送到github一樣,這個(gè)是把一個(gè)完整的應(yīng)用程序推送到DockerHub,供其他Docker pull與使用。
首先你需要注冊一個(gè)賬號,很簡單不再贅述
創(chuàng)建倉庫的時(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)于版本號
包比較大網(wǎng)絡(luò)傳輸?shù)谋容^慢,等了幾分鐘過程如下(如果失敗就多重試幾次)


再來看看DockerHub頁面
7.png

注意右邊紅框的代碼,意思就是說,在任何docker執(zhí)行

docker pull vector4wang/quick-docker

就能快速部署并啟動(dòng)一個(gè)應(yīng)用,網(wǎng)絡(luò)快的話,能達(dá)到秒級別的

快速部署

現(xiàn)在來感受下docker的強(qiáng)大之處
我把docker所有容器和鏡像清空,快速的去部署quick-docker服務(wù)


注意看右下角時(shí)間,剛剛好一分鐘~~~~

最后

Docker的強(qiáng)大之處你也見識了,真的是再一次解放了程序員,讓程序員不再關(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/
簡書:http://www.lxweimin.com/u/223a1314e818
Github:https://github.com/vector4wang
Gitee:https://gitee.com/backwxc
如果感覺有幫助的話,點(diǎn)個(gè)贊哦~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容