docker的概念和作用我就不介绍了,网上有很多资料,理解起来也不难,主要就是仓库,镜像和容器三个概念。我这里是是把spring boot项目运行在docker容器的tomcat镜像下所以要准备一个war包。想以jar包的方式运行的话也比较简单,不做介绍。
操作准备
- 一个打成war包的spring boot项目
- 准备一个装好了docker的机器
操作姿势
1.我们把war包用ftp传到linux上
2.我们用vim编辑器建一个Dockerfile文件,打开并且编辑一下内容
[root@localhost ~]# vim Dockerfile
3.运行命令构建自定义镜像(千万注意不要少了命令最后的”.”)并查看镜像仓库是否构建成功:
[root@localhost ~]# docker build -t sbdemo:latest .
[root@localhost ~]# docker images
4.然后运行sbdemo镜像并指定本机18080端口映射容器内tomcat的8080端口启动(-d指的是后台运行):
[root@localhost ~]# docker run -d -p 18080:8080 sbdemo
5.启动成功后会打印出一个64为的容器id,我们输入命令查看当前docker有哪些容器在运行,我们发现容器的id变短了只有16位,是因为这是一个短板id和完整版id前16位是一致的,我们也看到18080端口监听容器内的8080端口,意味着我们访问18080端口即可访问容器内的8080端口:
[root@localhost ~]# docker ps
6.浏览器输入ip:18080,我们发现tomcat的界面打开了,接着我们补全路径ip:18080/hello,发现是404,怎么回事?
我思考了下,当时没用docker在外部tomcat部署项目时把tomcat下的webapps目录下的ROOT文件夹删了,然后把sbdemo.war改成ROOT.war,于是我也打算这么做试试。
7.首先我们进入容器内部,由于当前就一个容器在运行,没必要输入id全程,因为是9开头输一个9就能识别:
[root@localhost ~]# docker exec -it 9 bash
8.我们进入容器内部后进入webapps文件夹删除ROOT文件夹,把sbdemo.war改名为ROOT.war。
9.退出容器,重启容器,然后再访问ip:18080/hello,发现已经可以输出Hello World了
root@93266fba71f8:/usr/local/tomcat/webapps# exit
exit
[root@localhost ~]# docker restart 93266fba71f8