最近在看Docker,正好公司要做要一个小功能开发,所以决定拿来练一下手,以下是一些笔记。
创建一个Spring Boot 项目,网上很多这个自己查找一下。
- 弃用tomcat,选用undertow
最近看到了一个Web容器,在高负载的情况下号称可以胜过tomcat 和 jetty,那就是undertow。既然是练手,那就抛弃一下tomcat。所以我的项目用的是undertow。
在maven中的配置,不用默认的tomcat
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
/dependency>
引入undertow
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
- 打包
将编写好的项目通过maven 打包成jar包,最好在本地先测试一下单独的jar包能独立运行不。不然放到docker再调试有点麻烦。
这里比如我们通过maven 打包得到的文件问 spring-boot-docker-project-1.0-SNAPSHOT.jar
- 安装Docker
我这里使用的是CentOS7.2,安装教程这里不做介绍,网上也比较多。
- 制作dockerImage
- 安装完Docker后,自己新建一个文件夹用来存放Dockerfile和jar包,
- 这里示例目录为 /mnt/docker
- 将spring-boot-docker-project-1.0-SNAPSHOT.jar 拷贝至 /mnt/docker 文件夹。
- 编写Dockderfile ,cd 进入 /mnt/docker ,新建一个Dockerfile
- 输入命令touch Dockerfile,然后vi Dockerfile,输入如下内容
FROM frolvlad/alpine-oraclejdk8:slim VOLUME /tmp ADD spring-boot-docker-project-1.0-SNAPSHOT.jar app.jar RUN sh -c 'touch /app.jar' ENV JAVA_OPTS="" ENTRYPOINT ["sh","-c","java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar"]
最后的ENTRYPOINT 在一行,不要换行,这里因为编辑器的问题换行了。编辑完成后保存Dockerfile。
-
build镜像,cd 进入 /mnt/docker 目录,然后执行命令
docker build -t spring-boot-docker:1.0 .
-t 后面的是可以自定义的,用作镜像的名称。注意最后有个 . 这个很重要!!!! 这里可以配置docker加速,阿里云提供有服务。构建会快一些。
- 等待build完成,用 docker images 命令查看是否能看到镜像。
- 运行项目
输入命令
docker run -p 9010:9010 --name chat-message -t 镜像ID
-p 表示宿主机的端口号这个端口号是对外访问的,后面的端口号是容器的端口号,即项目运行的端口号。注意不要弄错了。
--name 表示镜像的名称
-t 后面要跟上镜像的id
至此结束。