Springboot项目打包成Docker镜像
因Springboot项目开发完成后,需要打包成Docker中镜像部署到服务器上,故记录过程备忘.
0 制作基础
- Springboot项目jar包.
- linux虚拟机(centos7),安装docker,且docker中安装java8镜像.
1 项目测试
上传jar包到虚拟机中,使用 java -jar jar包名
,运行结果如下:
2 准备环境
指定一个目录,里面存放jar包,Dockerfile文件:
Dockerfile文件内容:
FROM java:8 #指定基镜像
ADD farm_eureka-1.0-SNAPSHOT.jar myfarm.jar #添加项目,并重命名为myfarm.jar
ENV JAVA_HOME=/jdk8 #配置jdk环境
ENV PATH=$JAVA_HOME/bin:$PATH
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
EXPOSE 6868 #暴露6868端口
ENTRYPOINT ["java","-jar","/myfarm.jar"] #指定执行启动项目
3 制作Docker镜像
docker bulid –f dockerfile文件路径 –t 镜像名称:版本
不指定版本默认为最新版本: latest
下面(注意" . "是当前目录)
docker build -f ./farm_dockerfile -t my_farm .
4 使用镜像,创建容器,测试是否成功
创建一个守护式容器:
docker run -id --name=farm -p 6868:6868 my_farm
参数说明: 见上篇Docker入门知识:
5 过程可能出现的报错
1 启动容器时报错:
docker: Error response from daemon: driver failed programming external connectivity on endpoint lamp3 (46b7917c940f7358948e55ec2df69a4dec2c6c7071b002bd374e8dbf0d40022c): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 86 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.
解决方法:
docker服务启动时定义的自定义链DOCKER被清除,重启docker即可.
systemctl restart docker
2 若访问不到, 可能是没有开放端口
解决方法:
方法1: 关闭防火墙 systemctl stop firewalld
方法2: 开放端口
- 1开放端口(永久开放6868端口,添加到公开区域,允许外部连接 )
firewall-cmd --zone=public --add-port=6868/tcp --permanent
- 2 重新加载防火墙的规则
firewall-cmd --reload
3 关于从本机(windows)到虚拟机(Linux)的jar包上/下传问题
1 使用SFTP命令完成上/下传输
1.1 上传操作:windows->linux
put path/文件名.后缀
# 举例
put D:\temp\123.txt
1.2 下载操作: linux->windows
lcd 要下载的windows目录路径
get 要下载的文件
2 SFTP命令介绍
sftp-- help
可用命令:
cd 路径 更改远程目录到“路径”
lcd 路径 更改本地目录到“路径”
chgrp group path 将文件“path”的组更改为“group”
chmod mode path 将文件“path”的权限更改为“mode”
chown owner path 将文件“path”的属主更改为“owner”
exit 退出 sftp
help 显示这个帮助文本
get 远程路径 下载文件
ln existingpath linkpath 符号链接远程文件
ls [选项] [路径] 显示远程目录列表 (linux)
lls [选项] [路径] 显示本地目录列表 (windows)
mkdir 路径 创建远程目录
lmkdir 路径 创建本地目录
mv oldpath newpath 移动远程文件
open [用户@]主机[:端口] 连接到远程主机
put 本地路径 上传文件
pwd 显示远程工作目录
lpwd 打印本地工作目录
quit 退出 sftp
rmdir 路径 移除远程目录
lrmdir 路径 移除本地目录
rm 路径 删除远程文件
lrm 路径 删除本地文件
symlink existingpath linkpath 符号链接远程文件
version 显示协议版本
2.1常用命令
cd 路径 更改远程目录到“路径”
lcd 路径 更改本地目录到“路径”
ls [选项] [路径] 显示远程目录列表 (linux)
lls [选项] [路径] 显示本地目录列表(windows)
put 本地路径 上传文件
get 远程路径 下载文件