【Docker】如何编写Dockerfile,深入理解 Dockerfile:构建精简且高效的容器镜像

这篇具有很好参考价值的文章主要介绍了【Docker】如何编写Dockerfile,深入理解 Dockerfile:构建精简且高效的容器镜像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Docker 是一种轻量级的容器化技术,使得应用程序和它们的依赖可以被打包到一个容器中,方便在不同环境中运行。Dockerfile 是用于定义 Docker 镜像的文本文件,其中包含了一系列的指令,这些指令描述了镜像中应该包含哪些内容和如何配置。

【Docker】如何编写Dockerfile,深入理解 Dockerfile:构建精简且高效的容器镜像,Docker,docker,容器,镜像,构建Dockerfile

1. 准备工作

在开始编写 Dockerfile 之前,确保你已经在系统中安装了 Docker。你可以从 Docker 官方网站 获取安装步骤,或者阅读这里:https://blog.csdn.net/x1131230123/article/details/118032295。

2. 创建 Dockerfile

首先,创建一个空的目录用于存放 Dockerfile 和相关文件。在该目录下创建一个文本文件并命名为 Dockerfile

3. 编写基本结构

一个简单的 Dockerfile 通常包含以下基本结构:

# 使用基础镜像
FROM base_image:tag

# 维护者信息
MAINTAINER your_name

# 设置工作目录
WORKDIR /app

# 复制本地文件到容器中
COPY ./local_files /app

# 安装依赖
RUN apt-get update && apt-get install -y dependency_package

# 暴露端口
EXPOSE 8080

# 定义启动命令
CMD ["command_to_run"]

以上是一个简单的 Dockerfile,接下来我们逐步介绍每个指令的作用。

4. 指令详解

FROM

FROM 指令用于指定基础镜像,即你的应用程序将在其基础上构建。可以选择官方镜像,也可以选择其他已有的镜像。例如:

FROM ubuntu:20.04

MAINTAINER

MAINTAINER 指令用于设置维护者的信息。

MAINTAINER Your Name <your.email@example.com>

WORKDIR

WORKDIR 指令用于设置工作目录,即在容器中执行后续指令时的工作目录。

WORKDIR /app

COPY

COPY 指令用于将本地文件复制到容器中。可以复制单个文件,也可以复制整个目录。

COPY ./local_files /app

RUN

RUN 指令用于在镜像中执行命令,例如安装依赖。

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

EXPOSE

EXPOSE 指令用于声明容器运行时将监听的端口。这只是一个元数据,实际运行时需要使用 -p 选项映射端口。

EXPOSE 8080

CMD

CMD 指令用于定义容器启动时执行的默认命令。

CMD ["command_to_run"]

5. 实战演练

接下来,我们通过一个简单的 Node.js 应用演示如何编写 Dockerfile。

FROM node:14

WORKDIR /app

COPY package.json package-lock.json /app/

RUN npm install

COPY . /app/

EXPOSE 3000

CMD ["npm", "start"]

在上述示例中,我们使用 Node.js 的官方镜像作为基础镜像,设置工作目录,复制 package.jsonpackage-lock.json 安装依赖,复制所有文件到工作目录,声明监听端口为 3000,并定义启动命令为 npm start

6. 构建镜像和运行容器

保存好 Dockerfile 后,可以使用以下命令构建镜像。在Docker中,docker build -t my-node-app . 中的小数点代表当前上下文的路径。这个路径是构建过程中 Docker 引擎查找 Dockerfile 和其他构建上下文的文件的位置。

具体来说,docker build 命令会将指定的路径(这里是小数点 .)作为构建上下文。构建上下文是构建过程中用来查找 Dockerfile 和其他构建文件的目录。在这个例子中,. 表示当前目录,即你运行 docker build 命令的目录。

当你运行 docker build -t my-node-app . 时,Docker 引擎会在当前目录下寻找 Dockerfile 文件,并将该目录及其所有内容作为构建上下文。这样,Dockerfile 就能够引用当前目录中的文件,并将它们添加到 Docker 镜像中。在给定目录之外的文件是不能通过Docker指令操作的,比如想用COPY去拷贝别的目录的文件到镜像中。

docker build -t my-node-app .

然后,可以运行容器:

docker run -p 3000:3000 my-node-app

现在,你的 Node.js 应用将在 Docker 容器中运行,并可以通过 http://localhost:3000 访问。

CMD 和 ENTRYPOINT 之间的区别

CMD 指令

CMD 指令用于定义容器启动时执行的默认命令。它有以下几种形式:

  1. CMD [“executable”,“param1”,“param2”] (exec 格式,推荐): 在指定的可执行文件内运行参数。

    CMD ["npm", "start"]
    
  2. CMD [“param1”,“param2”] (作为 ENTRYPOINT 的默认参数): 提供给 ENTRYPOINT 指令的默认参数。

    CMD ["npm", "start"]
    
  3. CMD command param1 param2 (shell 格式): 在 /bin/sh -c 中执行命令。

    CMD npm start
    

