dockerfile文件详解

dockerfile

Dockerfile是一种用于构建Docker镜像的文件,它包含一系列的指令,用于描述如何构建镜像。

dockerfile示例

# 指定基础镜像

FROM harbor.zhianoa.com/phoenix/ubuntu-python:3.7

# 镜像中创建/app目录,这一步可提前在基础镜像中创建好

RUN mkdir /app

# 拷贝当前目录下的指定文件到镜像中的/app目录

COPY requirements.txt /app

# 设置工作目录

WORKDIR /app

# 安装Python依赖

RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple

# 拷贝当前目录下所有文件(代码)到镜像中的/app目录

COPY . /app

# 给/app目录下以run_开头的文件设置可执行权限

RUN /bin/chmod 777 run_*

镜像的分层设计

Dockerfile的指令每执行一条就会在镜像上新建一层。所以指令越多,层数越多,镜像越大。

例如:

FROM ubuntu:latest

RUN apt-get update

RUN apt-get install -y python3 python3-pip

RUN pip3 install -r requirements.txt

以上执行会创建 3 层镜像。可简化为以下格式:

FROM ubuntu:latest

RUN apt-get update \

    && apt-get install -y python3 python3-pip \

    && pip3 install -r requirements.txt

如上,以 && 符号连接命令,这样执行后,只会创建一层镜像。

指令

FROM

指定基础镜像,用于后续的指令构建。

MAINTAINER

指定Dockerfile的作者/维护者。(已弃用,推荐使用LABEL指令)

LABEL

添加镜像的元数据,使用键值对的形式。

RUN

在构建过程中在镜像中执行命令。

EXPOSE

声明容器运行时监听的特定网络端口。

ENV

在容器内部设置环境变量。

VOLUME

为容器创建挂载点或声明卷。

WORKDIR

设置后续指令的工作目录。

USER

指定后续指令的用户和用户组。

ADD

将宿主机上的文件/目录/远程URL拷贝到镜像中。

例如:ADD http://example.com/foobar /app

格式:

ADD <源路径1>...  <目标路径>

ADD ["<源路径1>",...  "<目标路径>"]

COPY

将宿主机上的文件/目录复制到镜像中。

同ADD,区别是ADD可以是URL,COPY只能是本地文件。

格式:

COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>

COPY [--chown=<user>:<group>] ["<源路径1>",...  "<目标路径>"]

<目标路径>:容器内的指定路径,路径不存在则自动创建。

CMD

指定容器创建时(运行时)的默认命令。(可以被覆盖)

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

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

格式:

CMD <shell 命令>

CMD ["<可执行文件或命令>","<param1>","<param2>",...]

CMD ["<param1>","<param2>",...]  # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数

推荐使用第二种格式,执行过程比较明确。第一种格式实际上在运行的过程中也会自动转换成第二种格式运行,并且默认可执行文件是 sh。

ENTRYPOINT

设置容器创建时(运行时)的主要命令。(不可被覆盖)

类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖。

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

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

格式:

ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

可以搭配 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

RUN和CMD的区别

CMD 在docker run 时运行。

RUN 在docker build 时运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/621143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java+ssm+vue代码视频学习讲解

一、ssm 1.项目文件结构 2.数据库连接信息 3.其他配置信息 4.java代码文件目录介绍 5.entity层代码 6.controller&#xff0c;service&#xff0c;dao&#xff0c;entity层之间的关系 7.controller层代码 8.登陆拦截功能实现 AuthorizationInterceptor.java 9.文件上传功能 …

【笔记------coremark】单片机上的跑分库coremark移植

coremark的官方仓库&#xff1a;https://github.com/eembc/coremark 官方收录了很多单片机的跑分情况&#xff1a;https://www.eembc.org/coremark/scores.php 这个是我建立的一个仓库&#xff0c;用来收集自己用到的一些单片机的跑分情况&#xff1a;https://gitee.com/wild_c…

单容水箱液位定值控制实验

实验1 单容水箱液位定值控制实验 一、实验目的 1、通过实验熟悉单回路反馈控制系统的组成和工作原理。 2、分析分别用P、PI和PID调节时的过程图形曲线。 3、定性地研究P、PI和PID调节器的参数对系统性能的影响。 二、实验设备 A3000现场系统&#xff0c;任何一个控制系统…

C++标准库vector的基础用法总结

C标准库vector的基础用法总结 文章目录 C标准库vector的基础用法总结vector简介简单应用push操作pop操作删除末尾删除开头 参数传递 vector简介 vector是C标准模板库(STL)中的一个动态数组模板类&#xff0c;它可以随着元素的添加而自动增长。vector使用连续的内存空间来存储元…

蓝桥杯单片机省赛真题

文章目录 第八届蓝桥杯省赛真题及参考代码 链接&#xff1a;https://pan.baidu.com/s/1JQ68qvrU3cYLVaQbD1KSiA?pwd1111 第九届蓝桥杯省赛真题及参考代码 链接&#xff1a;https://pan.baidu.com/s/1LM_JALrsKsthnWxTtgE1Fw?pwd1111 第十届蓝桥杯省赛真题及参考代码 链接&…

[AutoSar]基础部分 RTE 08 runnable mapping

目录 关键词平台说明一、runnable mapping的必要性二、runnable mapping 通用规则三、Task type四、可以不用mapping的runnbale 关键词 嵌入式、C语言、autosar、runnable 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C&#xff0c;C编译器HighTec (…

