Docker学习之基于Dockerfile搭建JAVA Tomcat运行环境的方法

发布时间 - 2026-01-10 22:49:37    点击率:

前言

在第一篇文字中,我们完全人工方式,一个命令一个命令输入,实现一个java tomcat运行环境,虽然也初见成效,但很累人。如果依靠依靠脚本构建一个Tomcat容器实例,一个命令可以搞定,何乐而不为呢。好在Docker提供了Dockerfile作为构建Docker镜像脚本,避免人们一行一行的输入,真是善莫大焉。Dockerfile脚本可以做到随时维护修改,即可以分享,更有利于在模板化,更不用说传输了,好处那是一大箩筐!

最终目的:打造一个支持SSH终端登录、Tomcat7自动运行的Docker镜像。

编写一个Dockerfile

所有环境,同第一篇文字。在ubuntu下安装好vim之后(吐槽一下,ubuntu系统内置vi命令十分难用,只好求助于vim ):

sudo vim Dockerfile

编辑一个Dockerfile文件了,下面就是具体文件内容:

# VERSION 0.0.1
# 默认ubuntu server长期支持版本,当前是12.04
FROM ubuntu
# 签名啦
MAINTAINER yongboy "yongboy@gmail.com"

# 更新源,安装ssh server
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe"> /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y openssh-server
RUN mkdir -p /var/run/sshd

# 设置root ssh远程登录密码为123456
RUN echo "root:123456" | chpasswd 

# 添加orache java7源,一次性安装vim,wget,curl,java7,tomcat7等必备软件
RUN apt-get install python-software-properties
RUN add-apt-repository ppa:webupd8team/java
RUN apt-get update
RUN apt-get install -y vim wget curl oracle-java7-installer tomcat7

# 设置JAVA_HOME环境变量
RUN update-alternatives --display java
RUN echo "JAVA_HOME=/usr/lib/jvm/java-7-oracle">> /etc/environment
RUN echo "JAVA_HOME=/usr/lib/jvm/java-7-oracle">> /etc/default/tomcat7

# 容器需要开放SSH 22端口
EXPOSE 22

# 容器需要开放Tomcat 8080端口
EXPOSE 8080

# 设置Tomcat7初始化运行,SSH终端服务器作为后台运行
ENTRYPOINT service tomcat7 start && /usr/sbin/sshd -D

需要注意:

  • ENTRYPOINT,表示镜像在初始化时需要执行的命令,不可被重写覆盖,需谨记
  • CMD,表示镜像运行默认参数,可被重写覆盖
  • ENTRYPOINT/CMD都只能在文件中存在一次,并且最后一个生效 多个存在,只有最后一个生效,其它无效!
  • 需要初始化运行多个命令,彼此之间可以使用 && 隔开,但最后一个须要为无限运行的命令,需切记!

ENTRYPOINT/CMD,一般两者可以配合使用,比如:

ENTRYPOINT ["/usr/sbin/sshd"]
CMD ["-D"]

在Docker daemon模式下,无论你是使用ENTRYPOINT,还是CMD,最后的命令,一定要是当前进程需要一直运行的,才能够防容器退出。

以下无效方式:

 ENTRYPOINT service tomcat7 start #运行几秒钟之后,容器就会退出
 CMD service tomcat7 start #运行几秒钟之后,容器就会退出

这样有效:

ENTRYPOINT service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out
# 或者
CMD service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out

这样也有效:

 ENTRYPOINT ["/usr/sbin/sshd"]
 CMD ["-D"]

构建镜像

脚本写好了,需要转换成镜像:

docker build -t yongboy/java7 .

-t: 为构建的镜像制定一个标签,便于记忆/索引等

. : 指定Dockerfile文件在当前目录下

网速不太好,会等待很长时间。很多操作可能需要科学上网,逼得我只能一直挂着VPN,方能畅通无阻。

构建镜像完成之后,看看运行效果:

docker run -d -p 22 -p 8080:8080 yongboy/java7

