首页 > 其他分享 >​DockerFile简介+镜像构建

​DockerFile简介+镜像构建

时间:2023-09-09 11:34:30浏览次数:36  
标签:RUN HOMEPWD 简介 repo yum ENV 镜像 DockerFile

1)Dockerfile简介

由一系列命令和参数构建成的脚本

构建三步骤

编写Dockerfile文件 ==> docker build(打包为镜像) ==> docker run

1)每条保留字指令都必须为大写字母且后面要跟随至少一个参数。

2)指令按照从上到下的顺序执行

3)#表示注释

4)每条指令都会创建一个新的镜像层,并对镜像进行提交

2)DockerFile保留字指令

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

MAINTAINER # 镜像维护者的姓名

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

EXPOSE #当前容器对外暴露的端口号

WORKDIR #指定在创建容器后,终端默认登录的工作目录

ENV #用来在构建镜像过程中设置环境变量

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

COPY #类似ADD,拷贝文件和目录到镜像中。

VOLUME #创建容器数据卷,用于数据保存和持久化

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

ENTRYPOINT #指定一个容器启动时要运行的命令;ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数。但是ENTRYPOINT不会覆盖参数,而是会追加。

ONBUILD #当构建一个被继承的DockerFile时运行命令,父镜像在被子继承后父镜像的onbuild被触发。

3)使用dockerfile构建镜像

(1)案例一

要求使其具备vim、ifconfig、httpd、更换yum源为阿里云源和jdk8环境

#下载JDK
wget https://mirrors.yangxingzhen.com/jdk/jdk-8u181-linux-x64.tar.gz
#下载yum源
wget https://mirrors.aliyun.com/repo/Centos-8.repo

创建dockefile文件

FROM centos

ENV HOMEPWD /root
WORKDIR  $HOMEPWD    #设置登录目录


