Dockerfile概念:

镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。

Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

代码:

Centos7.2中安装jdk和tomcat

FROM centos:7.2.
MAINTAINER hongdada "hongdaqi159505@gmail.com" # 设置当前工具目录
# 该命令不会新增镜像层
WORKDIR /home # 安装必要的工具
RUN yum install -y wget && \
rpm --rebuilddb && \
yum install -y tar && \
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz && \
tar -xvzf jdk-8u131-linux-x64.tar.gz && \
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz && \
tar -xvzf apache-tomcat-8.5..tar.gz && \
mv apache-tomcat-8.5./ tomcat && \
rm -f jdk-8u131-linux-x64.tar.gz && \
rm -f apache-tomcat-8.5..tar.gz && \
yum clean all # 设置环境变量
ENV JAVA_HOME /home/jdk1..0_131
ENV CATALINA_HOME /home/tomcat
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin # 暴露tomcat 8080端口
EXPOSE ENTRYPOINT /home/tomcat/bin/startup.sh && tail -f /home/tomcat/logs/catalina.out # 创建容器启动tomcat
CMD ["/home/tomcat/bin/startup.sh"]

利用这个Dockerfile构建镜像命令:

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

注意后面有个点 .

我们这里使用的是直接下载,但是一般生产不会这样,会利用已经下载好的安装包,这样在build的过程中会报错
找不到tomcat或者jdk路径,这事可以在build时用指定Dockerfile路径试试。

docker build -t tomcat:test1 /home/zyt/tomcat-docker/Dockerfile .

上面的构建命令执行结果:

[root@localhost tomcat]# docker build -t centos:v1 .
Sending build context to Docker daemon 3.072 kB
Step / : FROM centos:7.2.
Trying to pull repository docker.io/library/centos ...
sha256:7c47810fd05ba380bd607a1ece3b4ad7e67f5906b1b981291987918cb22f6d4d: Pulling from docker.io/library/centos
f2d1d709a1da: Pull complete
Digest: sha256:7c47810fd05ba380bd607a1ece3b4ad7e67f5906b1b981291987918cb22f6d4d
Status: Downloaded newer image for docker.io/centos:7.2.
---> 0a2bad7da9b5
Step / : MAINTAINER hongdada "hongdaqi159505@gmail.com"
---> Running in c6da5f881cc8
---> 69b28335aece
Removing intermediate container c6da5f881cc8
Step / : WORKDIR /home
---> 7c45fd2b7596
Removing intermediate container d1d433a16ef9
Step / : RUN yum install -y wget && rpm --rebuilddb && yum install -y tar && wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz && tar -xvzf jdk-8u131-linux-x64.tar.gz && wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz && tar -xvzf apache-tomcat-8.5.32.tar.gz && mv apache-tomcat-8.5.32/ tomcat && rm -f jdk-8u131-linux-x64.tar.gz && rm -f apache-tomcat-8.5.32.tar.gz && yum clean all
---> Running in 7256e59ff024
.......
.......
.......
Loaded plugins: fastestmirror
Cleaning repos: base extras updates
Cleaning up everything
Cleaning up list of fastest mirrors
---> 10720ac1a433
Removing intermediate container 7256e59ff024
Step / : ENV JAVA_HOME /home/jdk1..0_131
---> Running in 9dda120b45bc
---> 3c5390a1e18c
Removing intermediate container 9dda120b45bc
Step / : ENV CATALINA_HOME /home/tomcat
---> Running in 55b9ca9b46f6
---> 23dd4d3c4e81
Removing intermediate container 55b9ca9b46f6
Step / : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
---> Running in 8b79ea2a53bc
---> 1403401143c8
Removing intermediate container 8b79ea2a53bc
Step / : EXPOSE
---> Running in c1faa9022bf7
---> bde367d955e3
Removing intermediate container c1faa9022bf7
Step / : ENTRYPOINT /home/tomcat/bin/startup.sh && tail -f /home/tomcat/logs/catalina.out
---> Running in e0f7216cdefc
---> ff984964a08f
Removing intermediate container e0f7216cdefc
Step / : CMD /home/tomcat/bin/startup.sh
---> Running in 27eb2056c888
---> 86bb3ec89384
Removing intermediate container 27eb2056c888
Successfully built 86bb3ec89384

可以看出一共分成了10步,最后Successfully

查看镜像:

[root@localhost tomcat]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos v1 86bb3ec89384 minutes ago MB
<none> <none> a19d7e86dfb2 minutes ago MB
docker.io/nginx latest 5699ececb21c days ago MB
docker.io/ubuntu 16.04 5e8b97a2a082 weeks ago MB
docker.io/centos latest 49f7960eb7e4 weeks ago MB
hongdada/nginx v3 c5cf58738d6b weeks ago MB

