深入理解Dockerfile:构建镜像的详细解释与常用命令

这篇具有很好参考价值的文章主要介绍了深入理解Dockerfile:构建镜像的详细解释与常用命令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 

目录

1.Dockerfile 简介

2.Dockerfile 指令解析

2.1 FROM

2.2 RUN

2.3 COPY

2.4 ADD

2.5 CMD

2.6 ENTRYPOINT

2.7 ENV

2.8 ARG

2.9 EXPOSE

2.10 WORKDIR

2.11 VOLUME

2.12 USER

3.构建 Docker 镜像的常用命令

3.1 docker build

3.2 docker tag

3.3 docker push

3.4 docker pull

3.5 docker run

3.6 实例:构建自定义镜像

 步骤 1:创建一个名为 Dockerfile 的文件。

 步骤 2:在 Dockerfile 所在的目录中执行以下命令以构建镜像。

步骤 3:运行以下命令以创建并启动容器。


 文章来源地址https://www.toymoban.com/news/detail-532809.html

Docker 是一种流行的容器化平台,可将应用程序和其依赖项打包到一个独立的、可移植的容器中。Dockerfile 是构建 Docker 镜像的文本文件,它包含了一系列的指令和配置,用于定义镜像的构建过程。本文将深入解释 Dockerfile 的工作原理,并介绍常用的 Dockerfile 指令和构建命令,以帮助读者更好地理解和使用 Docker。

1.Dockerfile 简介

Dockerfile 是一个文本文件,其中包含了一系列的指令和配置,用于自动化地构建 Docker 镜像。通过定义 Dockerfile,我们可以指定基础镜像、安装软件、复制文件、设置环境变量等一系列操作,以创建一个完整的容器化应用环境。

2.Dockerfile 指令解析

下面是一些常见的 Dockerfile 指令的解释和示例用法:

2.1 FROM

FROM 指令用于指定基础镜像。一个 Dockerfile 可以以 FROM 指令开始,以引入一个基础镜像作为构建环境的起点。示例:

FROM ubuntu:18.04

该指令从 Docker Hub 上拉取一个名为 "ubuntu" 的镜像,并指定标签为 "18.04"。

2.2 RUN

RUN 指令用于在镜像中执行命令。可以使用该指令安装软件包、执行编译操作等。示例:

RUN apt-get update && apt-get install -y curl

该指令更新 apt 包管理工具的软件包列表,并安装 curl 软件包。

2.3 COPY

COPY 指令用于将文件或目录从构建环境复制到镜像中。示例:

COPY app.py /app/

该指令将构建环境中的 app.py 文件复制到镜像中的 /app/ 目录下。

2.4 ADD

ADD 指令类似于 COPY 指令,但它支持更多功能,如自动解压缩压缩包等。尽量使用 COPY 指令,除非确实需要 ADD 的高级功能。示例:

ADD archive.tar.gz /data/

该指令将构建环境中的 archive.tar.gz 压缩包复制到镜像中的 /data/ 目录下,并自动解压缩。

2.5 CMD

CMD 指令用于指定容器启动时默认执行的命令。一个 Dockerfile 中只能存在一个 CMD 指令。示例:

CMD ["python", "app.py"]

该指令在容器启动时执行 python app.py 命令。

类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

  • CMD 在docker run 时运行。
  • RUN 是在 docker build。

作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。

注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。

2.6 ENTRYPOINT

ENTRYPOINT 指令类似于 CMD 指令,但它不会被 docker run 命令行中的参数覆盖。示例:

ENTRYPOINT ["python"] CMD ["app.py"]

该指令将 python 设置为容器的默认执行命令,并且可以通过 docker run 的参数指定要执行的 app.py 文件。

类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。

但是, 如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 ENTRYPOINT 指令指定的程序。

优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。

注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

可以搭配 CMD 命令使用:一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参,以下示例会提到。

示例:

假设已通过 Dockerfile 构建了 nginx:test 镜像:

FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参 

1、不传参运行

docker run  nginx:test

容器内会默认运行以下命令,启动主进程。

nginx -c /etc/nginx/nginx.conf

2、传参运行

docker run  nginx:test -c /etc/nginx/new.conf

