Dockerfile 详解

Dockerfile 是一个用于定义 Docker 镜像构建过程的文本文件。它包含了一系列的指令,这些指令描述了如何从基础镜像创建一个新的镜像。Docker 使用这些指令自动化地构建镜像,并且可以确保创建出的镜像是一致的、可重复的。

Dockerfile 的常用指令

  1. FROM
  • 指定基础镜像。例如:

    FROM ubuntu:20.04
    
  • 每个 Dockerfile 必须以 FROM 指令开头,指定基础镜像。

  1. RUN
  • 在镜像内运行命令。常用于安装软件包或修改系统状态。例如

    RUN apt-get update && apt-get install -y nginx
    
  • RUN 指令会创建一个新的镜像层。

  1. CMD
  • 设置容器启动时默认执行的命令。如果 docker run 命令中没有指定命令,则使用 CMD 指令中的命令。例如

    CMD ["nginx", "-g", "daemon off;"]
    
  • CMD 只能有一个有效的指令,如果有多个 CMD 指令,只有最后一个会生效。

  1. ENTRYPOINT
  • 指定容器启动时的主命令,并且可以配合 CMD 使用以提供默认参数。例如

    ENTRYPOINT ["/usr/bin/nginx"]
    CMD ["-g", "daemon off;"]
    
  • ENTRYPOINT 指令不会被 docker run 命令中的参数覆盖。

  1. COPY
  • 将文件和目录从构建上下文复制到镜像内。例如

    COPY ./myapp /usr/src/myapp
    
  1. ADD
  • 类似于 COPY,但还支持解压缩和从 URL 下载文件。例如:

    ADD http://example.com/big.tar.gz /var/www/html/
    
  1. WORKDIR
  • 设置工作目录。后续的 RUNCMDENTRYPOINT 指令将在这个目录下运行。例如

    WORKDIR /usr/src/myapp
    
  1. EXPOSE
  • 声明容器内的应用程序将使用的端口。例如

    EXPOSE 80
    
  • 这只是一个声明,实际的端口映射需要在运行容器时进行配置。

  1. ENV
  • 设置环境变量。例如:

    ENV APP_ENV=production
    
  1. VOLUME
  • 创建一个挂载点,可以挂载外部存储到容器。例如

    VOLUME ["/data"]
    
  1. USER
  • 设置容器运行时的用户。例如

    USER www-data
    
  1. ARG
  • 定义构建时可用的变量。例如

    ARG VERSION=1.0
    

示例 Dockerfile

以下是一个示例 Dockerfile,展示了如何创建一个简单的 Node.js 应用镜像

# 使用 Node.js 官方镜像作为基础镜像
FROM node:14

# 设置工作目录
WORKDIR /usr/src/app

# 将 package.json 和 package-lock.json 复制到工作目录
COPY package*.json ./

# 安装应用的依赖
RUN npm install

# 将应用源代码复制到工作目录
COPY . .

# 暴露应用运行的端口
EXPOSE 3000

# 启动应用
CMD ["node", "app.js"]

构建镜像

使用 docker build 命令来构建镜像

```
docker build -t my-node-app .
```
  • -t 选项用于为构建的镜像指定标签(例如 my-node-app)。

  • . 指定了构建上下文的路径,通常是 Dockerfile 所在的目录。

运行容器

使用 docker run 命令来运行基于构建镜像的容器

```
docker run -p 3000:3000 my-node-app
```
  • -p 选项用于将宿主机端口映射到容器端口。

  • my-node-app 是镜像的名称。

posted @   地瓜地瓜,我是土豆  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 我与微信审核的“相爱相杀”看个人小程序副业
点击右上角即可分享
微信分享提示