zoukankan      html  css  js  c++  java
  • 尚硅谷Docker笔记(6) DockerFile解析

    一、是什么

    1、Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本

    2、构建三步骤

    编写Dockerfile文件
    
    docker build
    
    docker run
    

    3、文件什么样???

    熟悉的Centos为例
    Snipaste_2020-10-03_17-32-12.png

    二、DockerFile构建过程解析

    1、Dockerfile内容基础知识

    1、每条保留字指令都必须为大写字母且后面要跟随至少一个参数
    2、 指令按照从.上到下,顺序执行
    3、#表示注释
    4、每条指令都会创建一个新的镜像层,并对镜像进行提交

    2、Docker执行Dockerfile的大致流程

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

    小总结

    从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,

    • Dockerfile是软件的原材料
    • Docker镜像是软件的交付品
    • Docker容器则可以认为是软件的运行态。
      Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。

    在这里插入图片描述

    1 Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;

    2 Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时,会真正开始提供服务;

    3 Docker容器,容器是直接提供服务的。

    三、DockerFile体系结构(保留字指令)

    在这里插入图片描述
    在这里插入图片描述
    小总结
    在这里插入图片描述

    四、案例

    1、Base 镜像(scratch)

    Docker Hub中 99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的
    Snipaste_2020-10-03_17-52-43

    2、自定义镜像mycentos

    1、编写

    Hub默认Centos镜像是什么情况
    Snipaste_2020-10-03_17-53-44.png
    准备编写DockerFile文件
    在这里插入图片描述

    myCentOS内容DockerFile
    在这里插入图片描述

    FROM centos
    MAINTAINER zzyy<zzyy167@126.com>
     
    ENV MYPATH /usr/local
    WORKDIR $MYPATH
     
    RUN yum -y install vim
    RUN yum -y install net-tools
     
    EXPOSE 80
     
    CMD echo $MYPATH
    CMD echo "success--------------ok"
    CMD /bin/bash
    

    2、构建

    docker build -t 新镜像名字:TAG .
    Snipaste_2020-10-03_17-56-15.png

    3、运行

    docker run -it 新镜像名字:TAG
    Snipaste_2020-10-03_17-57-09.png

    4、列出镜像的变更历史

    docker history 镜像名

    3、CMD/ENTRYPOINT 镜像案例

    ①、都是指定一个容器启动时要运行的命令

    ②、CMD

    ​ Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被dockerrun之后的参数替换

    ​ Case

    ​ tomcat的讲解演示 docker run -it -p 8080:8080 tomcat ls -l

    ③、ENTRYPOINT

    ​ docker run 之后的参数会被当做参数传递给 ENTRYPOINT 之后形成新的命令组合

    ​ Case
    2020-10-03_18-02-41
    制作CMD版可以查询IP信息的容器
    Snipaste_2020-10-03_18-03-11.png

    curl的命令解释

    curl命令可以用来执行下载、发送各种HTTP请求,指定HTTP头部等操作。

    如果系统没有curl可以使用yum install curl安装,也可以下载安装。
    curl是将下载文件输出到stdout
    使用命令: curl http://www .baidu.com
    执行后,www.baidu.com的html就会显示在屏幕上了

    这是最简单的使用方法。用这个命令获得了htp://curl.haxx.se指向的页面,同样,如果这里的URL指向的是–个文件或者一幅图都可以直接下载到本地。如果下载的是HTML文档,那么缺省的将只显示文件头部,即HTML文档的header。要全部显示,请加参数-i

    WHY

    我们可以看到可执行文件找不到的报错,executable file not found。
    之前我们说过,跟在镜像名后面的是command,运行时会替换CMD的默认值。
    因此这里的-i替换了原来的CMD,而不是添加在原来的curl -s htp://ip.cn后面。而-i 根本不是命令,所以自然找不到。
    那么如果我们希望加入-i这参数,我们就必须重新完整的输入这个命令:
    $ docker run myip curl -s http://ip.cn -i
    Snipaste_2020-10-03_18-05-28.png

    4、自定义镜像Tomcat

    1、mkdir -p /zzyy/mydockerfile/tomcat9
    2、在上述目录下 touch c.txt
    3、将jdk和tomcat安装的压缩包拷贝进上一步目录

    apache-tomcat-9.0.8.tar.gz
    在这里插入图片描述
    jdk-8u171-linux-x64.tar.gz
    在这里插入图片描述

    4、在zzyyuse/mydockerfile/tomcat9目录下新建Dockerfile文件
    FROM         centos
    MAINTAINER    zzyy<zzyybs@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/logs/catalina.out
    

    目录内容
    在这里插入图片描述

    5、构建

    在这里插入图片描述
    构建完成
    在这里插入图片描述

    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 zzyytomcat9
    

    在这里插入图片描述
    备注

    Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied
    解决办法:在挂载目录后多加一个–privileged=true参数即可

    7、验证

    在这里插入图片描述

    8、综合前述容器卷测试的web服务test发布

    总体概述
    Snipaste_2020-10-03_18-58-56.pn
    web.xml

    <?xml version="1 .0" encoding="UTF-8"?>
    <web-app xmIns:xsi="http://www.w3.org/2001/XML Schema-instance"
    xmIns="http://java sun.com/xm/ns/javaee"
    xsi:schemaL ocation="http://java. sun.com/xml/ns/javaee htp:/:/java. sun.com/xml/ns/javaee/web-app_ 2_ _5.xsd"
    id="WebApp_ ID" version="2.5">
    <display-name>test</display-name>
    
    </web-app>
    

    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>
    

    测试
    在这里插入图片描述

    五、小总结

    在这里插入图片描述

    艾欧尼亚,昂扬不灭,为了更美好的明天而战(#^.^#)
  • 相关阅读:
    消息中间件(一)MQ详解及四大MQ比较
    SIP协议
    PAT (Basic Level) Practice 1008 数组元素循环右移问题
    LeetCode-Algorithms 1. 两数之和
    PAT (Basic Level) Practice 1040 有几个PAT
    PAT (Basic Level) Practice 1023 组个最小数
    PAT (Basic Level) Practice 1021 个位数统计
    PAT (Basic Level) Practice 1007 素数对猜想
    PAT (Basic Level) Practice 1006 换个格式输出整数
    PAT (Basic Level) Practice 1004 成绩排名
  • 原文地址:https://www.cnblogs.com/lovelywcc/p/15795493.html
Copyright © 2011-2022 走看看