容器内会默认运行以下命令,启动主进程(/etc/nginx/new.conf:假设容器内已有此文件)

nginx -c /etc/nginx/new.conf

2.7 ENV

ENV 指令用于设置环境变量。可以在 Dockerfile 中使用这些环境变量,并且它们会传递到容器运行时环境。示例:

ENV APP_HOME /app WORKDIR $APP_HOME

该指令设置一个名为 APP_HOME 的环境变量,并将其值设为 /app。接下来的 WORKDIR 指令将工作目录切换到环境变量 $APP_HOME 指定的路径。

2.8 ARG

ARG 指令用于定义构建参数,可以在构建镜像时传递参数。示例:

ARG VERSION RUN echo $VERSION

该指令定义了一个名为 VERSION 的构建参数,并在构建过程中输出其值。

2.9 EXPOSE

EXPOSE 指令用于声明容器运行时监听的端口。示例:

EXPOSE 8080

该指令声明容器将监听主机的 8080 端口。

2.10 WORKDIR

WORKDIR 指令用于设置工作目录。该目录将用作后续指令(如 RUN、CMD)的默认路径。示例:

WORKDIR /app

该指令将工作目录切换到 /app。

2.11 VOLUME

VOLUME 指令用于在镜像中创建一个或多个挂载点,并声明容器可以将这些挂载点暴露给主机或其他容器。示例:

VOLUME /data

该指令在镜像中创建一个名为 /data 的挂载点。

2.12 USER

USER 指令用于指定容器运行时的用户或用户组。示例:

USER nobody

该指令将容器运行时的用户设置为 "nobody"。

3.构建 Docker 镜像的常用命令

以下是一些常用的命令,用于构建、管理和运行 Docker 镜像:

3.1 docker build

docker build 命令用于根据 Dockerfile 构建镜像。示例:

docker build -t myapp:1.0 .

该命令将在当前目录中的 Dockerfile 中构建一个名为 myapp 的镜像,标签为 1.0。

3.2 docker tag

docker tag 命令用于为已构建的镜像添加标签。示例:

docker tag myapp:1.0 myrepo/myapp:latest

该命令将 myapp:1.0 镜像添加一个名为 latest 的标签,并将其命名为 myrepo/myapp。

3.3 docker push

docker push 命令用于将镜像推送到远程仓库。示例:

docker push myrepo/myapp:latest

该命令将 myrepo/myapp 镜像推送到远程仓库。

3.4 docker pull

docker pull 命令用于从远程仓库拉取镜像。示例:

docker pull myrepo/myapp:latest

该命令从远程仓库拉取 myrepo/myapp 镜像。

3.5 docker run

docker run 命令用于创建并启动一个容器。示例:

docker run -d -p 8080:80 myapp:1.0

该命令创建一个名为 myapp 的容器,并将容器的 80 端口映射到主机的 8080 端口。

3.6 实例:构建自定义镜像

下面是一个示例,演示如何使用 Dockerfile 构建自定义镜像:

 步骤 1:创建一个名为 Dockerfile 的文件。

FROM ubuntu:18.04 
RUN apt-get update && apt-get install -y curl 
CMD ["curl", "https://www.example.com"]

 步骤 2:在 Dockerfile 所在的目录中执行以下命令以构建镜像。

docker build -t mycurl .

步骤 3:运行以下命令以创建并启动容器。

docker run mycurl

通过上述步骤,我们创建了一个自定义镜像,其中包含了一个基于 Ubuntu 18.04 的容器,安装了 curl 软件包,并设置容器默认执行的命令为访问 https://www.example.com。

本文介绍了 Dockerfile 的工作原理和常用指令,以及构建 Docker 镜像的常用命令。了解 Dockerfile 的使用和相关命令可以帮助开发人员更好地管理和部署容器化应用程序。通过编写自定义的 Dockerfile,我们可以根据特定需求构建定制化的容器镜像,以满足不同场景的需求。希望本文能够帮助读者深入理解 Dockerfile,并在实践中灵活应用。

深入理解Dockerfile:构建镜像的详细解释与常用命令,Docker,云原生,docke

 

 

 

