dockerfile——构建tomcat镜像

2023-11-08

在前面的例子(Docker Tomcat镜像制作)中,我们从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低。所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其中,然后让docker读取并分析、执行,那么重复构建、更新将变得很方便,所以Dockerfile就此诞生了

dockerfile常用参数
FROM:指定待扩展的父级镜像(基础镜像)。除了注释以外,在文件开头必须是一个FROM指令,接下来的指令便在这个父级镜像的环境中运行,直到遇到下一个FROM指令。通过添加多个FROM命令,可以在同一个Dockerefile文件中创建多个镜像。

MAINTAINER:声明创建的镜像的作者信息。用户名、邮箱。非必须。

RUN:用来修改镜像的命令,常用来安装库、程序以及配置程序。一条RUN指令执行完毕后,会在当前镜像上创建一个新的镜像层,接下来对的指令会在新的镜像上继续执行。RUN 语句有两种形式:

RUN yum update:是在/bin/sh环境中执行的指令的命令

RUN ["yum", "update"]:直接使用系统调用exec来执行行。

RUN yum update && yum install nginx:使用&&符号将多条命令连接在同一条RUN语句中。

EXPOSE:用来指明容器内进程对外开放的端口,多个端口之间使用空格隔开。运行容器时,通过参数-P(大写)即可将EXPOSE里所指定的端口映射到主机上另外的随机端口,其他容器或主机就可以通过映射后的端口与此容器通信。同时,我们也可以通过-p(小写)参数将Dockerfile中EXPOSE中没有列出的端口设置成公开的。

ADD:向新镜像中添加文件,这个文件可以是一个主机文件,也可以是一个网络文件,也可以使一个文件夹。

第一个参数:源文件(夹)。如果是相对路径,它必须是相对于Dockerfile所在目录的相对路径。如果是URL,会先下载下来,再添加到镜像里去。

第二个参数:目标路径。如果源文件是主机上zip或者tar形式的压缩文件,Docker会先解压缩,然后将文件添加到镜像的指定位置。如果源文件是一个通过URL指定的网络压缩文件,则不会解压。

VOLUME:在镜像里创建一个指定路径(文件或文件夹)的挂载点,这个容器可以来自主机或者其它容器。多个容器可以通过同一个挂载点共享数据,即便其中一个容器已经停止,挂载点也仍热可以访问。

WORKDIR:为接下来执行的指令指定一个新的工作目录,这个目录可以使绝对目录,也可以是相对目录。根据需要,WORKDIR可以被多次指定。当启动一个容器时,最后一条WORKDIR指令所指的目录将作为容器运行的当前工作目录。

ENV:设置容器运行的环境变量。在运行容器的时候,通过-e参数可以修改这个环境变量值,也可以添加新的环境变量:

docker run -e WEBAPP_PORT=8000 -e WEBAPP_HOST=www.example.com ...

CMD:用来设置启动容器时默认运行的命令。

ENTRYPOINT:与CMD类似,也是用来指定容器启动时的默认运行的命令。区别在于:运行容器时添加在镜像之后的参数,对ENTRYPOINT是拼接,CMD是覆盖。

ENTRYPOINT [ "ls", "-l"]

docker run centos ==> docker run centos ls -l

docker run centos -a ==> docker run centos ls -l -a

我们在运行容器的时候可以通过--entrypoint来覆盖Dockerfile中的指定:docker run gutianlangyu/test --entrypoint echo "hello world"
USER:为容器的运行及接下来RUN、CMD、ENTRYPOINT等指令的运行指定用户或UID。

ONBUILD:触发器指令。构建镜像时,Docker的镜像构建器会将所有的ONBUILD指令指定的命令保存到镜像的元数据中,这些命令在当前镜像的构建过程中并不会执行。只有新的镜像使用FROM指令指定父镜像为这个镜像时,便会触发执行。

使用FROM以这个Dockerfile构建出的镜像为父镜像,构建子镜像时:

ONBUILD ADD . /app/src:自动执行ADD . /app/src
1、建目录并将tomcat和jdk拷贝到主机
root@localhost ]# mkdir -p /root/tomcat
[root@localhost ]# cd /root/tomcat
[root@localhost tomcat]# ll
-rw-r--r--. 1 root root  9672485 Mar 25 16:54 apache-tomcat-9.0.16.tar.gz
-rw-r--r--. 1 root root 191817140 Mar 25 16:54 jdk-8u91-linux-x64.tar.gz

