我的第一个Docker镜像:tomcat

之前就做好了,其中遇到些问题,在此归纳总结。
使用Dockerfile构建一个镜像,其中包含jdk和tomcat,使之可以运行web服务。

# 在Linux系统中运行命令
[root@localhost home]# mkdir tomcat-docker
[root@localhost home]# cd tomcat-docker
# 把tomcat和jdk放到tomcat-docker目录下

我事先已经把项目war包放在了tomcat的webapps目录下


目录结构
[root@localhost tomcat-docker]# touch Dockerfile run.sh
[root@localhost tomcat-docker]# vim Dockerfile
# 设置继承的镜像
FROM ubuntu:14.04

# 创建者信息
MAINTAINER zytim "zytsayno@gmail.com"

# 设置环境变量,所有操作都是非交互式的
ENV DEBIAN_FRONTEND noninteractive

# 更改系统的时区设置
RUN echo "Asia/Shanghai" > /etc/timezone && \
        dpkg-reconfigure -f noninteractive tzdata

# 设置tomcat的环境变量
ENV CATALINA_HOME /tomcat
ENV JAVA_HOME /jdk

# 复制tomcat和jdk文件到镜像中
ADD apache-tomcat /tomcat
ADD jdk /jdk

# 复制启动脚本至镜像,并赋予脚本可执行权限
ADD run.sh /run.sh
RUN chmod +x /*.sh
RUN chmod +x /tomcat/bin/*.sh

# 暴露接口8091,这是我的tomcat接口,默认为8080
EXPOSE 8091

# 设置自启动命令
CMD ["/run.sh"]

编辑 run.sh 脚本

[root@localhost tomcat-docker]# vim run.sh
#!/bin/bash
# 启动tomcat
exec ${CATALINA_HOME}/bin/catalina.sh run

Dockerfile的各个指令要搞懂,这样有助于自定义镜像。
然后就可以用这个Dockerfile构建镜像了。

[root@localhost tomcat-docker]# docker build -t tomcat:test . 

注意后面有个点。
一般使用这条命令就够了,但有时可能在build的过程中会报错,找不到tomcat或者jdk路径,这事可以在build时用指定Dockerfile路径试试。

[root@localhost tomcat-docker]# docker build -t tomcat:test1 /home/zyt/tomcat-docker/Dockerfile .

还是注意后面有个点。
执行build会有Step1,Step2等等一些步骤,稍等一会,如果看到
Successfully built xxxxxx
那就证明创建镜像成功了。
然后创建并跑起容器

[root@localhost tomcat-docker]# docker run -d -P tomcat:test

-P是随机映射本机端口到容器暴露的端口,这种方法创建的容器重启之后本机端口也可能会发生变化,如要固定映射端口也可以用-p自定义。

[root@localhost tomcat-docker]# docker run -d -p 11001:8091 tomcat:test

使用 docker ps 命令查看正在运行的容器

查看正在运行的容器

如果查看不到有运行的容器,可以使用

[root@localhost ~]# docker ps -a

查看所有容器,用

 [root@localhost ~]# docker start 容器id

启动对应的容器。
如果每次启动容器后,容器状态都为Exited,那你可以使用

 [root@localhost ~]# docker logs 容器id 

查看容器启动日志。
我又碰到这种情况,是由于tomcat启动报错导致的。
然后就可以通过宿主机的 ip + 端口号 访问tomcat中的应用了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,924评论 18 139
  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,627评论 15 147
  • 0. 前言 docker是什么?docker是用GO语言开发的应用容器引擎,基于容器化,沙箱机制的应用部署技术。可...
    sessionboy阅读 3,884评论 2 49
  • 使用 Docker 搭建 Java Web 运行环境 Docker 是 2014 年最为火爆的技术之一,几乎所有的...
    你清澈又神秘阅读 5,548评论 0 7
  • 经过一夜的狂风暴雨,整个世界都变得那么清新明丽。 七点的早晨,舒适的温度,加上清凉的风迎面扑来,这种清...
    从我家到百草园阅读 1,819评论 11 11