[关闭]
@xiaoxiaowang 2018-01-21T01:54:44.000000Z 字数 5182 阅读 1294

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

Docker SpringBoot Maven


准备工作

安装Docker

进入Centos终端,执行命令

  1. yum install docker

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

  1. systemctl start docker

然后查看安装的docker版本

  1. [root@iZ2zejaebtdc3kosrltpqaZ ~]# docker version
  2. Client:
  3. Version: 1.12.6
  4. API version: 1.24
  5. Package version: docker-1.12.6-68.gitec8512b.el7.centos.x86_64
  6. Go version: go1.8.3
  7. Git commit: ec8512b/1.12.6
  8. Built: Mon Dec 11 16:08:42 2017
  9. OS/Arch: linux/amd64
  10. Server:
  11. Version: 1.12.6
  12. API version: 1.24
  13. Package version: docker-1.12.6-68.gitec8512b.el7.centos.x86_64
  14. Go version: go1.8.3
  15. Git commit: ec8512b/1.12.6
  16. Built: Mon Dec 11 16:08:42 2017
  17. OS/Arch: linux/amd64

准备Springboot项目

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

  1. @SpringBootApplication
  2. @RestController
  3. public class DockerApplication {
  4. @RequestMapping("/hello")
  5. public String hello() {
  6. return "<h1>Hello Spring-Boot Maven Docker</h1>";
  7. }
  8. public static void main(String[] args) {
  9. SpringApplication.run(DockerApplication.class);
  10. }
  11. }
  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-maven-plugin</artifactId>
  6. </plugin>
  7. <plugin>
  8. <groupId>com.spotify</groupId>
  9. <artifactId>docker-maven-plugin</artifactId>
  10. <version>0.4.3</version>
  11. <configuration>
  12. <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
  13. <dockerDirectory>src/main/docker</dockerDirectory>
  14. <resources>
  15. <resource>
  16. <targetPath>/</targetPath>
  17. <directory>${project.build.directory}</directory>
  18. <include>${project.build.finalName}.jar</include>
  19. </resource>
  20. </resources>
  21. </configuration>
  22. </plugin>
  23. </plugins>
  24. </build>

再创建一个Dockerfile,注意里面的ADD xxx.jar是你使用maven打包之后的jar包的名称,其他的不变

  1. FROM frolvlad/alpine-oraclejdk8:slim
  2. VOLUME /tmp
  3. ADD quick-docker-1.0-SNAPSHOT.jar app.jar
  4. RUN sh -c 'touch /app.jar'
  5. ENV JAVA_OPTS=""
  6. ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

最终的目录结构如下

  1. .
  2. ├── pom.xml
  3. └── src
  4. └── main
  5. ├── docker
  6.    └── Dockerfile
  7. ├── java
  8.    └── com
  9.    └── docker
  10.    └── DockerApplication.java
  11. └── resources
  12. └── application.properties

你也可以直接下载源码https://github.com/vector4wang/spring-boot-quick/tree/master/quick-docker
运行的效果如下
1.png

使用Docker部署服务

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

  1. mvn package docker:build

在打包的过程中比以往多了以下几步

  1. [INFO] Building image vector4wang/quick-docker
  2. Step 1 : FROM frolvlad/alpine-oraclejdk8:slim
  3. Trying to pull repository docker.io/frolvlad/alpine-oraclejdk8 ...
  4. Pulling from docker.io/frolvlad/alpine-oraclejdk8
  5. ff3a5c916c92: Pull complete
  6. 51d82ddde372: Pull complete
  7. 31b0b3ea6b23: Pull complete
  8. Digest: sha256:52864f95ade9d007fb439f9d396742a104dc1067d32b6837caf6df1e0f1a5dc1
  9. ---> 7d711dabe19e
  10. Step 2 : VOLUME /tmp
  11. ---> Running in 04ce9f4dce7d
  12. ---> f46d6639a6f3
  13. Removing intermediate container 04ce9f4dce7d
  14. Step 3 : ADD quick-docker-1.0-SNAPSHOT.jar app.jar
  15. ---> 1540566b402c
  16. Removing intermediate container e8139d4f64e5
  17. Step 4 : RUN sh -c 'touch /app.jar'
  18. ---> Running in ae7be1b36370
  19. ---> 49a6d6c256ac
  20. Removing intermediate container ae7be1b36370
  21. Step 5 : ENV JAVA_OPTS ""
  22. ---> Running in ea06fa1e72ff
  23. ---> af945e1fd8b3
  24. Removing intermediate container ea06fa1e72ff
  25. Step 6 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar
  26. ---> Running in a1b9bed3a100
  27. ---> d1dcc0ee4b44
  28. Removing intermediate container a1b9bed3a100
  29. Successfully built d1dcc0ee4b44
  30. [INFO] Built vector4wang/quick-docker
  31. [INFO] ------------------------------------------------------------------------
  32. [INFO] BUILD SUCCESS
  33. [INFO] ------------------------------------------------------------------------
  34. [INFO] Total time: 36.315 s
  35. [INFO] Finished at: 2018-01-18T21:58:53+08:00
  36. [INFO] Final Memory: 32M/77M
  37. [INFO] ------------------------------------------------------------------------
  38. [root@iZ2zejaebtdc3kosrltpqaZ code]#

Docker启动服务

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

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

好了,看下docker是否将服务启动成功,执行docker ps
3.png
很顺利,运行成功了

DockerHub

推送镜像通俗的说就是类似把代码推送到github一样,这个是把一个完整的应用程序推送到DockerHub,供其他Docker pull与使用。
首先你需要注册一个账号,很简单不再赘述
创建仓库的时候,回头看看pom里的配置,两者有着密切的联系
5.png
这个你可以理解成maven里面的依赖jar包的“坐标”
回到终端,执行docker login 按照提示输入用户名和密码

  1. [root@iZ2zejaebtdc3kosrltpqaZ code]# docker login
  2. 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.
  3. Username (vector4wang): vector4wang
  4. Password:
  5. Login Succeeded
  6. [root@iZ2zejaebtdc3kosrltpqaZ code]#

接下来就是推送的了,执行命令docker push vector4wang/quick-docker:latest
latest是tag,相当于版本号
包比较大网络传输的比较慢,等了几分钟过程如下(如果失败就多重试几次)
6.png
再来看看DockerHub页面
7.png
注意右边红框的代码,意思就是说,在任何docker执行

  1. docker pull vector4wang/quick-docker

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

快速部署

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

最后

Docker的强大之处你也见识了,真的是再一次解放了程序员,让程序员不再关心如何去配置项目需要的环境。接下来我会持续记录学习和使用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
如果感觉有帮助的话,点个赞哦~

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注