手撕乘积(**Multiplication** **Product**): 穷举和图示(1)

手撕乘积(Multiplication & Product): 穷举和图示(1) 乘积 r ⋅ s ∑ i 1 s r r r ⋯ r ⏟ s times ∑ j 1 r s s s ⋯ s ⏟ r times r\cdot s\sum _{i1}^{s}r\underbrace {rr\cdots r} _{s{\text{ times}}}\sum _{j1}^{r}s\underbrace {ss\cdots s} _{r{\tex…

Spring Boot 进行 MockMvc 单元测试的实例

在Spring Boot应用程序中&#xff0c;使用MockMvc进行单元测试是一种有效的方式&#xff0c;可以验证控制器的行为和API的正确性。在这篇博客中&#xff0c;我们将介绍如何使用MockMvc对用户控制器&#xff08;UserController&#xff09;进行测试&#xff0c;该控制器涉及用户…

数据库单表查询

1、显示所有职工的基本信息。 2、查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号。 3、求出所有职工的人数。 4、列出最高工和最低工资。 5、列出职工的平均工资和总工资。 6、创建一个只有职工号、姓名和参加工作的新表&#xff0c;名为工作日期表…

线上问题整理

JVM 案例 案例一&#xff1a;服务器内存不足&#xff0c;影响Java应用 问题&#xff1a; 收到报警&#xff0c;某Java应用集群中一台服务器可用内存不足&#xff0c;超过报警阈值。 排查过程&#xff1a; 首先&#xff0c;通过Hickwall查看该应用各项指标&#xff0c;发现无论…

224.【2023年华为OD机试真题(C卷)】英文输入法(JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-英文输入法二.解题思路三.题解代码Python题解代…

Linux第22步_安装CH340驱动和串口终端软件MobaXterm

开发板输出信息通常是采用串口&#xff0c;而计算机通常是USB接口&#xff0c;为了让他们之间能够交换数据&#xff0c;我们通常采用USB转串口的转换器来实现。目前市场上的串口转换器大多是采用CH340芯片来实现的&#xff0c;因此我们需要在计算中安装一个CH340驱动程序&#…

[代码复现]BrainGNN: Interpretable Brain Graph Neural Network for fMRI Analysis

目录 1. 论文资料 2. 代码复现步骤及可能存在的问题 2.1. 环境配置 2.2. 代码运行 3. 为啥跑这个代码 1. 论文资料 &#xff08;1&#xff09;论文原文&#xff1a;BrainGNN&#xff1a;用于fMRI分析的可解释脑图神经网络 - ScienceDirect &#xff08;2&#xff09;论文…

Android 拍照以及相册中选择(适配高版本)————上传头像并裁剪(一)

前言 在项目研发中&#xff0c;相信大家都遇到过给用户增加头像照片的需求。 随着手机版本的不断更新&#xff0c;android 8、android 9、android 10、android 12、android 13、鸿蒙系统等等&#xff1b;遇到这个功能需求&#xff0c;大家肯定会想&#xff0c;“这还不好写&…

【Python学习】Python学习17- File(文件) 方法

目录 [TOC](【Python学习】Python学习17- File(文件) 方法) 文章所属专区 Python学习 前言 本章节主要说明Python文件操作的具体说明 open()方法 Python open() 方法用于打开一个文件&#xff0c;并返回文件对象&#xff0c;在对文件进行处理过程都需要使用到这个函数&#…

Spark算子(RDD)超细致讲解

SPARK算子&#xff08;RDD&#xff09;超细致讲解 map,flatmap,sortBykey, reduceBykey,groupBykey,Mapvalues,filter,distinct,sortBy,groupBy共10个转换算子 &#xff08;一&#xff09;转换算子 1、map from pyspark import SparkContext# 创建SparkContext对象 sc Spark…

信息系统中的需求分析

软件需求是指用户对新系统在功能、行为、性能、设计约束等方面的期望。根据IEEE的软件工程标准词汇表&#xff0c;软件需求是指用户解决问题或达到目标所需的条件或能力&#xff0c;是系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或能力&#xff0c;…

Fastjson库将JSONObject转换为实体类

嗨&#xff0c;大家好&#xff0c;欢迎来到程序猿漠然公众号&#xff0c;我是漠然。 在Java编程中&#xff0c;使用Fastjson库将JSONObject转换为实体类的过程是一种常见的数据处理操作。Fastjson是一个由阿里巴巴开发的高性能JSON处理库&#xff0c;它简化了JSON数据的读写操作…

传感数据分析——傅里叶滤波:理论与公式

传感数据分析——傅里叶滤波&#xff1a;理论与公式 引言 在传感数据分析领域&#xff0c;傅里叶滤波是一种重要的信号处理技术&#xff0c;被广泛应用于各种领域&#xff0c;如通信、图像处理、音频处理以及生物医学等。本文将简单探讨傅里叶滤波的理论基础和相关公式&#…

Azure Machine Learning - 视频AI技术

Azure AI 视频索引器是构建在 Azure 媒体服务和 Azure AI 服务&#xff08;如人脸检测、翻译器、Azure AI 视觉和语音&#xff09;基础之上的一个云应用程序&#xff0c;是 Azure AI 服务的一部分。 有了 Azure 视频索引器&#xff0c;就可以使用 Azure AI 视频索引器视频和音频…