首页 > 其他分享 >Dockerfile命令详解之 RUN(一)

Dockerfile命令详解之 RUN(一)

时间:2023-02-25 17:31:36浏览次数:36  
标签:bin RUN cache sh apk 详解 指令 Dockerfile


 语法

#  该命令以shell形式运行,Linux默认为/bin/sh -c, Windows默认为cmd /S /C
RUN <command>

Dockerfile命令详解之 RUN(一)_java

 或者

# exec格式,由于exec格式会被解析成为json数组,所以,必须使用双引号
RUN ["executable", "param1", "param2"]

Dockerfile命令详解之 RUN(一)_java_02

        使用RUN指令都会在当前镜像最顶层生成新的层,并提交到执行结果。Dockerfile中的后续步骤可以使用提交的结果。由于每次使用RUN指令都会生成新的层,所以建议多个Shell在同一个RUN指令中声明。例如:

Dockerfile

FROM alpine

# 由于RUN指令在liunx平台上默认以shell命令执行,所以可以省略/bin/sh -c
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add --no-cache tini tzdata ttf-dejavu fontconfig

Dockerfile命令详解之 RUN(一)_java_03

        两个RUN指令会生成两个新层 (RootFS中显示由三个层级是因为其中有一个层级FROM引入的基础层)

Dockerfile命令详解之 RUN(一)_java_04


Dockerfile命令详解之 RUN(一)_java_05


          再次构建的时候,就会直接从cache中获取

Dockerfile命令详解之 RUN(一)_java_06


         由于每次使用ADD、COPY、RUN指令都会生成新的层,会导致层数过多,镜像文件增大,所以上面的RUN指令,我们可以合并为一条,其中 \ 为换行符,多个shell命令之间用 && 连接

FROM alpine

# 由于RUN指令在liunx平台上默认以shell命令执行,所以可以省略/bin/sh -c
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk add --no-cache tini tzdata ttf-dejavu fontconfig

# 上面的语句等同于
RUN /bin/sh -c "sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk add --no-cache tini tzdata ttf-dejavu fontconfig"

Dockerfile命令详解之 RUN(一)_java_07

 这样我们可以看到总层数由原来的三层变为了两层

Dockerfile命令详解之 RUN(一)_java_08


Dockerfile命令详解之 RUN(一)_java_09


         如果我们使用第二种命令格式,上面的Dockerfile我们可以写成:

FROM alpine
RUN ["/bin/sh","-c","sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk add --no-cache tini tzdata ttf-dejavu fontconfig"]

Dockerfile命令详解之 RUN(一)_java_10

        如果容器是以windows平台作为基础镜像,我们可以使用第二种命令格式,执行exe文件。

# 由于exec命令方式最终会解析成json格式,所以我们要将反斜杠转义
# 在windows的路径中经常出现反斜杠,这时候我们需要使用双反斜杠进行转义,否则可能出现意料之外的问题
RUN ["c:\\windows\\system32\\tasklist.exe"]

Dockerfile命令详解之 RUN(一)_java_11



标签:bin,RUN,cache,sh,apk,详解,指令,Dockerfile
From: https://blog.51cto.com/gugu/6085630

相关文章

  • 实现docker run命令
    基于宿主机来创建容器执行命令《自己动手写Docker》code-3.1./mydockerrun-ti/bin/bash代码流程1.解析参数。2.通过clone来fork一个Namespace隔离的容器进程。3.......
  • java security 详解_Spring Security入门教程
    SpringSecurity的简单使用简介SSM整合Security是比较麻烦的,虽然Security的功能比Shiro强大,相反却没有Shiro的使用量多SpringBoot出现后简化了Spring系列的配置......
  • 详解Apache Sentry->Ranger平滑升级方案
    摘要:本文主要探讨如何平滑解决sentry到ranger升级过程中的权限迁移问题。本文分享自华为云社区《【平滑上云】ApacheSentry->Ranger平滑升级方案》,作者:啊喔YeYe。背景......
  • Android 基础知识4-2.10 GridLayout(网格布局)详解
    一、GridLayout(网格布局)概述        GridLayout布局是Android4.0以后引入的新布局,和TableLayout(表格布局)有点类似,不过它功能更多,也更加好用,最大的特点是放......
  • Android 基础知识4-2.9 FrameLayout(帧布局)详解
    一、FrameLayout(帧布局)概述        FrameLayout又称作帧布局,它相比于LinearLayout和RelativeLayout要简单很多,因为它的应用场景也少了很多。这种布局没有方便的定位......
  • Android 基础知识4-3.1 TextView(文本框)详解
    一、前言    TextView就是一个显示文本标签的控件,就是用来显示文本。可以在代码或者XML中设置字体,字体大小,字体颜色,字体样式(加粗级斜体),文字截断(比如:只显示10个字,......
  • HelloWorld详解
    HelloWorld详解随便新建一个文件夹,存放代码新建一个Java文件文件后缀名为.javaHello.java【注意点】系统可能没有显示文件后缀名,我们需要手动打开......
  • 澳门服务器这么少优缺点详解
         最近有不少网友咨询澳门服务器,澳门服务器属于比较冷门的服务器,虽然和香港服务器一样不需要备案,但国内很多IDO不提供澳门服务器租用,这是为什么呢?这里给大家介......
  • 【数据结构入门】顺序表(SeqList)详解(初始化、增、删、查、改)
    顺序表我们采用将函数声明放到SeqList.h里面,函数的实现放到SeqList.c里面,test.c调用函数实现。线性表线性表(linearlist)是n个具有相同特性的数据元素的有限序列。线性表是......
  • 最易懂的Prometheus告警原理详解
    通俗易懂的一篇文章,主要介绍了Prometheus什么时候告警,什么时候不会告警。同时介绍了Prometheus告警原理。 警报是监控系统中必不可少的一块,当然了,也是最难......