前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker之Dockerfile案例演示

Docker之Dockerfile案例演示

作者头像
用户4919348
发布2019-12-30 18:24:32
1.2K0
发布2019-12-30 18:24:32
举报
文章被收录于专栏:波波烤鸭

  上篇文章我们给大家介绍了Dockerfile中的常用指令,本文我们通过具体的案例来说明这些指令。

1.Base镜像

  Docker Hub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的,如下

scratch相对于java中的Object

2.自定义镜像mycentos

  我们从官方pull下来的centos镜像是mini版的,所以不带有vim这些基础命令,那我们就来自定义一个镜像,功能比官方下载的强大点,同时运用下各个指令。

2.1 编写

  首先我们来编写对应的Dockerfile文件。内容如下

代码语言:javascript
复制
FROM centos
MAINTAINER bobo<dengpbs@163.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim

EXPOSE 80

CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

2.2 构建

  然后将脚本构建成对应的镜像文件。

代码语言:javascript
复制
docker build -f dockerfile名称 -t 新建的镜像名:TAG .

查看镜像

2.3 运行

  运行镜像文件。

代码语言:javascript
复制
docker run -it 新镜像名称:TAG

运行容器后,落脚点是 /usr/local 因为我们配置了WORKDIR

2.4 镜像历史

  查看一个镜像文件的变更历史可以使用如下命令:

代码语言:javascript
复制
docker history 镜像名

在本例中我们用到了 FROM MAINTAINER RUN EXPOSE ENV WORKDIR 命令

3.CMD/ENTRYPOINT案例

  接下来我们通过案例来看看CMDENTRYPOINT两个命令的区别,这两个命令的作用都是指定一个容器启动时要运行的命令

3.1 CMD

  Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换掉,我们通过tomcat的案例来介绍。 正常情况如下

代码语言:javascript
复制
docker run -it -p 8888:8080 tomcat

但是当我们在 执行命令后添加参数的话,如下

原因是我们先看Tomact对应的 Dockerfile文件

然而我们的run命令 把Dockerfile中的最后的CMD命令覆盖了~~

3.2 ENTRYPOINT

  有别于CMD命令,ENTRYPOINT命令是在 docker run 之后的参数会被当做参数传递给 ENTRYPOINT,之后形成新的组合命令。我们通过curl指令来介绍这个案例。 Dockerfile文件如下:

代码语言:javascript
复制
FROM centos

RUN yum install -y curl

ENTRYPOINT [ "curl", "-s", "http://www.baidu.com" ]

构建

正常run

-i参数 查看响应报文头

通过这个例子 可以看到ENTRYPOINT不会覆盖,而是组合成了一个新的命令。

4.自定义Tomcat9

  最后我们通过自定义一个tomcat镜像来介绍下ADDCOPY这两个命令的区别。

4.1 创建个tomcat目录

4.2 添加一个文件

  在当前目录下创建一个 hello.txt文件,作用是COPY到容器中

4.3 拷贝相关软件

  准备对应的jdktomcat的压缩文件。

4.4 创建Dockerfile文件

  创建对应的Dockerfile文件,如下:

代码语言:javascript
复制
FROM         centos
MAINTAINER    bobo<dengpbs@163.com>
#把宿主机当前上下文的hello.txt拷贝到容器/usr/local/路径下
COPY hello.txt /usr/local/helloincontainer.txt
#把java与tomcat添加到容器中
ADD jdk-8u201-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.0.47.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_201
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.0.47
ENV CATALINA_BASE /usr/local/apache-tomcat-8.0.47
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE  8080
#启动时运行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-8.0.47/bin/startup.sh" ]
# CMD ["/usr/local/apache-tomcat-8.0.47/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-8.0.47/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.0.47/bin/logs/catalina.out

4.5 构建

代码语言:javascript
复制
docker build -f dockerfile -t bobotomcat .

构建成功。

4.6 run

  构建成功后,我们就可以运行了,命令如下:

代码语言:javascript
复制
docker run -d -p 9080:8080 --name mytomcat -v /mydocker/tomcat/test:/usr/local/apache-tomcat-8.0.47/webapps/test -v /mydocker/tomcat/tomcatlogs/:/usr/local/apache-tomcat-8.0.47/logs --privileged=true bobotomcat

注意:我们在启动的时候指定了相关的 数据卷

4.7 验证

4.8 部署web项目

  既然我们已经部署好了我们自己的tomcat容器,而且也设置了对应的数据卷,那么我们来实际部署一个web案例来看看

4.8.1 web.xml文件

  我们在test目录下创建WEB-INF目录,然后创建web.xml文件,

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xmlns="http://java.sun.com/xml/ns/javaee"

  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

  id="WebApp_ID" version="2.5">

  

  <display-name>test</display-name>

 

</web-app>

4.8.2 index.jsp文件

  然后创建一个简单的jsp文件即可

代码语言:javascript
复制
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

  <head>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <title>Insert title here</title>

  </head>

  <body>

    -----------welcome------------

    <%="i am in docker tomcat self "%>

    <br>

    <br>

    <% System.out.println("=============docker tomcat self");%>

  </body>

</html>

4.8.3 重启容器访问即可

访问成功~说明搭建OK!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/12/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.Base镜像
  • 2.自定义镜像mycentos
    • 2.1 编写
      • 2.2 构建
        • 2.3 运行
          • 2.4 镜像历史
          • 3.CMD/ENTRYPOINT案例
            • 3.1 CMD
              • 3.2 ENTRYPOINT
              • 4.自定义Tomcat9
                • 4.1 创建个tomcat目录
                  • 4.2 添加一个文件
                    • 4.3 拷贝相关软件
                      • 4.4 创建Dockerfile文件
                        • 4.5 构建
                          • 4.6 run
                            • 4.7 验证
                              • 4.8 部署web项目
                                • 4.8.1 web.xml文件
                                • 4.8.2 index.jsp文件
                                • 4.8.3 重启容器访问即可
                            相关产品与服务
                            命令行工具
                            腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档