可以看出第一个就是刚刚构建的centos

根据该镜像启动一个容器:

[root@localhost tomcat]# docker run -d -p : centos:v1
b445ecc8eb60634481404a88f3d9c017c88b122c431f1b70f3887dcce284eb18

查看:

[root@localhost tomcat]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b445ecc8eb60 centos:v1 "/bin/sh -c '/home..." seconds ago Up seconds 0.0.0.0:->/tcp suspicious_bassi

查看容器启动日志:

root@localhost tomcat]# docker logs b4
Tomcat started.
tail: unrecognized file system type 0x794c7630 for '/home/tomcat/logs/catalina.out'. please report this to bug-coreutils@gnu.org. reverting to polling
-Jul- ::21.422 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.5.
-Jul- ::21.444 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Jun :: UTC
-Jul- ::21.444 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 8.5.32.0
-Jul- ::21.445 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux
-Jul- ::21.445 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 3.10.-693.21..el7.x86_64
-Jul- ::21.445 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64
-Jul- ::21.445 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /home/jdk1..0_131/jre
-Jul- ::21.445 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.8.0_131-b11
-Jul- ::21.445 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation
-Jul- ::21.445 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /home/tomcat
-Jul- ::21.445 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /home/tomcat
-Jul- ::21.446 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/home/tomcat/conf/logging.properties
-Jul- ::21.446 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Jul- ::21.446 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=
-Jul- ::21.446 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
-Jul- ::21.446 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=
-Jul- ::21.446 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
-Jul- ::21.446 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/home/tomcat
-Jul- ::21.446 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/home/tomcat
-Jul- ::21.446 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/home/tomcat/temp
-Jul- ::21.446 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
-Jul- ::21.862 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
-Jul- ::21.899 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
-Jul- ::21.912 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]
-Jul- ::21.913 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
-Jul- ::21.926 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in ms
-Jul- ::22.000 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
-Jul- ::22.000 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.
-Jul- ::22.037 INFO [localhost-startStop-] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/home/tomcat/webapps/ROOT]
-Jul- ::22.928 INFO [localhost-startStop-] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/home/tomcat/webapps/ROOT] has finished in [] ms
-Jul- ::22.941 INFO [localhost-startStop-] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/home/tomcat/webapps/docs]
-Jul- ::22.988 INFO [localhost-startStop-] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/home/tomcat/webapps/docs] has finished in [] ms
-Jul- ::22.989 INFO [localhost-startStop-] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/home/tomcat/webapps/examples]
-Jul- ::23.572 INFO [localhost-startStop-] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/home/tomcat/webapps/examples] has finished in [] ms
-Jul- ::23.572 INFO [localhost-startStop-] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/home/tomcat/webapps/host-manager]
-Jul- ::23.645 INFO [localhost-startStop-] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/home/tomcat/webapps/host-manager] has finished in [] ms
-Jul- ::23.646 INFO [localhost-startStop-] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/home/tomcat/webapps/manager]
-Jul- ::23.700 INFO [localhost-startStop-] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/home/tomcat/webapps/manager] has finished in [] ms
-Jul- ::23.709 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
-Jul- ::23.751 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
-Jul- ::23.755 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in ms

最后查看8088端口是否可以访问tomcat,我这边是可以的,这边就不贴效果图了。

进入容器内部进行查看:

[root@localhost tomcat]# docker exec -it b44 /bin/bash
[root@b445ecc8eb60 home]# ll
total
drwxr-xr-x. Mar jdk1..0_131
drwxr-xr-x. root root Jul : tomcat

参考:

https://blog.csdn.net/wo18237095579/article/details/80540571

https://ithelp.ithome.com.tw/articles/10191016

https://yeasy.gitbooks.io/docker_practice/image/build.html

http://oomusou.io/docker/dockerfile-dockercompose/

https://blog.csdn.net/boonya/article/details/74626431

https://steffan.cn/2017/02/10/how-to-build-a-Tomcat-image-with-Dockerfile-and-deploy-war/

https://www.jianshu.com/p/369e75f6303b

