编写自己的Tomcat docker镜像

docker部署tomcat 接上一篇,现在部署一个tomcat到Docker容器中并运行。Docker是服务器–客户端架构。 阅读详情

编写自己的Tomcat docker镜像

dockerfile

dockerfile介绍

用来构建docker 镜像的

构建步骤:

  • 编写一个docker file 文件
  • docker build 构建成一个镜像
  • docker run 运行镜像
  • docker push 发布镜像(Docker hub 阿里云镜像)

我们来看看官方是怎么做的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aBWUqX0G-1636207693217)(docker.assets/image-20211106170721576.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LAidRpGu-1636207693219)(docker.assets/image-20211106172154705.png)]

很多官方的镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像

官方可以制作镜像,那我们也可以

DockerFile构建过程

基础知识:

  • 每个保留关键字,指令都必须是大写字母
  • 执行从上到下执行
  • #表示注释
  • 每个指令都会创建提交一个新的镜像层

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YsIxm0Bt-1636207693220)(docker.assets/image-20211106172456651.png)]

dockerfile是面向开发的,我i们以后需要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单。

我们要掌握dockerfile 就基本可以掌握常用的docker镜像企业交付了

dockerfile :构建文件,定义了一切步骤,源代码

dockerimages:通过dockerfile生成的镜像,最终发布和运行的产品

docker容器:容器就是镜像运行起来,提供服务的

Dockerfile的指令

FROM            # 基础镜像,一切从这里开始构建
MAINTAINER      # 镜像是谁写的, 姓名+邮箱
RUN             # 镜像构建的时候需要运行的命令
ADD             # 步骤, tomcat镜像, 这个tomcat压缩包!添加内容
WORKDIR         # 镜像的工作目录
VOLUME          # 挂载的目录
EXPOSE          # 保留端口配置
CMD             # 指定这个容器启动的时候要运行的命令,只有最后一个会生效可被替代
ENTRYPOINT      # 指定这个容器启动的时候要运行的命令, 可以追加命令
ONBUILD         # 当构建一个被继承DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令
COPY            # 类似ADD, 将我们文件拷贝到镜像中
ENV             # 构建的时候设置环境变量!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gScGh2vX-1636207693221)(docker.assets/image-20211106172810755.png)]

实战测试

创建一个自己的centos

FROM centos
MAINTAINER hyc<3132774018@qq,com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "---end---"
CMD /bin/bash

# 2. 通过这个文件构建镜像
# 命令 docker build -f dockerfile文件路径 -t 镜像名:[tag] .
 
[root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker build -f mydockerfile-centos -t mycentos:0.1 .
 
Successfully built d2d9f0ea8cb2
Successfully tagged mycentos:0.1

#测试运行

对比之前原生的centos

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ww9Lk5hg-1636207693222)(docker.assets/image-20211106180200362.png)]

我们增加了 vim 和 net-tools
!](https://img-blog.csdnimg.cn/70d154bf1e304697ad51d6693d6ad385.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAZG9vbXdhdGNoZXI=,size_20,color_FFFFFF,t_70,g_se,x_16)

我们可以查看一下镜像的变更历史

docker history <imagesid>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E3jINbwM-1636207693223)(docker.assets/image-20211106180537787.png)]

我们平时拿到一个镜像可以研究他是怎么构建的

CMD 和ENTRYPOINT区别

CMD         # 指定这个容器启动的时候要运行的命令,只有最后一个会生效可被替代
ENTRYPOINT      # 指定这个容器启动的时候要运行的命令, 可以追加命令
测试CMD
# 1. 编写dockerfile文件

