一般文档使用docker的docker-maven-plugin插件可以生成镜像,配置如下
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.14</version>
<configuration>
<imageName>renren/fast</imageName>
<dockerDirectory>${project.basedir}</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
<!-- 运行命令 mvn clean package docker:build 打包并生成docker镜像 -->
</plugin>
imageName指定了镜像名称,应该生成镜像也是需要同级目录的Dockerfile文件。由于在windows开发环境没有docker,我们将jar包上传到linux服务器。
还有Dockerfile文件。
Dockerfile内容如下
FROM java:8
EXPOSE 9101
VOLUME /tmp
ADD televr.jar /app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar"]
在当前目录进行镜像运行 Docker build打包 -t指明镜像名称 -f指明文件 .指明在当前目录
然后查看生成的镜像
运行镜像,这里没有在后台运行ctrl+c结束程序,容器就关闭了。
springboot是8080端口,docker对外暴露是9101端口,外面通过9101访问访问不到。重新指定端口映射
使用-p指定端口映射,-d为后台运行。注意参数要在前面。下面NAMES容器名称,可以通过--name 指定比如docker run -p 8080:8080 --name televr televr:v1
[root@izuf6buyhgwtrx60bq2okoz televr]# docker run -p 9101:8080 -d televr:v1
1c7139e67e4fb3e207987fa92031e76f866577f57148af583c168f38fbd3ef24
[root@izuf6buyhgwtrx60bq2okoz televr]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c7139e67e4f televr:v1 "java -jar /app.jar" 20 seconds ago Up 12 seconds 9101/tcp, 0.0.0.0:9101->8080/tcp jolly_ardinghelli
ad5b52ca9150 bladex/sentinel-dashboard "java -Djava.securit?? 4 weeks ago Up 4 weeks 8719/tcp, 0.0.0.0:8858->8858/tcp sentinel
通过外面telnet虚拟机的9101端口连接不上,在虚拟机本机telnet localhost 9101 会出现如下Connection closed by foreign host
停止容器运行,估计是虚拟机没有开放9101端口
docker stop dd5915f69ec9d5e252b16232ea8d8d3d001b29d8f2cbf371020a8a4a5fb281bc
使用8080端口(开放外网访问) 启动容器 docker run -p 8080:8080 -d --name televr televr:v1 进入容器内部验证访问成功
[root@izuf6buyhgwtrx60bq2okoz televr]# docker exec -it 1f61c3dc0d40 bash
root@1f61c3dc0d40:/# curl http://localhost:8080/televr/sys/config/list
外网telnet成功,访问成功。Dockfile配置的Expose端口9101只是说明容器要暴露的端口,实际我们并不是这个段口。