强大的Docker
准备工作
- 会一点springboot
不会没关系,花十几分钟补一下Quick-SpringBoot - 会一点Maven
不会没关系,花几分钟补一下Maven的快速应用 - 会一点Linux命令
不会没关系,花十几分再补一下Linux菜鸟教程 - 一台联网的Centos机器
安装Docker
进入Centos终端,执行命令
1 | yum install docker |
静待一会,等待安装成功,之后再执行
1 | systemctl start docker |
然后查看安装的docker版本
1 | [root@iZ2zejaebtdc3kosrltpqaZ ~]# docker version |
准备Springboot项目
简单的创建一个工程,实现一个接口即可,然后在pom中添加docker插件,相关代码如下
1 |
|
1 | <build> |
再创建一个Dockerfile,注意里面的ADD xxx.jar
是你使用maven打包之后的jar包的名称,其他的不变
1 | FROM frolvlad/alpine-oraclejdk8:slim |
最终的目录结构如下
1 | . |
你也可以直接下载源码https://github.com/vector4wang/spring-boot-quick/tree/master/quick-docker
运行的效果如下
使用Docker部署服务
将src文件和pom放在任意文件夹下,执行命令
1 | mvn package docker:build |
在打包的过程中比以往多了以下几步
1 | [INFO] Building image vector4wang/quick-docker |
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
容器IDPORTS
宿主与docker内部的服务映射NAMES
容器名称,跟容器ID对应,如果你不指定名称的话,docker会随机给你分配一个name, 名字还是很有意思的
接下来,就是验证的时候了,在浏览器输入对应URL
到此,docker部署springboot服务的过程就结束了,接下来就是将自己开发的镜像推送到DockerHub
DockerHub
推送镜像通俗的说就是类似把代码推送到github一样,这个是把一个完整的应用程序推送到DockerHub,供其他Docker pull与使用。
首先你需要注册一个账号,很简单不再赘述
创建仓库的时候,回头看看pom里的配置,两者有着密切的联系
这个你可以理解成maven里面的依赖jar包的“坐标”
回到终端,执行docker login
按照提示输入用户名和密码
1 | [root@iZ2zejaebtdc3kosrltpqaZ code]# docker login |
接下来就是推送的了,执行命令docker push vector4wang/quick-docker:latest
latest是tag,相当于版本号
包比较大网络传输的比较慢,等了几分钟过程如下(如果失败就多重试几次)
再来看看DockerHub页面
注意右边红框的代码,意思就是说,在任何docker执行
1 | 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
如果感觉有帮助的话,点个赞哦~