• dockerfile解析


    dockerfile是用来构建docker镜像的构建文件,由一系列命令和参数构成

    docker语法

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

    docker执行dockerfile的流程

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

    dockerfile保留字指令

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

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

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

    EXPOSE:容器对外暴露的端口

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

    ENV:用来构建镜像过程中设置变量

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

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

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

    CMD:指定一个容器启动时要运行的命令,可以有多个CMD,但只有最后一个生效,CMD会被docker run之后的参数替换

    ENTRYPOINT:指定一个容器启动时要运行的命令,docker run之后的参数会追加到ENTRYPOINT命令上

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

    举例

    阿里云下载的centos镜像,工作目录为/,没有安装ifconfig

     

    在/docker目录下,准备jdk和tomcat源码包

    创建一个a.txt文件,两个空目录

    编写dockerfile文件

    WORKDIR $MYPATH

     

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

    RUN yum -y install net-tools

     

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

    ADD jdk-8u251-linux-x64.tar.gz /usr/local/

    ADD apache-tomcat-7.0.104.tar.gz /usr/local/

     

    #配置java与tomcat环境变量

    ENV JAVA_HOME /usr/local/jdk1.8.0_251

    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    ENV CATALINA_HOME /usr/local/apache-tomcat-7.0.104

    ENV CATALINA_BASE /usr/local/apache-tomcat-7.0.104

    ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

     

    #COPY:拷贝文件和目录到镜像中

    COPY a.txt /usr/local/cincontainer.txt

     

    #EXPOSE 容器对外暴露的端口

    EXPOSE 8080

     

    #CMD:指定一个容器启动时要运行的命令

    CMD /usr/local/apache-tomcat-7.0.104/bin/startup.sh && tail -F /usr/local/apache-tomcat-7.0.104/bin/logs/catalina.out

     

     

    dockerfile如下:

    根据dockerfile构建镜像

    [root@localhost docker]# docker build -f /docker/dockerfile -t tomcat:myself .

    [root@localhost docker]# docker images 查看已生成的镜像

    [root@localhost docker]# docker history 4a62900fa1ef 查看镜像历史

    运行镜像并查看

    docker run -d -p 8888:8080 --name mytomcat

    -v /docker/test/:/usr/local/apache-tomcat-7.0.104/webapps/test

    -v /docker/tomcatlogs/:/usr/local/apache-tomcat-7.0.104/logs tomcat:myself

     

     

    验证:    

    1、端口映射正确,服务可以访问

    2、登录进容器,工作目录为/usr/lcoal

    3、验证ifconfig

    4、ADD与copy添加的文件

    5、容器卷共享

    在宿主机/docker/test下写入一个文件

    [root@localhost docker]# echo "hello world" >test/hello.html

    宿主机浏览器访问

    log目录的共享验证

  • 相关阅读:
    linux常用命令之--用户与用户组管理命令
    linux常用命令之--文本编辑和文本内容查看命令
    linux常用命令之--目录与文件的操作命令
    linux的文件属性介绍、目录及路径表示方法
    scalatest的userguide
    SBT的用法
    性能工具列表
    ruby不能识别中文的一个坑
    基于Calabash-andriod的UI自动化测试(1)-环境和原理
    scala速成记录1
  • 原文地址:https://www.cnblogs.com/jeancheng/p/13222445.html
Copyright © 2020-2023  润新知