學(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菜鳥教程
  • 一臺(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頁面
7.png

注意右邊紅框的代碼忘古,意思就是說徘禁,在任何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è)贊哦~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末翔试,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子抹凳,更是在濱河造成了極大的恐慌遏餐,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赢底,死亡現(xiàn)場(chǎng)離奇詭異失都,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)幸冻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門粹庞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人洽损,你說我怎么就攤上這事庞溜。” “怎么了碑定?”我有些...
    開封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵流码,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我延刘,道長(zhǎng)漫试,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任碘赖,我火速辦了婚禮驾荣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘普泡。我一直安慰自己播掷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開白布撼班。 她就那樣靜靜地躺著歧匈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪砰嘁。 梳的紋絲不亂的頭發(fā)上眯亦,一...
    開封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音般码,去河邊找鬼。 笑死乱顾,一個(gè)胖子當(dāng)著我的面吹牛板祝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播走净,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼券时,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼孤里!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起橘洞,我...
    開封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤捌袜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后炸枣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體虏等,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年适肠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了霍衫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡侯养,死狀恐怖敦跌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情逛揩,我是刑警寧澤柠傍,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站辩稽,受9級(jí)特大地震影響惧笛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搂誉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一徐紧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧炭懊,春花似錦并级、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至父阻,卻和暖如春愈涩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背加矛。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工履婉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人斟览。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓毁腿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子已烤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

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