[root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# vim dockerfile-cmd-test 
FROM centos
CMD ["ls", "-a"]

# 2. 构建镜像

[root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker build -f dockerfile-cmd-test -t cmdtest .

# 3. run运行, 发现我们的ls -a 命令生效

[root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker run ebe6a52bb125
.
..
.dockerenv
bin
dev
etc
home
lib
lib64

# 想追加一个命令 -l 变成 ls -al

[root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker run ebe6a52bb125 -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-l\": executable file not found in $PATH": unknown.
[root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker run ebe6a52bb125 ls -l

# cmd的情况下 -l替换了CMD["ls", "-a"]命令, -l不是命令,所以报错了
测试ENTRYPOINT
# 1. 编写dockerfile文件

[root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# vim dockerfile-entrypoint-test 
FROM centos
ENTRYPOINT ["ls", "-a"]

# 2. 构建文件

[root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker build -f dockerfile-entrypoint-test -t entrypoint-test .

# 3. run运行 发现我们的ls -a 命令同样生效

[root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker run entrypoint-test
.
..
.dockerenv
bin
dev
etc
home
lib

# 4. 我们的追加命令, 是直接拼接到ENTRYPOINT命令的后面的!

[root@iZ2zeg4ytp0whqtmxbsqiiZ dockerfile]# docker run entrypoint-test -l
total 56
drwxr-xr-x  1 root root 4096 Aug 13 07:52 .
drwxr-xr-x  1 root root 4096 Aug 13 07:52 ..
-rwxr-xr-x  1 root root    0 Aug 13 07:52 .dockerenv
lrwxrwxrwx  1 root root    7 May 11  2019 bin -> usr/bin
drwxr-xr-x  5 root root  340 Aug 13 07:52 dev
drwxr-xr-x  1 root root 4096 Aug 13 07:52 etc
drwxr-xr-x  2 root root 4096 May 11  2019 home
lrwxrwxrwx  1 root root    7 May 11  2019 lib -> usr/lib
lrwxrwxrwx  1 root root    9 May 11  2019 lib64 -> usr/lib64
drwx------  2 root root 4096 Aug  9 21:40 lost+found

实战 tomcat

这里我们先准备好 需要用到的 安装包

  • apache-tomcat-9.0.54.tar.gz
  • jdk-8u311-linux-x64.tar.gz
  1. 准备镜像文件 tomcat压缩包,jdk的压缩包!

    在这里插入图片描述

  2. 编写Dockerfile文件,官方命名Dockerfile, build会自动寻找这个文件,就不需要-f指定了!

    [root@iZwz90ps06ioyada63oiwiZ dockerfiletomcat]# cat Dockerfile
    FROM centos
    MAINTAINER hyc<3132774018@qq.com>
     
    COPY readme.txt /usr/local/readme.txt
     
    ADD jdk-8u311-linux-x64.tar.gz /usr/local/
    ADD apache-tomcat-9.0.54.tar.gz /usr/local/
     
    RUN yum -y install vim
     
    ENV MYPATH /usr/local
    WORKDIR $MYPATH
     
    ENV JAVA_HOME /usr/local/jdk1.8.0_311
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.54
    ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.54
    ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
     
    EXPOSE 8080
     
    CMD /usr/local/apache-tomcat-9.0.54/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.54/bin/logs/catalina.out
    
    
  3. 启动并且挂载

    docker run -d -p 3344:8080 --name hyctomcat11 -v /dockerTest/dockerfiletomcat/test:/usr/local/apache-tomcat-9.0.54/webapps/test -v /dockerTest/dockerfiletomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.54/logs diytomcat
    
  4. 访问 3344端口

成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-deYpHlr5-1636207693224)(docker.assets/image-20211106212344365.png)]

我们同时挂载了 test 目录,当我们向容器加入自己的内容到时候,可以直接从宿主机放入文件,可以直接同步到docker容器中,十分的方便

Docker 部署离线版 Nginx 镜像容器,Tomcat 镜像容器,Mariadb 镜像容器 切莫死记硬背,小心面试官直接让你出门右拐1000道互联网Java面试题: 阅读详情

相关推荐

大模型学习路线之多模态模型

​ (Frankly speaking,博主太懒了)章节一只对CLIP、BLIP、BLIP2、InstructBLIP进行了整理,章节二以CLIP、VisualGLM作为实践案例。​ 实际上多模态模型除了CLIP、BLIP、BLIP2、InstructBLIP,还有LLaVA、miniGPT4,以及国内清华的VisualGLM、阿里的Qwen-VL等。(更多多模态原理可以看文末的参考说明)一、多模态模型 & 理论。

2401_86435672的博客 2287

docker制作tomcat基础镜像,最方便快捷,升级的3种方法

1.使用原有旧版tomcat镜像,制作新版官方tomcat镜像 2.容器内修改文件打包成新tomcat镜像 3.使用官方安装包制作镜像

HuoYingTaDie的博客 3895

IFIX5.8在Win10系统下的安装避坑指南

本文提供了IFIX5.8在Windows 10系统下的详细安装教程与避坑指南。针对常见的驱动缺失、UAC拦截及兼容性报错等问题,文章从安装前准备、分步安装流程到安装后配置与驱动修复,给出了系统性的解决方案,帮助工控从业者顺利完成部署。

f6g7h8i9j的博客 363

Dockerfile构建Tomcat镜像

Dockerfile构建Tomcat

记录我目之所及的世界 2334

ROS2 -Jazzy 一步一步(第一步_工作空间以及编译)

文件夹作用特点是否需要手动创建/维护src存放自己写的 ROS 2 包一个 workspace 可以有多个包需要手动创建build保存编译过程中的中间文件每个包生成对应子目录自动生成,可删除install保存编译完成后的功能包每个包有独立子目录,含可执行文件自动生成,可删除log保存编译日志用于查看错误原因、调试自动生成,不需修改colcon是 ROS 2 推荐使用的构建工具自动处理功能包的依赖和编译顺序一条命令就能编译整个工作空间。

jerrykorea的博客 1380

ThingsBoard 3.1.1版本在window本地运行之TB-Gateway服务搭建(三)

TB-gateway服务是TB不可或缺的部分,很多的协议都需要TB-gateway来做分类处理,今天我们就来做TB-Gateway服务搭建。

晚点遇见你,余生都是你! 2471

使用Dockerfile构建镜像

【代码】使用Dockerfile构建镜像。

2402_83805984的博客 1432

SKUA-GOCAD入门教程-第八节 线的创建与编辑7和8

本文介绍了曲线编辑操作的主要功能,包括曲线部分和区域的管理操作。在曲线部分操作方面,详细说明了如何合并、删除、移动和过滤曲线部分,支持精确或带公差的合并方式。在曲线区域操作方面,阐述了保留/删除区域点、移动区域点、保留/删除区域线段等操作。此外还介绍了节点连接功能,包括新增/删除连接、端点连接以及为曲线赋予地质特征的方法。

江洋大葱的博客 390

Docker(八)—— Dockerfile制作Tomcat镜像

Tomcat镜像可以直接docker pull tomcat从dockerhub上拉取下来,但是这里我们要实现的是以centos为基础镜像,把jdk和tomcat以压缩包的形式拷贝给镜像。

qq_44886213的博客 2236

揭秘大厂 Unity 红点系统设计:别小看右上角那颗小红点,它能把你项目搞崩

本文详细探讨了游戏大厂如何设计高性能红点系统。红点作为提升用户活跃和转化率的重要工具,需要支持多级联动、动态判断和全局一致性。系统采用观察者模式和树形结构,分为数据管理、逻辑判定、订阅通知和UI展示四大模块,通过事件驱动方式实现高效刷新。文章特别强调了解耦设计、配置化管理和性能优化,并提出了热更新、数据分析等高级应用场景。最终指出,优秀的红点系统需要架构标准化、自动化配置和团队紧密协作,是大型游戏项目的关键技术基础。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 377

【WRF-Urban】使用 LCZ 替换 WRF 运行中的 LUCC 数据

使用 LCZ 替换 WRF 运行中的 LUCC 数据

WW、forever的博客 987

实战docker,编写Dockerfile定制tomcat镜像,实现web应用在线部署

最初在tomcat上部署web应用的方式,是通过maven的maven-compiler-plugin插件先打成war包,再将war包复制到tomcat的webapps目录下,后来用上了tomcat7-maven-plugin插件,可以直接在maven上编译,打包,部署一次性完成,这个方法的关...

chungu8602的专栏 245

【JTAG】1149.6协议详解

JTAG1149.6协议是1149.1协议中Boundary-Scan结构的扩展,1149.1对交流耦合、差分或两者兼有的情况并没有得到充分的处理。该协议支持新的I/O测试结构。需要时变(AC)信号的高级I/O引脚允许测试它们之间的连接,这包括所有差分信号引脚或单端信号引脚,通过设计支持交流耦合。..................

xuhe0206的博客 4572

docker在已有的tomcat镜像上打新的镜像的Dockerfile编写说明

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33714884的博客 232

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Docker实践:如何编写自定义Tomcat镜像并发布?

用久了从DockerHub上白嫖来的镜像,不免想要开发一款自己的镜像供大家使用,或者满足自己的特殊需求。今天,我们就来根据官方CentOS镜像,一步步地将它改造成自定义的Tomcat镜像并发布到DockerHub,并重新pull到本地运行,以验证我们自定义镜像的效果。 作者环境:阿里云轻量 CentOS7.3 0.前言 在着手改造现有的CentOS之前,我们先要对Docker镜像的构成和来源有一个...

qq_44584356的博客 489

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

docker nginx部署web应用_实战docker编写Dockerfile定制tomcat镜像,实现web应用在线部署...

前言:最初在tomcat上部署web应用的方式,是通过maven的maven-compiler-plugin插件先打成war包,再将war包复制到tomcat的webapps目录下,后来用上了tomcat7-maven-plugin插件,可以直接在maven上编译,打包,部署一次性完成,这个方法的关键是在tomcat上创建一个用户账号,然后maven插件用此账号和密码来执行在线部署。本次实践中,我...

weixin_39716703的博客 241

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

mvn打包并部署本地tomcat_实战docker,编写Dockerfile定制tomcat镜像,实现web应用在线部署...

最初在tomcat上部署web应用的方式,是通过maven的maven-compiler-plugin插件先打成war包,再将war包复制到tomcat的webapps目录下,后来用上了tomcat7-maven-plugin插件,可以直接在maven上编译,打包,部署一次性完成,这个方法的关键是在tomcat上创建一个用户账号,然后maven插件用此账号和密码来执行在线部署。本次实践中,我们要动...

weixin_42552716的博客 149

实战docker,编写Dockerfile定制tomcat8镜像,实现web应用在线部署

最初在tomcat上部署web应用的方式,是通过maven的maven-compiler-plugin插件先打成war包,再将war包复制到tomcat的webapps目录下,后来用上了tomcat7-maven-plugin插件,可以直接在maven上编译,打包,部署一次性完成,这个方法的关键是在tomcat上创建一个用户账号,然后maven插件用此账号和密码来执行在线部署。 本次实践中,我们...

weixin_30488313的博客 347

mvn打包并部署本地tomcat_实战docker编写Dockerfile定制tomcat镜像,实现web应用在线部署...

前言:最初在tomcat上部署web应用的方式,是通过maven的maven-compiler-plugin插件先打成war包,再将war包复制到tomcat的webapps目录下,后来用上了tomcat7-maven-plugin插件,可以直接在maven上编译,打包,部署一次性完成,这个方法的关键是在tomcat上创建一个用户账号,然后maven插件用此账号和密码来执行在线部署。本次实践中,我...

weixin_30918493的博客 162

docker nginx部署web应用_实战docker,编写Dockerfile定制tomcat镜像,实现web应用在线部署...

最初在tomcat上部署web应用的方式,是通过maven的maven-compiler-plugin插件先打成war包,再将war包复制到tomcat的webapps目录下,后来用上了tomcat7-maven-plugin插件,可以直接在maven上编译,打包,部署一次性完成,这个方法的关键是在tomcat上创建一个用户账号,然后maven插件用此账号和密码来执行在线部署。本次实践中,我们要动...

weixin_39801613的博客 112

实战使用dockerfile发布自定义的Tomcat镜像

实操编写dockerfile发布自定义镜像

奔走的王木木Sir的博客 538

制作docker镜像jdk7+tomcat7基础镜像

1. 安装docker rpm -Uvhhttp://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm yum -y install docker-io​ 可使用以下命令,查看 Docker 是否安装成功:docker version 输出了 Docker 的版本号,则说明安装成功了,可通过以下命令...

cuichunchi的博客 1098

Docker 实战——部署 Nginx 镜像容器、Tomcat 镜像容器、MySQL 镜像容器

Docker实战——部署Nginx镜像容器、Tomcat镜像容器、MySQL镜像容器一、安装 Docker1.安装需要的软件包2.设置 Docker 的 yum 源3.安装 Docker4.启动 Docker 并设置开机自启5.验证 Docker 是否安装成功6.配置 Docker 加速器二、部署 Nginx 镜像容器1.下载基础镜像2.创建工作目录3.编写 Dockerfile 文件4.编写执行脚本内容5.生成镜像6.启动容器并验证三、部署 Tomcat 镜像容器1.创建工作目录2.编写 Dockerfi

愿许浪尽天涯的博客 4137

Dockerfile:tomcat镜像编写

tomcat8镜像在centos6.7上的Dockerfile实现如下:FROM centos:6.7MAINTAINER chenyufeng "yufengcode@gmail.com"# 设置当前工具目录# 该命令不会新增镜像层WORKDIR /home# 安装必要的工具RUN yum install -y wget && \    rpm --rebuilddb && \    yum i

乞力马扎罗的雪CYF的博客 1591

Dockerfile的镜像创建

目录一、Docker镜像的创建1、基于现有镜像创建2、基于本地模板3、基于Dockerfile创建二、Docker的案例1、构建Apache服务容器2、构建SSH镜像3、构建nginx镜像4、构建Tomcat镜像5、构建mysql镜像(1)启动一个镜像,在容器里进行修改 (2)然后将修改后的容器提交为新的镜像,需要使用该容器的ID号创建新镜像 通过导入操作系统模板文件可以生成镜像,模板可以从OPENVZ开源项目下载, 3、基于Dockerfile 创建 (1)Dockerfile概述1

qq_52825616的博客 868
上一篇: Docker:十五分钟快速了解Docker快速部署nginx
下一篇: docker:了解docker网络和自定义docker网卡
冷环渊
博客等级 码龄7年 1130粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷环渊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值