RUN rm -rf /etc/yum.repos.d/*  #删除镜像自带的yum源
#RUN curl -o /etc/yum.repos.d/centos8.repo  https://mirrors.aliyun.com/repo/Centos-8.repo
ADD Centos-8.repo  /etc/yum.repos.d/centos8.repo  #将本地下载好的镜像源复制到镜像内
RUN yum clean all       
RUN yum makecache
RUN yum install vim httpd net-tools -y          #使用yum安装软件包


RUN yum install glibc.i686 -y
ADD jdk-8u181-linux-x64.tar.gz /usr/local/java
ENV JAVA_HOME /usr/local/java/jdk1.8.0_181
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

ENTRYPOINT [ "/bin/bash" ]

使用docker build命令打包镜像

docker build -t centosjdk:1.8 .

​DockerFile简介+镜像构建_DockerFile

验证镜像是否拥有封装的功能

docker run -it centosjdk:1.8
验证软件包是否安装成功:

JAVA:

​DockerFile简介+镜像构建_docker_02


VIM:

​DockerFile简介+镜像构建_docker_03

net-tools:

​DockerFile简介+镜像构建_Linux_04

httpd:

​DockerFile简介+镜像构建_DockerFile_05

(2)案例二

注意事项:当DockerFile中存在CMD参数时如果此时启动容器时末尾追加了命令,则会将dockerfile中最后一个CMD命令覆盖掉。

#构建时使用CMD执行命令

FROM centos
MAINTAINER qclr<你的邮箱地址>

ENV HOMEPWD /root
WORKDIR  $HOMEPWD


RUN rm -rf /etc/yum.repos.d/*
RUN curl -o /etc/yum.repos.d/centos8.repo  https://mirrors.aliyun.com/repo/Centos-8.repo
RUN yum clean all
RUN yum makecache
CMD curl  https://ifconfig.io

运行容器时末尾追加命令则会将原本的CMD命令进行覆盖执行

​DockerFile简介+镜像构建_docker_06

使用ENTRYPOINT构建dockerfile文件

FROM centos
MAINTAINER qclr<你的邮箱地址>

ENV HOMEPWD /root
WORKDIR  $HOMEPWD


RUN rm -rf /etc/yum.repos.d/*
RUN curl -o /etc/yum.repos.d/centos8.repo  https://mirrors.aliyun.com/repo/Centos-8.repo
RUN yum clean all
RUN yum makecache
ENTRYPOINT [ "curl","-s","https://ifconfig.io" ]

运行容器时末尾追加命令则会在原本的命令后进行追加执行

​DockerFile简介+镜像构建_DockerFile_07

4)ONBUILD的用法

当构建一个被继承的DockerFile时运行命令,父镜像在被子继承后父镜像的onbuild被触发。

(1)案例

构建一个包含基础软件包的父类镜像,在dockerfile文件中继承该父类镜像触发ONBUILD

#父类dockerfile文件
FROM centos
MAINTAINER qclr<你的邮箱地址>

ENV HOMEPWD /root
WORKDIR  $HOMEPWD

RUN rm -rf /etc/yum.repos.d/*
RUN curl -o /etc/yum.repos.d/centos8.repo  https://mirrors.aliyun.com/repo/Centos-8.repo
RUN yum clean all
RUN yum makecache
RUN yum install vim httpd net-tools openssh-server -y
ENTRYPOINT [ "curl","-s","https://ifconfig.io" ]
ONBUILD RUN echo "this is father------886"



docker build -f dockefileson2 -t my_centos  .

​DockerFile简介+镜像构建_Linux_08

在继承父类镜像后进行打包时会触发ONBUILD参数

FROM my_centos
MAINTAINER qclr<你的邮箱地址>

ENV HOMEPWD /root
WORKDIR  $HOMEPWD

ENTRYPOINT [ "curl","-s","https://ifconfig.io" ]


#继承父类镜像进行重新打包
docker build -f dockerson -t my_son  .

​DockerFile简介+镜像构建_DockerFile_09

4)虚悬镜像

对于仓库和标签都是none的称之为虚悬镜像。

#查询系统中存在的所有虚悬镜像
docker images ls -f dangling=true
#删除所有的虚悬镜像
docker image prune

​DockerFile简介+镜像构建_DockerFile_10


标签:RUN,HOMEPWD,简介,repo,yum,ENV,镜像,DockerFile
From: https://blog.51cto.com/qclr/7418366

相关文章

  • dockerfile entrypoint cmd 同时使用
    CMD与ENTRYPOINT都是用于指定启动容器执行的命令,区别在于:当dockerrun命令中有参数时,守护进程会忽略CMD命令。使用ENTRYPOINT指令不会忽略,并且会接收dockerrun参数附加到命令行中。dockerrun的命令,相当于新加的CMD,会覆盖原有的CMDnginx的镜像就是这样。dockerrun......
  • IDEFICS 简介: 最先进视觉语言模型的开源复现
    引言CodeLlama是为代码类任务而生的一组最先进的、开放的Llama2模型,我们很高兴能将其集成入HuggingFace生态系统!CodeLlama使用与Llama2相同的社区许可证,且可商用。今天,我们很高兴能发布HuggingFace对CodeLlama的全面支持,包括:Hub上的模型支持,包括模型......
  • TOML格式简介
    TOML(Tom'sObvious,MinimalLanguage)是一种用于配置文件的轻量级文本格式,旨在易于阅读和编写。它的设计目标是简单明了,同时也能表达复杂的数据结构。TOML文件通常用于配置应用程序、库或项目的设置。下面是一些TOML的基本概念和语法,以及如何编写TOML文件的示例:基本语法TOML文......
  • c#之Form类简介
    Form是窗口体类命名空间:System.Windows.Forms继承关系:Form类是Control类的子类,因此它继承了Control类的所有特性,如位置、大小、颜色等。同时,Form也继承了ContainerControl类,允许容纳其他控件。创建窗体:使用Form类的构造函数可以创建窗体的实例,例如:FormmyFor......
  • pip国内镜像
    例如:pipinstalltorch==1.8.1-ihttps://mirrors.aliyun.com/pypi/simple/国内镜像:1.1清华大学(完全度和速度都很好,是一个优秀的pip镜像源)https://pypi.tuna.tsinghua.edu.cn/simple1.2阿里云(完全度和速度也很好,是一个不错的选择)https://mirrors.aliyun.com/pypi/simple/1.3......
  • SQL注入简介
    SQL注入(SQLInjection)是一种计算机安全漏洞,它允许攻击者通过操纵应用程序的输入来执行恶意的SQL查询,从而访问、修改或删除数据库中的数据。这种攻击通常发生在应用程序未正确验证、过滤或转义用户输入的情况下。以下是一个SQL注入的简单示例:假设有一个基于Web的应用程序,用于验证......
  • Android入门教程 | res资源目录简介与shape的绘制和使用
    res资源目录简介简单介绍Android工程中的资源目录(resources),res。Android里的资源指的是什么?资源是指代码使用的附加文件和静态内容,例如位图、布局定义、界面字符串、动画说明等。把资源放进对应的目录后,可使用在项目R类中生成的资源ID来访问这些资源。形如R.drawable.icon,R.la......
  • macOS Ventura 13.5.2 (22G91) Boot ISO 原版可引导镜像下载 (修复零日漏洞)
    macOSVentura13.5.2(22G91)BootISO原版可引导镜像下载(修复零日漏洞)2023年9月7日(北京时间8日凌晨)macOSVentura13.5.2(22G91)发布,此次为安全更新,主要修复了零日漏洞CVE-2023-41064CVE-2023-41061。这些漏洞修复的更新也包含在同日发布的iOS16.6.1、iPadOS......
  • 安装docker 镜像之后 进入镜像下载报错
    在学习使用docker技术过程中,基于centos镜像自定义新的镜像,其中基础镜像centos需要提前安装好vim和net-tools,然而在刚开始通过yum-yinstallvim安装vim时,便出现了错误提示信息:Error:Failedtodownloadmetadataforrepo'appstream':Cannotprepareinternalm......
  • Rust项目使用Dockerfile构建镜像 访问crates.io下载速度慢解决
    在$CARGO_HOME/config文件添加国内的镜像源下面的镜像源来自:https://rsproxy.cn/FROMrust:1.72asbuilderWORKDIR/usr/srcCOPY..RUNecho"[source.crates-io]\n\replace-with='rsproxy-sparse'\n\[source.rsproxy]\n\registry=\"https://rs......