随着docker等容器技术的成熟,使得dev-ops的开发理念得到落实。公司内部提供的容器都是封装好的,于是决定尝试自己在docker上部署第一个应用来练习练习,还是有不少坑的。前提是docker已经在本地安装了,具体安装步骤可以上官网查看。
  1、拉取最新的tomcat镜像到本地

 sudo docker pull tomcat

  2、基于Dockerfile创建镜像文件
dockerfile可以帮助我们创建自定义的镜像,本文比较简单直接基于最新的tomcat镜像,当然tomcat镜像也可以自定义(tomcat版本、jdk版本)。
新建Dockerfile文件,并将需要部署的war包放在相同文件夹下。
这里写图片描述
  Dockerfile文件内容如下:

FROM tomcat #基础镜像

MAINTAINER "test <yanyuan904@163.com>"  # 套路

ENV DIR_WEBAPP /usr/local/tomcat/webapps/ # 定义变量、后续会使用 ,具体路径可以先启动容器然后进入进行查看

RUN  rm -rf $DIR_WEBAPP/*   #删除webapp下所有文件,因为当前应用作为根应用

ADD virtualShop-man.war $DIR_WEBAPP/ROOT.war 

RUN  unzip $DIR_WEBAPP/ROOT.war  -d  $DIR_WEBAPP/ROOT/

CMD ["catalina.sh", "run"]

  构建镜像文件:

sudo docker build -t hulk-tomcat .

  执行成功后本地会多出一个镜像
这里写图片描述
  3、运行镜像

sudo docker run   -d -p 8888:8080 hulk-tomcat

  容器启动正常,但是应用报错了。恩,第一次哪能这么顺利。查看日志是差相关host配置。配置host有多种方式,启动时配置或者修改容器配置(不推荐),这里介绍通过与主机共享host文件的方式:
(停止刚启动的容器并删除)

sudo docker run -v /etc/hosts:/etc/hosts  -d -p 8888:8080 hulk-tomcat

  容器启动之后发现应用还是报错了: ??: Name or service not known(??就是容器的id)。在容器里执行 hostname也会提示这个错误。。这是因为没有设置容器hostname,默认就使用了容器id 。

sudo docker run -v /etc/hosts:/etc/hosts -h ubuntu  -d -p 8888:8080 hulk-tomcat 

  给容器hostname命名为ubuntu ,因为宿主机器叫这个然后hosts文件有ubuntu的配置(共享host)。
启动正常可以访问!!!
  恩,接下来就是nginx相关的配置了,监听8888端口就可以啦。还有一些细节问题 比如打印日志的时区不对等

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