Dockerfile

Dockerfile

1、Dockerfile内容基础知识

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

2、docker执行Dockerfile的大致流程

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

3、Dockerfile常用保留字指令

  1. FROM
  • 基础镜像,当前镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是FROM
  1. MAINTAINER
  • 镜像维护者的姓名和邮箱地址
  1. RUN
  • 构建容器时需要运行的命令
  • 两种格式
    • shell格式
    • exec格式
  • RUN是在docker build时运行
  1. EXPOSE
  • 当前容器对外暴露出的端口
  1. WORKDIR
  • 指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
  1. USER
  • 指定该镜像以什么样的用户去执行,如果都不指定,默认是root
  1. ENV
  • 用来在构建镜像过程中设置环境变量
  1. ADD
  • 将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar包
  1. COPY
  • 类似ADD,拷贝文件和目录到镜像中
  • 将从构建上下文目录中<源路径>的文件/目录复制到新的一层镜像内的<目标路径>位置
    • COPY src dest
    • COPY ["src","dest"]
    • <src源路径>:源文件或者源目录
    • <dest目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建
  1. VOLUME
  • 容器数据卷,用于数据保存和持久化工作
  1. CMD
    • 指定容器启动后要干的事
    • 注意
      1. Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run 之后的参数替换
      2. 参考官网Tomcat的Dockerfile演示讲解
    • 他和前面RUN命令的区别
      1. CMD是在docker run时运行
      2. RUN是在docker build 时运行
  2. ENTRYPOINT
    • 也是用于指定一个容器启动时要运行的命令
    • 类似于CMD指令,但是ENTRYPOINT不会被docker run后面的指令覆盖,而且这些命令行参数会被当做参数送给ENTRYPOINT指令指定的程序

4、编写一个具备vim+ifconfig+jdk8的Centos7镜像

  1. 去官网下载jdk-8u351-linux-x64.tar.gz
  1. 将下载的jdk-8u351-linux-x64.tar.gz传到自己创建的/myfile文件夹中
  • mkdir /myfile
  1. vi Dockerfile
  • FROM centos:7.6.1810
    MAINTAINER zzyy<zzyybs@126.com>

    ENV MYPATH /usr/local
    WORKDIR $MYPATH

    #安装vim编辑器
    RUN yum -y install vim
    #安装ifconfig命令查看网络IP
    RUN yum -y install net-tools
    #安装java8及lib库
    RUN yum -y install glibc.i686
    RUN mkdir /usr/local/java
    #ADD 是相对路径jar,把jdk-8u351-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
    ADD jdk-8u351-linux-x64.tar.gz /usr/local/java/
    #配置java环境变量
    ENV JAVA_HOME /usr/local/java/jdk1.8.0_351
    ENV JRE_HOME $JAVA_HOME/jre
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
    ENV PATH $JAVA_HOME/bin:$PATH

    EXPOSE 80

    CMD echo $MYPATH
    CMD echo "success--------------ok"
    CMD /bin/bash
  • 注意:由于最新版centos的什么vim还是啥的源路径改了,所以不能用FROM centos。这里用的是FROM centos:7.6.1810
  1. 构建
    • docker build -t 新镜像名字:TAG .
    • 注意TAG后面有个空格,空格后面有个点
  2. 运行
  • docker run -it 新镜像名字:TAG
  1. 虚悬镜像
  • 是什么
    • 仓库名、标签都是的镜像,dangling image
    • Dockerfile写一个
    • mkdir test
      cd test/

      vi Dockerfile

      FROM ubuntu
      CMD echo 'action is success'

      docker build .
  • 查看
    • docker image ls -f dangling=true
    • 命令结果
    • 删除
    • docker image prune

posted @   枫叶红时  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· spring官宣接入deepseek,真的太香了~
点击右上角即可分享
微信分享提示