• Docker:DockerFile(DockerFile解析)


    1、DockerFile

    (1)基础

    每一条保留字指令都必须为大写字母且后面要跟随至少一个参数

    注释用#

    每一条指令都会创建一个新的镜像,并对镜像进行提交

    (2)Docker执行DockerFile的大致流程

    • docker从基础镜像运行一个容器
    • 执行一条指令并对容器作出修改
    • 执行类似docker commit的操作提交一个新的镜像层
    • docker再基于刚提交的镜像运行一个新容器
    • 执行dockerfile中的下一条指令直到所有指令都执行完成

    Dockerfile是软件的原材料,Docker镜像是软件的交付品,Docker容器则可以认为是软件的运行态。

    2、DockerFile的保留字指令

    可以进入:https://hub.docker.com/搜索相应的镜像并查看DockerFile

    FROM:基础镜像,当前新的镜像是基于哪一个镜像的

    如tomcat:FROM adoptopenjdk:8-jdk-openj9

    MAINTAINER:镜像的作者和作者的邮箱

    RUN:容器构建的时候需要运行的命令

    ENV CATALINA_HOME /usr/local/tomcat
    ENV PATH $CATALINA_HOME/bin:$PATH
    RUN mkdir -p "$CATALINA_HOME"
    WORKDIR $CATALINA_HOME

    EXPOSE:当前容器对外暴露的端口

    EXPOSE 8080

    WORKDIR:登录到容器后进入的目录

    RUN mkdir -p "$CATALINA_HOME"
    WORKDIR $CATALINA_HOME

    ENV:用来在构建镜像的过程中设置环境变量

    # see https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/KEYS
    # see also "update.sh" (https://github.com/docker-library/tomcat/blob/master/update.sh)
    ENV GPG_KEYS A9C5DF4D22E99998D9875A5110C01C5A2F6059E7
    
    ENV TOMCAT_MAJOR 10
    ENV TOMCAT_VERSION 10.0.0-M9
    ENV TOMCAT_SHA512 547ae280792b8684d11154f678584d0c4eb5af645cc8145e04da6de6d115b7bca03122191e6447cdb3497b85357181ca3fd9716d8a2dbc86461cf28f3df3ee91

    ADD:将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包

    COPY:类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置

    VOLUME:容器数据卷,用于数据保存和持久化工作

    CMD:指定一个容器启动的时候要运行的命令,可以有多个但是只有最后一个生效

    ENTRYPOINT:指定一个容器启动的时候要运行的命令,和CMD一样都是指定容器启动程序及参数,只追加不会替换

    ONBUILD:当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

    3、案例(自定义Tomcat)

    (1)创建目录

    mkdir -p /mydockerfile/tomcat9

    (2)进入目录并创建一个文件

    [root@aubin /]# cd  /mydockerfile/tomcat9
    [root@aubin tomcat9]# touch c.txt

    (3)将JDK和tomcat安装的压缩包拷贝到上一步的目录

    (4)在上面的目录新建DockerFile文件

    FROM         centos
    MAINTAINER    liu<liu@126.com>
    #把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下并重命名
    COPY c.txt /usr/local/cincontainer.txt
    #把java与tomcat添加到容器中
    ADD jdk-8u171-linux-x64.tar.gz /usr/local/
    ADD apache-tomcat-9.0.8.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_171
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8
    ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8
    ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
    #容器运行时监听的端口
    EXPOSE  8080
    #启动时运行tomcat
    # ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh" ]
    # CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"]
    CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.8/bin

    (5)构建

    docker build -f [dockerfile文件] -t [新镜像名字]

    (6)run

    docker run -d -p 9080:8080 
    --name myt9 
    -v /zzyyuse/mydockerfile/tomcat9/test:/usr/local/apache-tomcat-9.0.8/webapps/test 
    -v /zzyyuse/mydockerfile/tomcat9/tomcat9logs/:/usr/local/apache-tomcat-9.0.8/logs --privileged=true

    只要在主机的test目录中发布内容就自动会在webapps的test目录中发布内容(容器卷)

    (7)登录端口验证

    (8)发布程序

    创建一个工程目录,在目录中创建WEB-INF目录,在该目录中创建web.xml文件

    [root@aubin /]# mkdir test
    [root@aubin /]# mkdir WEB-INF
    [root@aubin /]# cd WEB-INF
    [root@aubin WEB-INF]# vi web.xml

    在web.xml文件中书写配置:

    <?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>

    在WEB-INF目录下创建a.jsp文件并写入如下的内容

    <%@ 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>
    每个人都会有一段异常艰难的时光 。 生活的压力 , 工作的失意 , 学业的压力。 爱的惶惶不可终日。 挺过来的 ,人生就会豁然开朗。 挺不过来的 ,时间也会教你 ,怎么与它们握手言和 ,所以不必害怕的。 ——杨绛
  • 相关阅读:
    Android中开发习惯
    Activity、Window和View三者间的关系有一定的见解
    Android底层有一定的认识,研究过相关的Android源码
    安卓工程的启动过程
    OAuth2认证有一定的了解
    屏幕适配经验
    NOIP模拟赛14
    NOIP模拟赛13
    NOIP模拟赛12
    NOIP模拟赛11
  • 原文地址:https://www.cnblogs.com/zhai1997/p/13865577.html
Copyright © 2020-2023  润新知