# 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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。