CMD 的主要作用是为容器提供默认的执行命令,但可以被在运行容器时指定的命令覆盖。

ENTRYPOINT 指令

ENTRYPOINT 指令用于配置容器启动时执行的默认可执行文件。它有以下几种形式:

  1. ENTRYPOINT [“executable”, “param1”, “param2”] (exec 格式,推荐): 在指定的可执行文件内运行参数。

    ENTRYPOINT ["npm", "start"]
    
  2. ENTRYPOINT command param1 param2 (shell 格式): 在 /bin/sh -c 中执行命令。

    ENTRYPOINT npm start
    

使用 ENTRYPOINT 的主要目的是将容器配置为像可执行程序一样运行。它的参数可以被 CMD 覆盖,但不会被完全替代。如果给 docker run 提供了参数,它们将追加到 ENTRYPOINT 的参数之后。

区别总结

  • CMD 提供容器默认的执行命令,可以被运行容器时传入的命令覆盖。
  • ENTRYPOINT 配置容器启动时执行的默认可执行文件,可以被运行容器时传入的命令追加到其参数之后。

综合来说,CMD 通常用于提供应用的默认启动命令,而 ENTRYPOINT 通常用于配置容器以类似可执行程序的方式运行。你也可以同时使用它们,以 ENTRYPOINT 提供基础执行文件,而 CMD 提供默认参数。文章来源地址https://www.toymoban.com/news/detail-821031.html

到了这里,关于【Docker】如何编写Dockerfile,深入理解 Dockerfile:构建精简且高效的容器镜像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【编写DockerFile构建自己的容器】

    一、创建自己的CentOS (1)、编写自己的配置文件 (2)、生成目标镜像 docker build -f /home/dockerfile1/docker-centos -t docker-centos:1.0 . 命令: docker build -f 文件路径 -t 镜像名:【Tag】 (3)、测试运行 系统的原生镜像 我们制作的镜像 (4)、查看docker的构建流程 docker history eeb6ee3f44

    2024年02月16日
    浏览(34)
  • 如何在 Linux 命令行下玩转 Docker——如何使用 Dockerfile 来构建和运行容器镜像

    作者:禅与计算机程序设计艺术 Docker 是一款开源的容器化技术,它利用 Linux 内核的容器特性,将应用部署到独立的进程环境中。基于容器技术可以极大地提高开发者和运维人员的效率,降低部署、测试和生产环节中的成本,有效地实现云计算资源的弹性伸缩。 本文主要介绍

    2024年02月07日
    浏览(45)
  • 编写.NET Dockerfile文件构建镜像

    创建一个WebApi项目,并且创建一个Dockerfile空文件,添加以下代码,7.0代表的你项目使用的SDK的版本,构建的时候也需要选择好指定的镜像tag 我们一步一步来进行讲解,首先第一步,FROM指定了一个mcr.microsoft.com/dotnet/aspnet:7.0镜像,并且AS别名base,这一步是选择aspnet:7.0作为基础

    2024年01月23日
    浏览(40)
  • 【Docker】docker入门之dockerfile编写

    嗨喽,大家好。本篇文章主要记录博主在学习docker以及编写dockerfile的过程,记录使用docker过程中遇到的问题。 Docker 是一种开源的容器化平台,用于构建、部署和运行应用程序。它提供了一种轻量级、灵活和可移植的方式来打包应用程序及其依赖项,并创建一个独立、隔离的

    2024年02月10日
    浏览(28)
  • 【docker】基于dockerfile编写LNMP

    目录 一、基础环境准备 二、部署nginx(容器IP为172.18.0.10)  1、整个Dockerfile文件内容  2、配置nginx.conf文件  3、构建镜像 ​编辑 三、部署mysql 1、整个Docker文件内容 2、准备my.conf文件   3、生成镜像  4、启动镜像容器  5、验证mysql  四、PHP部署 1、整个Dockerfile文件内容 2、

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

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

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

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

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

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

    2024年01月17日
    浏览(49)
  • 【docker】Dockerfile构建镜像常用指令:

    一、常用命令: Dockerfile是一个文本文件,包含了一条条的指令,在基于指定的镜像上,一条指令构建一层,最终构建出一个新的镜像。 作用 备注 格式 FROM 指定基础镜像 指定基于哪个镜像开始构建 FROM image:tag MAINTAINER 作者信息 标明这个dockerfile是谁写的(已弃用) M

    2024年02月13日
    浏览(42)
  • Docker-Dockerfile构建镜像

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

    2024年01月17日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包