• DockerFile系统的学习


    1.背景

    DockerFile定义:用来构建Docker镜像的文件,有脚本命令组成。

    自定义镜像并运行步骤:
    编写dockerFile文件--》docker build为镜像--》docker run 运行镜像
    dockerFile文件模板可以在官网看到:
    https://hub.docker.com/

    2.基本语法介绍

    dockerFile的基础规则
    1.dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。
    2.Docker以从上到下的顺序运行Dockerfile的指令。
    3.以#字符开头则被视为注释。
    4.第一条指令必须是FROM,用来确定基本镜像来源。
    5.每条指令的关键字必须大写,且后面至少要有一个参数
    6.每条指令都会创建一个新的镜像层,并提交镜像产生id

    Docker build执行dockerFile的流程
    1.docker从基础镜(由From 指定)像运行一个容器
    2.由上往下执行指令,并对容器作出修改
    3.修改完成后提交一个新的镜像并返回镜像id
    4.docker再基于刚才的新镜像运行一个新的容器
    5.接着执行下一条指令,重复步骤2、3、4,指导所有指令执行完

    3.dockerFile关键字

    如下讲解,我们以构建一个tomcat镜像为例,说明常用关键字

    3.1.FROM

    作用:指定基础镜像,当前新镜像是基于哪个镜像的。

    案例:FROM centos

    备注:如果没有基础镜像,需要写成 FROM scratch,这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像

    3.2.MAINTAINER

    [maintainer : n.维护者;维护设备;软件维护人员;(律 史)非法帮助诉讼者]

    作用:镜像维护者的姓名和邮箱地址

    案例:MAINTAINER lidongping <851298348@qq.com>

    3.3.RUN

    作用:容器构建时需要运行的命令

    案例:RUN yum -y install vim ,表示安装vim编辑器功能

    3.4.ENV

    作用:定义一个变量,与Java中定义一个常量一样的道理
    案例:ENV WORK_PATH /usr/local

    3.5.WORKDIR

    作用:指定在创建容器后,终端默认登陆进来的工作目录

    案例:WORKDIR $WORK_PATH

    备注:这里使用了上一步的ENV WORK_PATH /usr/local变量,等同于WORKDIR /usr/local

    3.6.COPY

    作用:拷贝文件和目录到镜像中

    案例:COPY  readme.txt  /home

    备注:将当前文件下的readme.txt 拷贝到容器中的centos中的home目录下

    3.7.ADD

    作用:与上面的copy作用一样,拷贝文件和目录到镜像中,只是ADD命令会自动处理URL和解压tar压缩包

    案例:ADD jdk-8u131-linux-x64.tar.gz /usr/local/

    3.8.EXPOSE

    作用:当前容器对外暴露出的端口
    案例:EXPOSE 8080

    3.9.CMD

    作用:指定一个容器启动时要运行的命令。可以有多个CMD指令,但只有最后一个生效,CMD 会被docker run 之后的参数替换;
    案例:CMD ["/usr/local/apache-tomcat-8.5.41/bin/catalina.sh","run"]

    3.10.ENTRYPOINT

    entry point 入口点,进入点

    作用:指定一个容器启动是要运行的命令。ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数,但是ENTRYPOINT不会被docker run 之后的参数替换;
    案例:ENTRYPOINT ["/usr/local/apache-tomcat-8.5.41/bin/startup.sh" ]

    3.11.VOLUME

    volume 体积,容器

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

    案例:VOLUME ["/c-data01", "/c-data02","/更多路径"]

    到此,常用的命令大概就这些,更多的命令大家可以自己查官方文档,使用方式和套路大致是一样的。

    4.实际案例

    本案例以构建一个tomcat镜像为实际案例作为演示

    第一步,准备素材,

    在根路径下建立myTomcat文件夹,并准备如下素材

    构建文件:dockerFileTomcat文件内容如下

    #基础容器来自于centos
    FROM centos
    #设置维护者的邮箱和微信
    MAINTAINER email:lidongping<851298348@qq.com.com>,wechat:851298348
    #安装vim编辑器
    RUN yum -y install vim
    #默认的centos容器时不带ifconfig命令的,安装ip查询工具,即可以使用ifconfig命令
    #RUN yum install net-tools
    #定义一个变量,类似于java中定义一个常量
    ENV WORK_PATH /usr/local
    #设置工作访问时候的WORKDIR路径,即进入容器后的默认工作目录
    WORKDIR $WORK_PATH
    #把宿主机当前上下文的readme.txt拷贝到容器/usr/local/路径下
    COPY readme.txt $WORK_PATH/readme.txt
    #把java与tomcat拷贝到容器并解压
    ADD jdk-8u131-linux-x64.tar.gz $WORK_PATH/
    ADD apache-tomcat-8.5.41.tar.gz $WORK_PATH/
    #配置java、tomcat环境变量
    ENV JAVA_HOME $WORK_PATH/jdk1.8.0_131
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV CATALINA_HOME $WORK_PATH/apache-tomcat-8.5.41
    ENV CATALINA_BASE $WORK_PATH/apache-tomcat-8.5.41
    ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
    #容器运行时监听的端口
    EXPOSE  8080
    #启动tomcat
    CMD ["/usr/local/apache-tomcat-8.5.41/bin/catalina.sh","run"]

     第二步,执行构建镜像命令

    docker build -f /myTomcat/dockerFileTomcat -t lidongping/tomcat01 .

    注意:如果构建文件名称为:Dockerfile,且在当前路径下,可以直接写为:docker build  -t lidongping/tomcat01 .

    第三步, 运行上一步构建的lidongping/tomcat01 镜像

    命令:docker run -d -p 8081:8080 lidongping/tomcat01

     第四步,访问tomcat,看是否正常

     完美!

    系统化学习docker教程:

    https://www.cnblogs.com/newAndHui/p/13508771.html

  • 相关阅读:
    20100920 [随笔] -Roy
    20100826 [随笔] Roy
    20100820随笔Roy
    20100825 [随笔] -Roy
    博客园开博随笔
    Synchronized vs SyncRoot
    Exception vs ApplicationException
    Monitor用法
    捕获ASP.NET程序发生的异常
    理解ParseChildren用法
  • 原文地址:https://www.cnblogs.com/newAndHui/p/13458788.html
Copyright © 2020-2023  润新知