使用Dockerfile创建一个tomcat镜像,并运行一个简单war包
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包的更多相关文章
- 基于alpine用dockerfile创建的tomcat镜像
1.下载alpine镜像 [root@docker43 ~]# docker pull alpine Using default tag: latest Trying to pull reposito ...
- maven这些工具负责创建项目,然后maven负责打包好war包扔进tomcat容器,tomcat容器接受的只是jar包
maven这些工具负责创建项目,然后maven负责打包好war包扔进tomcat容器,tomcat容器接受的只是jar包 2.tomcat不管你什么编译的,也不管你开发工具是什么.Tomcat只接受w ...
- Docker使用Dockerfile创建Centos(tomcat+jdk)镜像
原文链接:https://blog.csdn.net/qq_37936542/article/details/80824389 Docker构建镜像的方法主要有两种: (1)使用docker c ...
- Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较
1.概述 创建Docker镜像的方式有三种 docker commit命令:由容器生成镜像: Dockerfile文件+docker build命令: 从本地文件系统导入:OpenVZ的模板. 关于这 ...
- Docker之使用Dockerfile创建定制化镜像(四)--技术流ken
前言 在之前的博客<Docker端口映射及创建镜像演示(二)--技术流ken>,演示了如何使用一个现有容器创建一个镜像,以及镜像在阿里云的上传和下载. 但是这样的镜像有很大的局限性,不能根 ...
- 使用Dockerfile制作JDK+tomcat镜像
1.准备好jdk和tomcatapache-tomcat-8.5.32.tar.gzjdk-8u181-linux-x64.tar.gz 注意:a.jdk和tomcat记得从官网下载,否则制作出来的镜 ...
- docker学习系列(二):使用Dockerfile创建自己的镜像
dockerfile可以允许我们自己创建镜像,通过编写里面的下载软件命令,执行docker build 即可生成镜像文件. 初尝dockerfile 新建一个目录test,然后进入这个目录,创建一个名 ...
- centos7创建docker tomcat镜像
1 准备宿主系统 准备一个 CentOS 7操作系统,具体要求如下: 必须是 64 位操作系统 建议内核在 3.8 以上 通过以下命令查看您的 CentOS 内核: 1 # uname -r 2 安装 ...
- Docker之使用Dockerfile创建定制化镜像(四)
Dockerfile简介 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么哪些无法重复的问题.镜像构建 ...
随机推荐
- Text Document Analysis CodeForces - 723B
Modern text editors usually show some information regarding the document being edited. For example, ...
- 基于Spring Boot的RESTful API实践(一)
1. RESTful简述 REST是一种设计风格,是一组约束条件及原则,而遵循REST风格的架构就称为RESTful架构,资源是RESTful的核心,一个好的RESTful架构,通过URL就能很 ...
- 标注-隐马尔可夫模型HMM的探究
1 HMM基本概念1.1 定义1.2 观测序列生成过程1.3 HMM的三个问题2 概率计算算法2.1 直接计算算法2.2 前向算法forward algorithm2.3 后向算法2.4 一些概率与期 ...
- 如何用python和苹果Turicreate学习框架来识别图像?
大多数人听到深度学习,都会望而却步,因为会觉得很难,在这个人工智能飞速进步的时代,我也来抓一下时代的尾巴~ 两周前,我开始接触到python和Turicreate框架,经过不懈的努力,终于有所收获,特 ...
- python官方推荐的各阶段学习书籍
Python学习交流群:463024091,群内每天分享干货,包括最新的python企业案例学习资料和零基础入门教程,欢迎各位小伙伴入群学习交流! 你是否曾经学期初立下一大堆学习计划,到期末却依旧过着 ...
- C#多线程编程(3)--开启子任务
上一篇我讲解了await和async关键字,这两个关键字的作用是将async限定的方法中await关键字后面的部分封装成一个委托,该委托会在await修饰的Task完成后再执行.简单的说,就是等待任务 ...
- 【Luogu3041】视频游戏的连击(AC自动机,动态规划)
题面链接 题解 首先构建出AC自动机 然后在AC自动机上面跑DP 转移很显然从Trie树的节点跳到他的儿子节点 但是要注意一个问题, 在计算的时候,每一个节点加入后能够 造成的贡献 要加上他的子串的贡 ...
- python 数据结构简介
栈(stack) 定义: 数据集合,只能在一端(首尾)进行删除和插入的列表. 特点: 后进先出(LIFO) 典型作用: 括号匹配:左括号进栈,右括号跟左括号对应则出栈,例如:(({{[]}}))匹配 ...
- mysql方言不支持blob类型解决方案
package com.gstone.history.entity; import java.sql.Types; import org.hibernate.Hibernate; import org ...
- Lintcode212 Space Replacement solution 题解
[题目描述] Write a method to replace all spaces in a string with%20. The string is given in a characters ...