10_24_Docker—DockerFile介绍【DockerFile指令初知,Docker三部曲build,run,push】

DockerFile

DockerFile介绍

在这里插入图片描述

查看一下官方是怎么做的?

在这里插入图片描述
在这里插入图片描述

  • FROM:就是最基础的镜像(一般的都从这里开始)
  • ADD:添加了一个centos7,就会有相应的功能
  • LABEL:添加了centos的一些标签
  • CMD:最后通过bin/bash 控制台来运行
  • 注:很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像!
    • 官方既然可以制作镜像,呢我们也可以!

DockerFile构建过程

很多指令可以直接百度图片
如:
在这里插入图片描述
在这里插入图片描述

基础知识

1、 每个保留关键字(指令)都必须是大写字母
2、 指令从上到下顺序执行
3、 # 表示注释
4、 每一个指令都会创建提交一个新的镜像层,并提交!
在这里插入图片描述
dockerFile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单!

Docker镜像(将自己写的代码和服务构建成一个镜像——以前都是提交一个jar包和war包)
* war包和jar包部署区别
* 比如将我们写的springboot变成一个镜像

Docker镜像逐渐成为企业交付的标准,必须要掌握!

Docker三部曲【开发,运维,部署。。。步骤——缺一不可】

DockerFile【现在自己写】:构建文件,定义了一切的步骤,源代码!

DockerImages【前面是使用别人的】:通过DockerFile构建生成的镜像,最终发布和运行的产品!(以后jar包也要打成镜像)

Docker容器【前面是使用别人的】:容器就是镜像运行起来提供服务的

注:后两个先学:先会用。在学第一个:在研究是怎么出来的

<think> 我们正在讨论Dockerfile中的指令是在`docker build`时使用还是在`docker run`时使用。根据提供的引用: 引用[1]明确指出:Dockerfile是用于构建Docker镜像的蓝图,当你运行`docker build`命令时,Docker会按照Dockerfile中的指令逐步执行,生成一个新的Docker镜像。因此,Dockerfile中的指令是在**构建镜像**的过程中执行的,也就是在`docker build`时。 引用[2]具体说明了`RUN`指令:它用于在构建镜像时执行命令,这些命令在镜像构建过程中执行,而不会在容器运行时(即`docker run`时)执行。这进一步确认了Dockerfile指令的执行时机是构建阶段。 引用[3]强调了Dockerfile需要先通过`docker build`构建成镜像,然后才能使用`docker run`运行容器。这也说明Dockerfile指令与`docker run`无关。 结论:Dockerfile中的指令(如`RUN`, `COPY`, `ENV`等)都是在执行`docker build`命令构建镜像时执行的。当执行`docker run`启动容器时,这些指令已经固化在镜像中,不会再次执行。在容器运行时,只有镜像中定义的默认命令(如`CMD`或`ENTRYPOINT`)会被执行。 相关问题: 1. Dockerfile中的`CMD`和`ENTRYPOINT`指令有什么不同? 2. 如何避免在每次构建Docker镜像时重复安装依赖包? 3. 在Dockerfile中,`COPY`和`ADD`指令有什么区别? </think> ### Dockerfile 指令执行时机解析 Dockerfile 中的指令是在 **`docker build` 命令执行时** 使用的(构建镜像阶段),而不是在 `docker run` 时(运行容器阶段)。以下是关键解析: #### 一、指令执行阶段对比 | **指令类型** | **执行时机** | **作用场景** | **示例指令** | |--------------------|------------------|-------------------------------------|--------------------------------| | **构建指令** | `docker build` 时 | 创建镜像层 | `RUN`, `COPY`, `ENV`, `WORKDIR` | | **运行时指令** | `docker run` 时 | 定义容器启动行为 | `CMD`, `ENTRYPOINT` | | **元数据指令** | `docker build` 时 | 记录镜像描述信息 | `LABEL`, `EXPOSE` | #### 二、详细说明 1. **`docker build` 阶段执行的指令** - **`RUN`**:在构建过程中执行命令并创建新镜像层(如安装软件)[^2] ```dockerfile RUN apt-get update && apt-get install -y nginx ``` - **`COPY`/`ADD`**:将文件从主机复制到镜像中 ```dockerfile COPY app.py /usr/src/app/ ``` - **`ENV`**:设置环境变量(固化到镜像中) ```dockerfile ENV PYTHONPATH=/app ``` - **`WORKDIR`**:设置工作目录 ```dockerfile WORKDIR /app ``` 2. **`docker run` 阶段生效的指令** - **`CMD`**:定义容器**默认**启动命令(可被覆盖) ```dockerfile CMD ["python", "app.py"] ``` - **`ENTRYPOINT`**:定义容器**核心**启动命令(不易被覆盖) ```dockerfile ENTRYPOINT ["nginx", "-g", "daemon off;"] ``` #### 三、执行流程示例 ```mermaid graph TD A[编写Dockerfile] --> B[docker build] B --> C[执行构建指令:<br>RUN/COPY/ENV...] C --> D[生成镜像] D --> E[docker run] E --> F[执行运行时指令:<br>CMD/ENTRYPOINT] F --> G[运行容器] ``` > 💡 **关键区别**: > `RUN apt-get install` 在**构建镜像时**安装软件(软件被固化到镜像中)[^1], > `CMD ["npm start"]` 在**启动容器时**才执行(每次运行容器都会调用)[^3]。 #### 四、特殊情况说明 1. **`ARG` 指令**: 仅在构建阶段有效(`docker build --build-arg`),运行容器时不可用 2. **`.dockerignore` 文件**: 影响 `COPY`/`ADD` 的文件复制行为,仅在构建阶段生效 3. **多阶段构建**: ```dockerfile # 构建阶段 FROM golang AS builder RUN go build -o /app # 运行阶段(仅此阶段指令影响最终镜像) FROM alpine COPY --from=builder /app /app CMD ["/app"] ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狂野小白兔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值