Dockerfile基础命令有哪些

发布时间:2021-12-13 11:57:58 作者:iii
来源:亿速云 阅读:144
# Dockerfile基础命令有哪些

Dockerfile是构建Docker镜像的核心配置文件,通过一系列指令定义镜像的构建过程。本文将详细介绍最常用的15个Dockerfile命令及其实际应用场景。

## 一、核心构建指令

### 1. FROM
**作用**:指定基础镜像  
**示例**:
```dockerfile
FROM ubuntu:20.04
FROM python:3.9-slim

注意事项: - 必须是Dockerfile的第一个非注释指令 - 官方推荐使用Alpine等轻量级基础镜像(如python:3.9-alpine

2. RUN

作用:执行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减少不必要的安装包

3. COPY vs ADD

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

二、配置指令

4. WORKDIR

作用:设置工作目录
示例

WORKDIR /app
RUN pwd  # 输出/app

特点: - 自动创建不存在目录 - 影响后续RUN/CMD/ENTRYPOINT等指令的执行位置

5. ENV

作用:设置环境变量
两种格式

ENV APP_HOME=/app
ENV PATH=$PATH:/usr/local/bin

持久化: - 在容器运行时仍可通过docker inspect查看

6. ARG

作用:构建时变量(构建后不可见)
示例

ARG VERSION=latest
FROM busybox:$VERSION

使用场景: - 配合docker build --build-arg动态传参

三、运行时控制指令

7. CMD

作用:容器默认执行命令
三种格式

CMD ["executable","param1","param2"]  # Exec格式(推荐)
CMD command param1 param2             # Shell格式
CMD ["param1","param2"]              # 作为ENTRYPOINT参数

特点: - 可以被docker run后的命令覆盖 - Dockerfile中只能有一个CMD(多个时最后一个生效)

8. ENTRYPOINT

作用:容器的主程序
示例

ENTRYPOINT ["top", "-b"]
CMD ["-H"]  # 作为ENTRYPOINT参数

与CMD配合

# 运行效果:top -b -H
docker run -it myimage
# 覆盖CMD参数:top -b -C
docker run -it myimage -C

9. EXPOSE

作用:声明监听端口
示例

EXPOSE 80/tcp
EXPOSE 3000

注意: - 实际端口映射仍需通过docker run -p参数

四、其他实用指令

10. VOLUME

作用:定义匿名卷
示例

VOLUME ["/data"]

特点: - 避免容器存储层数据写入 - 可通过docker run -v覆盖

11. USER

作用:切换执行用户
示例

RUN groupadd -r app && useradd -r -g app app
USER app

安全建议: - 避免使用root用户运行容器进程

12. HEALTHCHECK

作用:健康检查
示例

HEALTHCHECK --interval=30s --timeout=3s \
  CMD curl -f http://localhost/ || exit 1

五、特殊场景指令

13. ONBUILD

作用:延迟执行命令
示例

ONBUILD COPY . /app/src  # 在子镜像构建时触发

典型应用: - 基础环境镜像的构建

14. LABEL

作用:添加元数据
示例

LABEL version="1.0"
LABEL description="Web application"

15. SHELL

作用:更改默认shell
示例

SHELL ["/bin/bash", "-c"]
RUN echo $HOME

六、综合最佳实践

  1. 多阶段构建示例:
# 构建阶段
FROM golang:1.16 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp

# 运行阶段
FROM alpine:latest
COPY --from=builder /app/myapp /
CMD ["/myapp"]
  1. 缓存优化技巧
  1. 安全建议

通过掌握这些核心指令,您可以高效地编写生产级Dockerfile。建议结合官方文档(https://docs.docker.com/engine/reference/builder/)进行更深入的实践。 “`

推荐阅读:
  1. PHP基础命令有哪些
  2. Linux有哪些基础命令

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

dockerfile

上一篇:docker无法重启问题怎么解决

下一篇:Docker如何创建NetWork网络

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》