学习Docker之Docker初体验---SpringBoot集成Docker的部署、发布与应用

DOCKER.png

准备工作

安装Docker

进入Centos终端,执行命令

yum install docker

静待一会,等待安装成功,之后再执行

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

准备Springboot项目

简单的创建一个工程,实现一个接口即可,然后在pom中添加docker插件,相关代码如下

@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>

再创建一个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"]

最终的目录结构如下

.
├── 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
运行的效果如下

使用Docker部署服务

将src文件和pom放在任意文件夹下,执行命令

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启动服务

先来看下服务部署完之后,docker里多了些什么吧,执行docker images

简单的看到了docker中存在的镜像、标签、镜像ID、已经创建的时间和大小,看下vector4wang/quick-docker 这个是在pom中<imageName>${docker.image.prefix}/${project.artifactId}</imageName>配置的,比较重要,因为它和接下来要讲的将镜像提交到DockerHub有着密切的联系。
执行docker run -d -p 8080:8080 vector4wang/quick-docker 来启动服务。
简单解释下这个命令

  • -d 代表后台运行
  • -p 标识宿主机与docker服务的端口映射,注意谁前谁后:【宿主端口:docker内服务端口
  • vector4wang/quick-docker 就是启动镜像的名称,当然了使用IMAGE ID 也是可以的

好了,看下docker是否将服务启动成功,执行docker ps


很顺利,运行成功了

  • CONTAINER ID 容器ID
  • PORTS宿主与docker内部的服务映射
  • NAMES 容器名称,跟容器ID对应,如果你不指定名称的话,docker会随机给你分配一个name, 名字还是很有意思的
    接下来,就是验证的时候了,在浏览器输入对应URL
    4.png

    到此,docker部署springboot服务的过程就结束了,接下来就是将自己开发的镜像推送到DockerHub

DockerHub

推送镜像通俗的说就是类似把代码推送到github一样,这个是把一个完整的应用程序推送到DockerHub,供其他Docker pull与使用。
首先你需要注册一个账号,很简单不再赘述
创建仓库的时候,回头看看pom里的配置,两者有着密切的联系


这个你可以理解成maven里面的依赖jar包的“坐标”
回到终端,执行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]# 

接下来就是推送的了,执行命令docker push vector4wang/quick-docker:latest
latest是tag,相当于版本号
包比较大网络传输的比较慢,等了几分钟过程如下(如果失败就多重试几次)


再来看看DockerHub页面
7.png

注意右边红框的代码,意思就是说,在任何docker执行

docker pull vector4wang/quick-docker

就能快速部署并启动一个应用,网络快的话,能达到秒级别的

快速部署

现在来感受下docker的强大之处
我把docker所有容器和镜像清空,快速的去部署quick-docker服务


注意看右下角时间,刚刚好一分钟~~~~

最后

Docker的强大之处你也见识了,真的是再一次解放了程序员,让程序员不再关心如何去配置项目需要的环境。接下来我会持续记录学习和使用Docker的过程,并从以下几个问题着手:

  • 什么是Docker
  • Docker常用命令
  • Image和Continer两者的关系
  • Dockerfile的应用
  • 容器的生命周期
  • Docker内部服务的监控与性能调优
  • 。。。

CSDN:http://blog.csdn.net/qqhjqs?viewmode=list
博客:http://vector4wang.tk/
简书:https://www.jianshu.com/u/223a1314e818
Github:https://github.com/vector4wang
Gitee:https://gitee.com/backwxc
如果感觉有帮助的话,点个赞哦~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容