Docker 使用Dockerfile构建tomcat镜像的更多相关文章

  1. dockerfile构建Tomcat镜像

    dockerfile构建Tomcat镜像 一.镜像分层概念 二.制作tomcat镜像 2.1.创建分层目录 [root@node2 ~]# mkdir /app/{web/{nginx,tomcat, ...

  2. Docker 使用Dockerfile构建redis镜像

    Dockerfile实现: FROM centos: MAINTAINER hongdada "hongdaqi159505@gmail.com" WORKDIR /home RU ...

  3. 如何使用Dockerfile构建Tomcat镜像并部署war

    我们都知道Docker构建一个镜像有两种方式: 使用`docker commit`命令 使用`Dockerfile`文件和`docker build`命令 那么这两种方式有何区别呢? 相同点:底层实现 ...

  4. docker使用dockerfile 构建redis镜像

    FROM redis WORKDIR /data VOLUME /data EXPOSE RUN echo "success---------success" ENTRYPOINT ...

  5. 用Docker构建Tomcat镜像

    构建tomcat镜像 创建工作目录 [root@elk-node2 tomcat]# mkdir tomcat [root@elk-node2 tomcat]# cd tomcat [root@elk ...

  6. Docker学习(六)Dockerfile构建自定义镜像

    Docker学习(六)Dockerfile构建自定义镜像 前言 通过前面一篇文章可以知道怎么去使用一个镜像搭建服务,但是,如何构造自己的一个镜像呢,docker提供了dockerfile可以让我们自己 ...

  7. Docker系列(24)- 实战:DockerFile制作tomcat镜像

    实战:DockerFile制作tomcat镜像 step-1 准备镜像文件 tomcat压缩包,jdk压缩包! step-2 编写dockerfile文件,官方命名Dockerfile,build会自 ...

  8. docker通过dockerfile构建JDK最小镜像,Docker导出导入镜像

    docker通过dockerfile构建JDK最小镜像,Docker导出导入镜像 一.docker通过dockerfile构建JDK最小镜像 1.1 下载JRE 1.2 解压JRE,删除相关不需要文件 ...

  9. Dockerfile构建私有镜像

    构建第一个镜像 镜像的定制实际上就是定制每一层所添加的配置,文件.我们可以把每一层修改,安装,构建,操作的命令都写入一个脚本,这个脚本就是Dockerfile.Dockerfile是一个文本文件,其内 ...

随机推荐

  1. Oracle / PLSQL函数 - LENGTH和LENGTHB

    1.LENGTH( string1 ) 2.LENGTHB( string1 ) 在oracle中,这两个函数都有差不多意思,最大的区别在于:length 求得是字符长度,lengthb求得是字节长度 ...

  2. sitecore系统教程之限制对客户端的访问

    如果您为不同目的配置服务器,根据角色,您可能需要禁用Sitecore客户端.例如,如果配置内容交付服务器或处理服务器,则无需访问客户端应用程序,因此在这种情况下,建议禁用客户端. 为防止未经授权访问S ...

  3. 准备dbcp2-2.1.1和pool2-2.4.2 、commons-dbcp-1.4jar包

    下载地址:https://pan.baidu.com/s/1gtcW36Lz6Yt-j9WlTu31Pw

  4. flask 使用宏渲染表单(包含错误信息)

    在模板中渲染表单时,有大量的工作: 1.调用字段属性,获取<input>定义 2.调用对应的label属性,获取<label>定义 3.渲染错误消息 为了避免为每一个字段重复这 ...

  5. 【Alpha版本】冲刺阶段——Day5

    [Alpha版本]冲刺阶段--Day5 阅读目录 今日进展 问题困难 明日任务 今日贡献量 站立式会议 TODOlist [今日进展] 完成登录类代码 public void LOGIN() { co ...

  6. 禁用HTTP.sys,导致80端口被禁用和IIS服务无法启动解决办法

    由于端口被占用,使用 win+r 运行 cmd 输入netstat -ano 可以看到端口被PIF 4占用,可以找到对应的进程NT kernel& System 该进程是Http.sys,是h ...

  7. Redhat 简单本地yum 配置

    Redhat 简单本地yum 配置 一.将redhat 系统的镜像挂载到系统上 Vmware Workstion 环境下: [虚拟机设置]--[硬件]--[CD/DVD]--[使用ISO映像文件]-- ...

  8. GoldenGate 12.3 MA架构介绍系列(3) - 各功能模块介绍

    在新版的ogg 12.3 microservice architect中,提供了4个不同的服务模块和命令行模块. Admin Server: 负责连接用户.trandata, checkpoint的添 ...

  9. IntelliJ IDEA. Debug模式

    资料收集: https://www.bilibili.com/video/av6749471/?p=16 eclipse debug模式. 基础 Intellij Idea--Debug使用 Inte ...

  10. bzoj 3083

    bzoj 3083 树链剖分,换根 对于一颗树有以下操作 1.确定x为根,2.将u到v的简单路径上的数全改成c,3.询问当前以x为根的子树中的节点最小权值. 如果没有操作1:树链剖分很明显. 于是考虑 ...