2.创建Dockerfile文件
[root@localhost tomcat]# vi Dockerfile
[root@localhost tomcat]# cat Dockerfile 
FROM centos:7
MAINTAINER This is tomcat server
ADD jdk-8u91-linux-x64.tar.gz /root
RUN mv /root/jdk1.8.0_91/ /usr/local/jdk1.8
ENV JAVA_HOME=/usr/local/jdk1.8
ENV CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
ENV PATH=$JAVA_HOME/bin:$PATH
ADD apache-tomcat-9.0.16.tar.gz /root
RUN mv /root/apache-tomcat-9.0.16/ /usr/local/tomcat
RUN ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/;ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/
EXPOSE 8080
ENTRYPOINT /usr/local/tomcat/bin/startup.sh && /bin/bash && tail -f /usr/local/tomcat/logs/catalina.out

[root@localhost tomcat]#
3.构建镜像
[root@localhost tomcat]# docker build -t tomcat:new .
Sending build context to Docker daemon 201.5 MB
Step 1/12 : FROM centos:7
 ---> 9f38484d220f
Step 2/12 : MAINTAINER This is tomcat server
 ---> Running in 6e1d488971ec
 ---> c33491f00d26
Removing intermediate container 6e1d488971ec
Step 3/12 : ADD jdk-8u91-linux-x64.tar.gz /root
 ---> f5be3b73bb88
Removing intermediate container 8877cec63f5d
Step 4/12 : RUN mv /root/jdk1.8.0_91/ /usr/local/jdk1.8
 ---> 28c742126db3
Removing intermediate container 62d6174553af
Step 5/12 : ENV JAVA_HOME=/usr/local/jdk1.8
 ---> Running in 0d5178ed133e
 ---> 98f104211dcb
Removing intermediate container 0d5178ed133e
Step 6/12 : ENV CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
 ---> Running in 077e50425939
 ---> fb9db9ffa43a
Removing intermediate container 077e50425939
Step 7/12 : ENV PATH=$JAVA_HOME/bin:$PATH/root/apache-tomcat-8.5.39/logs/catalina.out
 ---> Running in 3e3b1090c398
 ---> 70ff7873d7cd
 Step 8/12 : ADD apache-tomcat-9.0.16.tar.gz /root
 ---> f5be3b73bb88
Removing intermediate container 8877cec63f5d
Step 9/12 : RUN mv /root/apache-tomcat-9.0.16/ /usr/local/tomcat
 ---> 28c742126db3
Removing intermediate container 62d6174553af
Step 10/12 : RUN ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/;ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/
 ---> Running in 0d5178ed133e
 ---> 98f104211dcb
Removing intermediate container 0d5178ed133e
Step 11/12 : EXPOSE 8080
 ---> Running in 077e50ed939
 ---> fb9db9ffa43a
Removing intermediate container 077e504ed939
Step 11/12 : ENTRYPOINT /usr/local/tomcat/bin/startup.sh && /bin/bash && tail -f /usr/local/tomcat/logs/catalina.out
 ---> Running in 077e50425939
 ---> fb9db9ffa43a
Removing intermediate container 077e50425939
Successfully built 70ff7873d7cd
[root@localhost software]#

-t选择指定生成镜像的用户名,仓库名和tag

–rm=true指定在生成镜像过程中删除中间产生的临时容器。

4、运行镜像

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

-P随机指定主机端口与容器8080端口进行绑定

-d 指定容器运行后与当前tty分离,后台运行

通过 http://宿主机IP:32771,即可看见我们熟悉的tomcat首页了
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dockerfile——构建tomcat镜像 的相关文章

