实战:使用IDEA构建SpringBoot程序的镜像
这里就以我之前写的WIT问卷管理系统为例子吧。
首先在之前写好的SpringBoot项目中新建一个DockerFile
在Dockerfile中写入我们的base镜像,之前我已经创建好了并且传到docker仓库了,这里就直接拉取
接下来需要连接我们虚拟机/云服务器下的docker服务
这里我用的是阿里云
这里需要配置Docker的服务器,也就是我们在Ubuntu服务器安装的Docker,这里我们填写服务器相关信息,我们首选需要去修改一下Docker的一些配置,开启远程客户端访问:
sudo vim /etc/systemd/system/multi-user.target.wants/docker.service
打开后,添加高亮部分:
修改完成后,重启Docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker.service
由于我们用的是云服务器,需要在后台开放2375 TCP连接端口
现在接着在IDEA中进行配置:
先在edit中添加一个服务器链接
新增一个server,选择tcp链接,输入tcp://IP:2375
即可
添加好以后我们接着对Springboot包用maven打包
打包完成后我们将构建好的jar包导入Dockerfile
COPY target/my-project-backend-0.0.1-SNAPSHOT.jar app.jar
这里是使用copy指令将文件拷贝到docker的默认路径中
然后设置在容器启动时开启我们的java程序,这里通过CMD完成
CMD java -jar app.jar
CMD命令可以设定容器启动后执行的命令,EXPOSE可以指定容器需要暴露的端口,但是现在我们还没有学习网络相关的知识,所以暂时不使用,这里指定为我们启动Java项目的命令。配置完成后在左侧点击运行,如果出现Failed to deploy XXX Dockerfile: Dockerfile': Not connected to docker
错误,在排除服务器未开放的情况下,可能是idea权限不足导致的,退出idea再以管理员身份重新运行即可
在构建成功后我们就可以在Docker 服务器中看到我们刚才传上来的新镜像了
在镜像中可以看见我们刚才添加Springboot的操作
接着在IDEA中启动镜像
点击启动即可,这里有点小翻车,因为我的项目用的是jdk17,而我们得镜像里只安装了jdk8
只需要把之前添加jdk的操作版本换成17即可
更换后再次启动,就发现成功运行在docker里了,不过我这个项目还用到了Redis,Mysql和RabbitMQ,那些还没有在base镜像里配置,所以功能还无法完全实现,但是总而言之确实在docker里跑起来了
我们尝试访问一下8080端口,会发现无法访问,这是因为docker容器内部和外部的网络是隔离的,如果我们想要访问容器的服务器,就需要将对应端口绑定在宿主机上,同时让宿主机也开放这个端口,这样才能实现容器内的网络连接
docker run -p 8080:8080 -d wit-questionnaire:1.1
配置完成后,点击重新创建容器
这下端口映射成功了,这里再次强调,如果是云服务器,需要去安全组中开启对应的端口
为了方便以后使用,我们还是可以把它推送到DockerHub去
直接在IDEA上操作
填写之前Dockerhub仓库的对应信息,点击ok就可以push到远程仓库了
参考视频:Docker 容器技术 已完结(2022 最新版)4K蓝光画质+杜比音效 从内卷到开摆
视频教程文档:Docker容器技术