前言

我们学习docker的话,其主要目的还是要用来改变我们部署应用程序的传统习惯,达到解放生产力,解放人力的目的。这篇则自己来熟悉一下dockerfile常用命令。并且尝试改变下生产环境手动部署应用的方式。

常用基础命令

FROM 该dockerfile的基础镜像

RUN 启动时用来执行命令,通常用来执行应用程序安装和更新

CMD docker启动时,RUN执行前默认调用的命令,多条命令的话只会执行最后一条命令。

COPY 从上下文环境中复制文件到容器中。

ADD 更高级的复制功能,提供解压功能。

EXPOSE 暴露端口。

第一个Dockerfile

好吧,先来个hello world体检下dockerfile的便捷之处。

FROM ubuntu:14.04
MAINTAINER luck_successful@163.com RUN apt-get update CMD echo "hello docker I am garfieldzf"

接下来就生成镜像

docker build -t myubuntu:v1

执行无误后在终端里会显示hello docker I am garfieldzf

第二个Dockerfile

这个dockerfile则用来部署一个war包到容器中的tomcat中。在宿主机创建目录/usr/dockerfile。拷贝apache-tomcat-8.0.53.tar.gz、jdk-8u161-linux-x64.tar.gz  springMVC.war都当前目录中。

创建Dockerfile文件并修改内容 touch Dockerfile  vi Dockerfile

FROM centos:latest
MAINTAINER luck_successful@163.com WORKDIR /usr
RUN mkdir jdk
RUN mkdir tomcat ADD jdk-8u161-linux-x64.tar.gz /usr/jdk/
ADD apache-tomcat-8.0.53.tar.gz /usr/tomcat/ ENV JAVA_HOME /usr/jdk/jdk1.8.0_161
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/tomcat/apache-tomcat-8.0.53
ENV CATALINA_BASE /usr/tomcat/apache-tomcat-8.0.53
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin EXPOSE 8080 CMD /usr/tomcat/apache-tomcat-8.0.53/bin/catalina.sh run

  这里注意,我从本地下载的tomcat没有修改端口,一开始EXPOSE写的 80端口。build 和run后tomcat访问不了。这才想起来端口不对。

构建镜像。注意后面的小数点,表示构建镜像的上下文环境。

docker build -t garfieldzf/tomcat  . 

构建完成使用docker images会看到刚才构建的文件

运行镜像。 以后来运行的方式来运行。启动后会返回容器id

  docker run -d -it -p 8080:8080 garfieldzf/tomcat

  先来访问tomcat。看到tomcat跑起来,则说明容器内容tomcat已启动

接下来就是把本机的war包部署到容器的tomcat目录下

使用docker cp 把war复制到容器里。复制前先用docker ps查看容器id

docker cp springMVC.war [容器id]:/usr/tomcat/apache-tomcat-8.0.53/webapps/

   重启容器

   docker restart [容器id]

   访问:http://192.168.80.129:8080/springMVC/

完事。 第一个Dockerfile完成了。

学习编写Dockerfile的更多相关文章

  1. 编写 DockerFile

    编写 DockerFile 本节内容简介 在前面的实验中我们多次用到的 Dockerfile,在本实验里我们将通过完成一个实例来学习Dockerfile的编写. 本节中,我们需要依次完成下面几项任务: ...

  2. [转帖]Docker学习之Dockerfile命令详解

    Docker学习之Dockerfile命令详解 https://it.baiked.com/system/docker/2436.html 图挺好的 前言 之前,制作镜像的伪姿势搭建已经见过了,今天介 ...

  3. 4.Docker容器学习之Dockerfile入门到放弃

    原文地址: 点击直达 0x01 Dockerfile 编写 描述:Dockerfile是一个文本格式的配置文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内 ...

  4. Docker容器学习梳理 - Dockerfile构建镜像

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

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

    最初在tomcat上部署web应用的方式,是通过maven的maven-compiler-plugin插件先打成war包,再将war包复制到tomcat的webapps目录下,后来用上了tomcat7 ...

  6. 编写Dockerfile自定义镜像

    要求 编写一个Dockerfile自定义centos镜像,要求在容器内部可以使用vim和ifconfig命令,并且登入落脚点为/usr/local 编写Dockerfile FROM centos M ...

  7. 编写 Dockerfile 生成自定义镜像

    一般情况下我们可以从公共渠道诸如 DockerHub 获取镜像上获取镜像,但是在实际生产过程中,往往需要定制化的镜像,例如修改一些配置文件,增加一些特殊的命令或软件等需求,这时就需要通过编写 Dock ...

  8. DOCKER学习_012:Dockerfile配置指令详解

    1 Dockerfile结构 基础镜像信息 镜像操作指令 容器启动时执行指令 2 FROM 指定基础镜像,用于继承其他镜像使用的 FROM ubuntu:14.06 FROM centos FROM ...

  9. (转)编写 DockerFile

    这几天在研究怎样制作docker image. 其中使用dockerfile是一种可记录制作image的过程的并且是容易重复使用的一种方式.在园子里看到了一篇好文,于是分享到这里~~ 原文链接: ht ...

随机推荐

  1. python中的单向链表实现

    引子 数据结构指的是是数据的组织的方式.从单个数据到一维结构(线性表),二维结构(树),三维结构(图),都是组织数据的不同方式. 为什么需要链表? 顺序表的构建需要预先知道数据大小来申请连续的存储空间 ...

  2. 推荐自学JAVA开发的三本书

    ---------------------------------------------------------------------------------------------------- ...

  3. MyEclipse 10 报错记录

    1. js文件:右键 >> MyEclipse >> Exclude From Validation 2. Servlet 警告:Window ==> Preferenc ...

  4. 小程序组件化框架 WePY 在性能调优上做出的探究

    作者:龚澄 导语 性能调优是一个亘古不变的话题,无论是在传统H5上还是小程序中.因为实现机制不同,可能导致传统H5中的某些优化方式在小程序上并不适用.因此必须另开辟蹊径找出适合小程序的调估方式. 本文 ...

  5. Java Bloom filter几种实现比较

    英文原始出处: Bloom filter for Scala, the fastest for JVM 本文介绍的是用Scala实现的Bloom filter. 源代码在github上.依照性能测试结 ...

  6. &和&&的共同点和区别、Java字符含义和Java创建对象的几种方式

    一.&和&&的共同点和区别 1.&和&&的联系(共同点): &和&&都可以用作逻辑与运算符,但是要看使用时的具体条件来决定. 操 ...

  7. JavaScript中如何理解如何理解Array.apply(null, {length:5})

    先来看一个问题: 如何理解Array.apply(null, {length:5})的{length:5}? 我测试过Array.apply(null, {length:5}) //返回[undefi ...

  8. FFmpeg 结构体学习(七): AVIOContext 分析

    在上文FFmpeg 结构体学习(六): AVCodecContext 分析我们学习了AVCodec结构体的相关内容.本文,我们将讲述一下AVIOContext. AVIOContext是FFMPEG管 ...

  9. idea 启动调试模式总提示端口58346被占用问题

    在开发的时候,莫名其妙没法用jrebel调试模式启动了tomcat了,最开始以为是后台端口占用问题,然而把后台java程序全部关了都没用.仔细排查,根据提示发现是端口58346被占用了, 于是便在 w ...

  10. CSS怎么在项目里引入自定义字体(@font-face)

    前言: 以前我一直用内置的默认字体给文字设置字体,直到一天UI妹纸给了我下面的字体    当时我是蒙蔽的,这个字体的效果如下 默认字体并无该字体,直接设置是没有效果的,这时就需要用到自定义字体了 下面 ...