在运行命令中,还得需要显式指定 -p 22 -p 8080:8080,否则在Docker 0.8.1版本中不会主动映射到宿主机上。据悉在Docker 0.4.8版本时,就不担心这个问题。 或者,您要有好的方式,不妨告知于我,谢谢。

在Dockerfile中,若没有使用ENTRYPOINT/CMD指令,若运行多个命令,可以这样做:

复制代码 代码如下:
docker run -d -p 22 -p 8080 yongboy/java7 /bin/sh -c "service tomcat7 start && /usr/sbin/sshd -D"

提交/保存镜像

创建好的镜像,可以保存到索引仓库中,便于下次使用(当然,我们直接共享Dockerfile,是最简单的事情,:)) ),但毕竟镜像可以做到开箱即用。

1、https://index.docker.io/ 注册一个账号,例如yongboy

2、构建镜像

docker build -t yongboy/java7 .

上面已经构建OK的话,可省略此步。

3、登陆

docker login

4、提交到Docker索引仓库

docker push yongboy/java7

现在可以起来喝杯热水,出去溜达会,也不一定能够上传完毕,那叫一个慢啊!

上传OK的话,可以得到类似地址:https://index.docker.io/u/yongboy/java7/

5、如何使用镜像

docker pull yongboy/java7

剩下的步骤,就很简单了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# dockerfile构建tomcat  # dockerfile安装tomcat  # docker搭建tomcat  # Centos8.2云服务器环境安装Tomcat8.5的详细教程  # 详解通过Docker搭建Mysql容器+Tomcat容器连接环境  # 搭建Tomcat 8源码开发环境的步骤详解  # Docker 搭建 Tomcat 运行环境的方法  # Tomcat 8.5 环境搭建步骤  # 镜像  # 多个  # 就会  # 重写  # 新源  # 可以做到  # 第一篇  # 几秒钟  # 上传  # 也不  # 运行环境  # 好了  # 你是  # 那是  # 就不  # 初见成效  # 畅通无阻  # 这个问题  # 一大  # 能在 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  Laravel怎么实现模型属性的自动加密  如何挑选最适合建站的高性能VPS主机?  网站页面设计需要考虑到这些问题  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  Laravel如何实现用户注册和登录?(Auth脚手架指南)  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  使用Dockerfile构建java web环境  如何在宝塔面板中修改默认建站目录?  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  动图在线制作网站有哪些,滑动动图图集怎么做?  魔方云NAT建站如何实现端口转发?  如何在万网自助建站中设置域名及备案?  北京网站制作的公司有哪些,北京白云观官方网站?  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  bootstrap日历插件datetimepicker使用方法  Laravel集合Collection怎么用_Laravel集合常用函数详解  Android滚轮选择时间控件使用详解  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  Laravel API资源类怎么用_Laravel API Resource数据转换  如何在阿里云香港服务器快速搭建网站?  如何基于云服务器快速搭建网站及云盘系统?  Laravel如何实现多对多模型关联?(Eloquent教程)  高性能网站服务器配置指南:安全稳定与高效建站核心方案  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  Laravel如何与Pusher实现实时通信?(WebSocket示例)  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  Laravel用户密码怎么加密_Laravel Hash门面使用教程  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  制作企业网站建设方案,怎样建设一个公司网站?  如何为不同团队 ID 动态生成多个非值班状态按钮  如何快速登录WAP自助建站平台?  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  用yum安装MySQLdb模块的步骤方法  如何在云主机快速搭建网站站点?  如何续费美橙建站之星域名及服务?  韩国服务器如何优化跨境访问实现高效连接?  三星、SK海力士获美批准:可向中国出口芯片制造设备  bing浏览器学术搜索入口_bing学术文献检索地址  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  Laravel如何为API编写文档_Laravel API文档生成与维护方法  千库网官网入口推荐 千库网设计创意平台入口  Laravel如何与Inertia.js和Vue/React构建现代单页应用