关于docker的安装和使用,可以看看之前这两篇文章。docker kubernetes dashboard安装部署详细介绍和Docker如何使用link建立容器之间的连接。这篇文章主要介绍如何在docker上部署springboot项目。关于如何创建springboot项目可以看看这篇文章IDEA上面搭建一个SpringBoot的web-mvc项目遇到的问题
本文主要介绍docker部署springboot的三种方式,分别是:入门方式、jar包替换部署的方式和脚本部署方式,一步步来手把手教程。注意这三种方式的命名是我自创非官方的。
工程目录
Dockerfile文件
创建Dockerfile文件,后面会用到。
# Docker image for springboot file run # VERSION 0.0.1 # Author: toutou # 基础镜像使用java FROM java:8 # VOLUME 指定了临时文件目录为/tmp。 # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp # VOLUME /tmp # 将jar包添加到容器中并更名为app.jar ADD learn-web-0.0.1-SNAPSHOT.jar app.jar # 运行jar包 RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-jar","/app.jar"] ###声明启动端口号 #EXPOSE 8301
文件部署
在服务器新建/data/docker/hellolearn文件夹(文件路径可自定义),将maven打包好的jar包和上文中创建的Dockerfile文件复制到服务器新建的文件夹(/data/docker/hellolearn)。
生成镜像
docker build -t hellolearn .
docker build -t 镜像名称:标签 Dockerfile的相对位置,点号代表当前目录,不写tag默认是latest。
启动容器
docker run -d -p 8301:8301 --name hellolearn hellolearn
docker start hellolearn
-d参数是让容器后台运行;--name为指定容器的名称;-p 是做端口映射,此时将服务器中的8301(冒号前的端口)端口映射到容器中的8301(冒号后的端口)端口(application.properties配置的是8301)
访问WEB
jar包映射部署
按照上文的步骤已足可以轻松应对docker部署springboot的全流程。但是这样在启动容器后,每次需更新jar包时,都得重新制作镜像,再重新制作容器。流程及其繁琐,效率极低。那如何在不更新镜像或者容器的前提下直接更新jar包完成部署呢?
5.1 更新Dockerfile
# Docker image for springboot file run # VERSION 0.0.1 # Author: toutou # 基础镜像使用java FROM java:8 EXPOSE 8301 ENTRYPOINT ["java","-jar","/data/learn-web-0.0.1-SNAPSHOT.jar"]
最后一行 ENTRYPOINT ["java","-jar","/data/learn-web-0.0.1-SNAPSHOT.jar"]
会运行容器里/data目录下的learn-web-0.0.1-SNAPSHOT.jar文件。
5.2 使用docker build命令构建镜像
docker build -t hellolearn .
5.3 创建&启动容器
docker run --name hellolearn -it -v /data/docker/newhellolearn/package:/data -d -p 8301:8301 hellolearn
-v 宿主机目录关联容器目录。这样宿主机的/data/docker/newhellolearn/package目录就与docker的/data目录进行映射。
这样的话,当jar包发生变动时,直接更新宿主机的/data/docker/newhellolearn/package目录下的jar包即可,更新jar包之后需要将容器重启一下。
脚本部署
通过jar包部署方式引起一个问题,若jar包名字发生变化,比如版本号变化(learn-web-0.0.1-SNAPSHOT.jar--learn-web-1.0.1-SNAPSHOT.jar)。需要怎么处理呢?下面就介绍第三种通过脚本部署的方式。
6.1 创建hellolearn.sh文件
java -jar /data/learn-web-0.0.1-SNAPSHOT.jar
将hellolearn.sh上传到/data/docker/hellolearn/scriptdeploy/package,这个文件夹路径可以自定义,记住这个文件夹路径,后面还会用到。
6.2 添加脚本执行权限
chmod +x hellolearn.sh
6.3 创建Dockerfile
# Docker image for springboot file run # VERSION 0.0.1 # Author: toutou # 基础镜像使用java FROM java:8 EXPOSE 8301 CMD ["sh","-c","/data/hellolearn.sh"]
CMD ["sh","-c","/data/hellolearn.sh"]
表示在容器启动时启动6.1中创建的hellolearn.sh脚本。
注意最后一条命令上文中都是ENTRYPOINT,在脚本部署中改成了CMD,至于ENTRYPOINT和CMD的具体区别感兴趣的可以了解一下。
6.4 上传jar包
将jar包放入hellolearn.sh的同一个文件夹目录,即/data/docker/hellolearn/scriptdeploy/package,创建容器时再将该目录(宿主机目录)与容器的/data目录进行映射。。
6.5 文件目录结构图
这里的目录结构不知道大家晕不晕,上传一张我这宿主机的目录结构图,一目了然。
6.6 创建镜像
docker build -t hellolearn-script .
末尾的点号代表当前目录,所以生成镜像的命令需要在Dockerfile所在的目录执行。
6.7 创建&启动容器
docker run --name hellolearn-script -it -v /data/docker/hellolearn/scriptdeploy/package:/data -d -p 8302:8301 hellolearn-script
docker start hellolearn-script
将宿主机的/data/docker/hellolearn/scriptdeploy/package目录与容器的/data目录映射关联。这样的话,当jar包发生变动时,直接更新宿主机目录下的jar包即可。即使jar包名字发生变化,也需要再更新一下hellolearn.sh脚本。更新之后重启容器。
6.8 web测试效果
查看docker日志
docker logs [OPTIONS] CONTAINER ID
OPTIONS说明:
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志
7.1 查看指定时间后的日志,只显示最后100行:
docker logs -f -t --since="2020-10-01" --tail=100 CONTAINER ID
7.2 查个指定时间区段的日志
docker logs -t --since="2020-10-01T19:00:00" --until "2020-10-01T19:00:00" CONTAINER ID
7.3 查看指定时间后面的日志:
docker logs -t --since="2020-10-01T19:00:00" CONTAINER ID
7.4 查看最近5分钟的日志:
docker logs --since 5m CONTAINER ID
7.5 通过 exec 命令对指定的容器执行 bash:
docker exec hellolearn -it /bin/bash
或者 docker exec -it hellolearn bash
7.6 查看docker IP
docker inspect --format='{{.NetworkSettings.IPAddress}}' hellolearn
遇到的问题
问题描述:Error response from daemon: driver failed programming external connectivity on endpoint flamboyant_leavitt (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8301 -j DNAT --to-destination 172.17.0.2:8301 ! -i docker0: iptables: No chain/target/match by that name.
解决方案:重启docker。 systemctl restart docker
具体问题相关信息详见Error response from daemon: driver failed programming external connectivity on endpoint mysql3308 (
源码地址
https://github.com/toutouge/javademosecond/tree/master/hellolearn
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]