docker已经看了有一段时间了,对镜像和容器也有了一个大致了解,参考书上的例子制作一个tomcat镜像,并简单运行一个HelloWorld.war

1.首先下载linux环境的tomcat和jdk,并分别解压至helloworld目录

2.新建Dockerfile文件

touch Dockerfile

Dockerfile文件的内容如下:

 FROM ccc7a11d65b1     (这串数字是我已经创建好一个ubuntu镜像的镜像id,在这里作为tomcat的基础镜像
MAINTAINER hmk
ENV REFRESHED_AT -- (这个环境变量用来表名该镜像模板的最后更新时间) #切换镜像目录,进入/usr目录
WORKDIR /usr
#在/usr/下创建jdk目录,用来存放jdk文件
RUN mkdir jdk
#在/usr/下创建tomcat目录,用来存放tomcat
RUN mkdir tomcat #将宿主机的jdk目录下的文件拷至镜像的/usr/jdk目录下
ADD jdk1..0_131 /usr/jdk/
#将宿主机的tomcat目录下的文件拷至镜像的/usr/tomcat目录下
ADD apache-tomcat-7.0. /usr/tomcat/ #设置环境变量
ENV JAVA_HOME=/usr/jdk
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH=/sbin:$JAVA_HOME/bin:$PATH #公开端口
EXPOSE
#设置启动命令
ENTRYPOINT ["/usr/tomcat/bin/catalina.sh","run"]

3.构建镜像

[root@localhost helloword]# docker build -t jamtur01/tomcat .

成功的话,会有镜像id显示

4.使用docker images查看创建好的镜像

5.通过创建好的镜像,启动一个容器

[root@localhost helloword]# docker run -d -p : --name hmk_tomcat jamtur01/tomcat:latest

访问一下

6.进入容器,看下之前在Dockerfile中写好命令要创建的tomcat和jdk目录

[root@localhost helloword]# docker exec -it 480f45dc4c00284690b378c063daf7371719c1cddf0efc2032223bfb318b2076 /bin/bash

<============分割线===============>

下面部署一个HelloWorld.war包

1.在helloworld目录下新建一个webapps目录,把war包放进去

2.使用-v参数将war包挂载至容器内的 tomcat/webapps目录

[root@localhost helloword]# docker run -d -p : -v /HMK/helloword/webapps/HelloWorld.war:/usr/tomcat/webapps/HelloWorld.war --name hmk_tomcat jamtur01/tomcat
注意:-v /HMK/helloword/webapps/HelloWorld.war:/usr/tomcat/webapps/HelloWorld.war,这里是挂载的单个文件

3.说明下我尝试的几种挂载方法

第一次是将宿主机webapps目录挂载至容器的webapps

[root@localhost helloword]# docker run -d -p : -v /HMK/helloword/webapps:/usr/tomcat/webapps --name hmk_tomcat jamtur01/tomcat

但是后来发现,启动容器后,容器内的webapps目录和宿主机一样了,也就是容器中tomcat/webapps原本的内容被置换为宿主机的webapps内容了(这和我预期的不符)

通过单个文件挂载的话,则只是把这个war包丢进容器中,并没有影响容器中原本的内容(虽然我知道一般不建议挂载单个文件,但是如何通过挂载目录来读取容器外的程序包、配置文件等的方法还没有找到。。。)

另外挂载单个文件时注意宿主机的路径是绝对路径,容器中也是绝对路径+文件名(也就是说虽然容器中没有这个war文件,但是我们要假设有,然后映射到宿主机的文件,然后容器就能运行宿主机的war文件了)

使用Dockerfile创建一个tomcat镜像,并运行一个简单war包的更多相关文章

  1. 基于alpine用dockerfile创建的tomcat镜像

    1.下载alpine镜像 [root@docker43 ~]# docker pull alpine Using default tag: latest Trying to pull reposito ...

  2. maven这些工具负责创建项目,然后maven负责打包好war包扔进tomcat容器,tomcat容器接受的只是jar包

    maven这些工具负责创建项目,然后maven负责打包好war包扔进tomcat容器,tomcat容器接受的只是jar包 2.tomcat不管你什么编译的,也不管你开发工具是什么.Tomcat只接受w ...

  3. Docker使用Dockerfile创建Centos(tomcat+jdk)镜像

    原文链接:https://blog.csdn.net/qq_37936542/article/details/80824389 Docker构建镜像的方法主要有两种:    (1)使用docker c ...

  4. Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较

    1.概述 创建Docker镜像的方式有三种 docker commit命令:由容器生成镜像: Dockerfile文件+docker build命令: 从本地文件系统导入:OpenVZ的模板. 关于这 ...

  5. Docker之使用Dockerfile创建定制化镜像(四)--技术流ken

    前言 在之前的博客<Docker端口映射及创建镜像演示(二)--技术流ken>,演示了如何使用一个现有容器创建一个镜像,以及镜像在阿里云的上传和下载. 但是这样的镜像有很大的局限性,不能根 ...

  6. 使用Dockerfile制作JDK+tomcat镜像

    1.准备好jdk和tomcatapache-tomcat-8.5.32.tar.gzjdk-8u181-linux-x64.tar.gz 注意:a.jdk和tomcat记得从官网下载,否则制作出来的镜 ...

  7. docker学习系列(二):使用Dockerfile创建自己的镜像

    dockerfile可以允许我们自己创建镜像,通过编写里面的下载软件命令,执行docker build 即可生成镜像文件. 初尝dockerfile 新建一个目录test,然后进入这个目录,创建一个名 ...

  8. centos7创建docker tomcat镜像

    1 准备宿主系统 准备一个 CentOS 7操作系统,具体要求如下: 必须是 64 位操作系统 建议内核在 3.8 以上 通过以下命令查看您的 CentOS 内核: 1 # uname -r 2 安装 ...

  9. Docker之使用Dockerfile创建定制化镜像(四)

    Dockerfile简介 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么哪些无法重复的问题.镜像构建 ...

随机推荐

  1. 反射(C#编程)

    反射提供了封装程序集.模块和类型的对象(Type 类型).可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性.如果代码中使用了属性,可以利用反射对 ...

  2. Asp.net mvc 5 razor

    一开始学习dotnet的web项目是Asp.net webform,完全不理解项目为什么要这样设计,就简单的使用ajax调用后台的代码不好吗?为什么还要搞一些什么代码后置的东东. 还有就是有各种加载问 ...

  3. 学IT应该看些书?

    第一阶段:<数据结构><数据库><算法><信息系统管理><互联网>第二阶段:<莫生气><佛经><老子>& ...

  4. 【BZOJ4003】【JLOI2015】城池攻占(左偏树)

    题面 题目描述 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池.这 n 个城池用 1 到 n 的整数表示.除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖,其中 fi ...

  5. 【经验随笔】 Tomcat多个APP使用相同名称环境变量导致问题

    背景介绍 之前遇到一个问题,在一个tomcat下部署了两个APP,其中一个APP不能正常从底层接口获取数据.如果将两个APP分到不同服务器上的tomcat部署,又都正常了.分析了一下: 远程调试跟代码 ...

  6. Cocos2d-x 集成openinstall(Android)

    目的: 1. Cocos2d-x集成openinstall sdk? 有这么一个场景,甲给乙分享了链接,乙使用并下载APP,推荐者甲和乙的关系这个思路是怎样的? 你首先想到的也许会说,那当然就是给对方 ...

  7. handsontable 属性汇总

    常规属性: 1.固定行列位置 fixedRowsTop:行数 //固定顶部多少行不能垂直滚动 fixedColumnsLeft:列数 //固定左侧多少列不能水平滚动 2.拖拽行头或列头改变行或列的大小 ...

  8. Ubuntu14.04 设置wifi热点

    Ubuntu14.04 设置wifi热点 $ sudo add-apt-repository ppa:nilarimogard/webupd8 $ sudo apt-get update $ sudo ...

  9. WordPress给网站添加支付宝捐赠功能

    最开始是在陌小雨的博客上看见这个功能,其实一般个人网站都会添加这个功能,下面我会讲解两种,不多说,上图: 1.添加到网页中任何位置: 上图这个功能可以添加到网页中的任何位置,可以在文章中添加,也可以利 ...

  10. Redis分布式锁的正确实现方式

    前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介 ...