到了这里,关于深入理解Dockerfile:构建镜像的详细解释与常用命令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Dockerfile构建镜像

    dockerfile是 自定义镜像 的一套规则 dockerfile由多条指令构成,Dockerfile中的每一条指令都会对应于Docker镜像中的每一层 dockerfile的原理就是镜像分层。 Dockerfile 中的 每个指令都会创建一个新的镜像层 (是一个临时的容器,执行完后将不再存在,再往后进行重新的创建与操作)

    2024年02月17日
    浏览(51)
  • Dockerfile构建镜像与实战

    1)联合文件系统(UnionFS) UnionFS(联合文件系统) : Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。AUFS、OberlayFS及Devicemapper都是一种UnionFS。 Union文件系统

    2024年02月08日
    浏览(40)
  • 【docker】dockerfile构建镜像

    Dockerfile 是一个文本文件,文件中包含了一条条的指令(instruction),用于构建镜像。每一条指定构建一层镜像,因此每一条指令的内容,就是描述该层镜像应当如何构建。 1、dockerfile是 自定义镜像 的一套规则 2、dockerfile由多条指令构成,dockerfile的每一条指令都会对应于do

    2024年02月05日
    浏览(60)
  • Dockerfile构建Tomcat镜像(源码)

    目录 Dockerfile构建Tomcat镜像 1、建立工作目录 2、编写Dockerfile文件 3、构建镜像 4、测试容器 5、浏览器访问测试: [root@huyang1 tomcat]# vim Dockerfile 配置如下: [root@huyang1 tomcat]# docker build -t tomcat:new . [root@huyang1 ~]# docker images tomcat:new [root@huyang1 tomcat]# docker run -d -p 8080:8080 --name tomca

    2024年02月14日
    浏览(46)
  • Docker之Dockerfile构建镜像

       🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《Docker之Dockerfile构建镜像》。🎯🎯 🎁如果感觉还不错的话请给我关注加三连吧!🎁🎁         在上一期有关Docker的博客分享中我们学习到了Docker的一

    2024年01月18日
    浏览(61)
  • 【Docker】Dockerfile构建最小镜像

    接下来看看由辉辉所写的关于Docker的相关操作吧 目录 🥳🥳Welcome 的Huihui\\\'s Code World ! !🥳🥳 前言 一.Dockerfile是什么 二.Dockerfile的基本结构 三.基础镜像的选择 四. 自定义镜像 0.jar包的准备 1.jar同级目录下创建Dockerfile文件 2.创建镜像 3.运行镜像 (1)上传jre (2)编辑Dockerdil

    2024年01月17日
    浏览(58)
  • 使用Dockerfile构建nginx镜像

     雨雀:使用Dockerfile构建nginx镜像 · 语雀 (yuque.com)  yaml文件用法:02 Docker三剑客之一-Dockerfile · 语雀 (yuque.com) 1.使用Dockerfile构建nginx镜像 2.编写Dockerfile yaml文件用法:02 Docker三剑客之一-Dockerfile · 语雀 (yuque.com) 3.构建镜像 4.运行镜像   

    2024年02月12日
    浏览(82)
  • dockerfile以alpine为基础镜像构建nginx镜像

    Alpine Linux 是一个社区开发的面向安全应用的轻量级Linux发行版。 Alpine 的意思是“高山的”,它采用了musl libc和busybox以减小系统的体积和运行时资源消耗,同时还提供了自己的包管理工具apk。 由于其小巧、安全、简单以及功能完备的特点,被广泛应用于众多Docker容器中。 a

    2023年04月22日
    浏览(59)
  • Docker-Dockerfile构建镜像

    Dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像,另外,使用 Dockerfile 去构建镜像好比使用 pom 去构建 maven 项目一样,有异曲同工之妙 centos alpine 1. 空间大小差异, alpine 默认 5M 左右, centos 等都在 200M 左右。 2. 默认软件包差异, alpin

    2024年01月17日
    浏览(45)
  • 【云原生 | 15】Dockerfile构建镜像实战

    🍁 博主简介 :         🏅云计算领域优质创作者         🏅2022年CSDN新星计划python赛道第一名         🏅2022年CSDN原力计划优质作者         🏅阿里云ACE认证高级工程师         🏅阿里云开发者社区专家博主 💊 交流社区 :CSDN云计算交流社区欢迎您的

    2024年02月22日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包