您好,登录后才能下订单哦!
# Dockerfile基础命令有哪些
Dockerfile是构建Docker镜像的核心配置文件,通过一系列指令定义镜像的构建过程。本文将详细介绍最常用的15个Dockerfile命令及其实际应用场景。
## 一、核心构建指令
### 1. FROM
**作用**:指定基础镜像
**示例**:
```dockerfile
FROM ubuntu:20.04
FROM python:3.9-slim
注意事项:
- 必须是Dockerfile的第一个非注释指令
- 官方推荐使用Alpine等轻量级基础镜像(如python:3.9-alpine
)
作用:执行shell命令
两种格式:
# Shell格式(默认在/bin/sh -c下执行)
RUN apt-get update && apt-get install -y curl
# Exec格式(推荐避免shell解析)
RUN ["/bin/bash", "-c", "echo hello"]
最佳实践:
- 合并多个RUN命令减少镜像层数
- 使用--no-install-recommends
减少不必要的安装包
COPY(推荐):
COPY ./app /usr/src/app
COPY requirements.txt /tmp/
ADD(附加功能):
ADD https://example.com/file.tar.gz /tmp/ # 支持URL下载
ADD file.tar.gz /tmp/ # 自动解压压缩文件
关键区别: - ADD包含COPY所有功能+额外特性 - 除非需要自动解压/远程下载,否则建议使用COPY
作用:设置工作目录
示例:
WORKDIR /app
RUN pwd # 输出/app
特点: - 自动创建不存在目录 - 影响后续RUN/CMD/ENTRYPOINT等指令的执行位置
作用:设置环境变量
两种格式:
ENV APP_HOME=/app
ENV PATH=$PATH:/usr/local/bin
持久化:
- 在容器运行时仍可通过docker inspect
查看
作用:构建时变量(构建后不可见)
示例:
ARG VERSION=latest
FROM busybox:$VERSION
使用场景:
- 配合docker build --build-arg
动态传参
作用:容器默认执行命令
三种格式:
CMD ["executable","param1","param2"] # Exec格式(推荐)
CMD command param1 param2 # Shell格式
CMD ["param1","param2"] # 作为ENTRYPOINT参数
特点:
- 可以被docker run
后的命令覆盖
- Dockerfile中只能有一个CMD(多个时最后一个生效)
作用:容器的主程序
示例:
ENTRYPOINT ["top", "-b"]
CMD ["-H"] # 作为ENTRYPOINT参数
与CMD配合:
# 运行效果:top -b -H
docker run -it myimage
# 覆盖CMD参数:top -b -C
docker run -it myimage -C
作用:声明监听端口
示例:
EXPOSE 80/tcp
EXPOSE 3000
注意:
- 实际端口映射仍需通过docker run -p
参数
作用:定义匿名卷
示例:
VOLUME ["/data"]
特点:
- 避免容器存储层数据写入
- 可通过docker run -v
覆盖
作用:切换执行用户
示例:
RUN groupadd -r app && useradd -r -g app app
USER app
安全建议: - 避免使用root用户运行容器进程
作用:健康检查
示例:
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost/ || exit 1
作用:延迟执行命令
示例:
ONBUILD COPY . /app/src # 在子镜像构建时触发
典型应用: - 基础环境镜像的构建
作用:添加元数据
示例:
LABEL version="1.0"
LABEL description="Web application"
作用:更改默认shell
示例:
SHELL ["/bin/bash", "-c"]
RUN echo $HOME
# 构建阶段
FROM golang:1.16 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
# 运行阶段
FROM alpine:latest
COPY --from=builder /app/myapp /
CMD ["/myapp"]
.dockerignore
文件通过掌握这些核心指令,您可以高效地编写生产级Dockerfile。建议结合官方文档(https://docs.docker.com/engine/reference/builder/)进行更深入的实践。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。