学习Docker之Docker初体验---SpringBoot集成Docker的部署、发布与应用
2018-01-18 23:21
579 查看
准备工作
会一点springboot
不会没关系,花十几分钟补一下Quick-SpringBoot
会一点Maven
不会没关系,花几分钟补一下Maven的快速应用
会一点Linux命令
不会没关系,花十几分再补一下Linux菜鸟教程
一台联网的Centos机器
安装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
到此,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页面
注意右边红框的代码,意思就是说,在任何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
如果感觉有帮助的话,点个赞哦~
相关文章推荐
- 使用maven集成docker构建和部署Spring Boot 应用
- 一步一步学习ASP.NET 5 (七)- 快速把ASP.NET 5应用以Docker方式部署到Mac上
- Docker学习笔记五:Docker生成jenkins容器,支持Java Web项目持续集成、持续部署
- Docker学习---web应用部署
- 如何在docker中部署springboot的web应用 以及docker的常用命令大全
- springboot - 集成angular2 应用打包部署
- 持续集成工具Jenkins 结合Docker 部署学习
- docker学习(四)docker中部署javaweb应用两种方法
- jenkins+git+maven+docker持续集成部署
- 关于docker部署javaweb应用的问题
- IT ArcGisServer发布:足迹第二十一步学习ArcGisDesk绘图(如何在项目中使用URL集成地图)
- docker学习笔记7:发布镜像到docker hub上
- 学习笔记——Maven实战(五)自动化Web应用集成测试
- 实战部署weblogic集群及发布应用(1)
- 实战部署weblogic集群及发布应用(5)
- SpringBoot学习之路:04.Spring Boot集成Mybatis操作数据库
- Lync Server 2010部署与应用(八)---发布边缘服务器
- Docker Swarm集群部署应用
- Android学习之 移动应用<App>微信支付集成小结
- 用 Docker 构建、运行、发布来一个 Spring Boot 应用