随机推荐

  • RabbitMQ--扩展--11--均衡负载

    RabbitMQ 扩展 11 均衡负载 1 场景 面对大量业务访问 高并发请求 可以使用高性能的服务器来提升RabbitMQ服务的负载能力 当单机容量达到极限时 可以采取集群的策略来对负载能力做进一步的提升 但这里还存在一个负载不均衡的问题
  • consul作为配置中心

    Conusl可以作为注册中心 也可以作为配置中心 作为配置中心 使用起来也很方便 大多数都是配置 Consul的安装这里不说了 主要是说明java后端怎么使用 所以本次采用windows版本的consul 引入和配置 2个文件 pom配置
  • ajax error弹框,完美解决:layui弹出层无法关闭/ajax请求成功,但是不进入success,也不进入error...

    我在使用一个叫做H ui admin的后台模板 基于layui 做一套管理系统 业务 点击按钮 出现弹出层 ajax通过接口向后台发送数据 成功后 关闭弹出层 前面都没有什么问题 就是到了关闭弹出层 真的快把我逼疯了 1 首先 我认为是la
  • IFrame和Ajax比较

    说到比较 可能我是需要把这连个东西都给大家介绍一下的 但是介于大家都已经有了很多的理解 我就简单的说了 Ajax 是指一种创建交互式网页应用的网页开发技术 主要是利用XmlHttpRequest对象 该对象在 Internet Explor
  • 网络基础知识

    网络基础概念 网络 两个设备之间 通过介质连接起来就形成网络 上网 就是连接到英特网 要想使pc机之间关联起来 要设置地址 1 IP地址 子网掩码 网关 2 MAC地址 物理地址 window键 R会跳出运行窗口 输入ncpa cpl可以调
  • UGUI ScrollRect使用(实现滑动效果)

    在工作中需要实现滑动效果 网上一番资料查询之后了解到ScrollRect组件 记录一下使用过程中遇到的问题与解决办法 先来看一下ScrollRect的属性 其中Content和Viewport非常重要 能否实现滑动效果取决于这两个属性 至于
  • GCC AVR(Atmel Studio+ AVR Studio)如何在程序存储器(flash)空间存放字符串常量和使用字符串常量

    目录 一 program memory和data memory 二 如何将字符串变量定义到program memory flash 三 如何读取字符串变量 四 PSTR 五 使用strcpy 函数将字符串常量拷贝字符串缓冲区会占用大量的da
  • 报错curl: (7) Failed to connect to 127.0.0.1 port xxxx: Connection refused

    pyenv install xxx 报错curl 7 Failed to connect to 127 0 0 1 port xxxx Connection refused的解决方法 问题重现截图 在查看下面的原因和使用解决方法之前 确保自
  • .NET EF Core 使用 DBFrist 连接sql server

    目录 1 创建项目并导导入包 2 使用命令行生成实体类和上下行类 3 修改上下文类 从配置文件 appsettings json 读取数据库连接字符串 4 编辑Program cs文件 5 测试连接是否成功 1 创建一个控制器 2 修改控制
  • SpringBoot AOP使用

    AOP即面向切面编程 其存在的目的就是为了解耦 通过AOP的实现 可以让业务逻辑只关心业务本身 而不用在意其他的事情 无需改动原有代码 实现无侵入增加部分能力 在系统日志处理 系统事务处理 系统安全验证 系统数据验证等多个场景中都有可能使用
  • matlab之导入txt文件并取其中一列数据

    1 我想导入下面这个文件的内容 并且获取这个文件中的两列数据 2 首先确保Matlab当前所在文件夹为txt文件所在文件夹 然后命令行执行 X load 2019 03 21 08 59 07 fitness txt 即将txt数据存入一个
  • 浏览器使用postMessage实现零延时定时器

    原文地址 https dbaron org log 20100309 faster timeouts 作者 David Baron 浏览器零延时定时器 function var timeouts var messageName zero t
  • mpvue踩坑总结编二

    这个mpvue大大安装大家肯定都没问题的 但安装预览的时候 不是用浏览器打开输入 localhost 8080 而是打开微信开发者工具 把项目根目录导入进去 坑一 不支持ElmentUI和Vue router 不支持ElmentUI和诸如类
  • AttGAN: Facial Attribute Editing by Only Changing What You Want

    AttGAN Facial Attribute Editing by Only Changing What You Want paper motivation 与starGANZ几乎同时间发表的另一篇人脸属性多领域迁移的论文 使用一个统一的
  • python安装报错2503_解决SVN安装报错代码2503,2502

    windows8以后的版本安装msi软件 比如nodejs msi Git msi python msi T ortoiseSVN msi 的时候老师出现2503 2502的错误 究其原因还是系统权限的问题 解决步骤 1 按住win x 在
  • spring中datasource配置

    datasource配置有很多种 我介绍的一种是采用c3p0的 它的百科地址是 http baike baidu com view 920062 htm
  • 解压tar包工具UntarUtil(4)

    This method wraps the input stream with the corresponding decompression method param file provides location information
  • mui back 返回刷新页面方法

    2个页面 模拟 1 html
  • 通过智慧的选择保持持续的进步 ——Google全球副总裁李开复谈选择的智慧

    通过智慧的选择保持持续的进步 Google全球副总裁李开复谈选择的智慧 2006 11 21 15 24 57 当今时代和20世纪已经有很大的差别 今天人们可以通过互联网接触到更多的信息 根据这些信息来为自己做更好的选择 这样的环境下 能够
  • dockerfile——构建tomcat镜像

    在前面的例子 Docker Tomcat镜像制作 中 我们从下载镜像 启动容器 在容器中输入命令来运行程序 这些命令都是手工一条条往里输入的 无法重复利用 而且效率很低 所以就需要一 种文件或脚本 我们把想执行的操作以命令的方式写入其中 然