Dockerfile是构建Docker镜像的标准方式,它是一个文本文件,包含了一系列指令。
基本Dockerfile示例:
# 基础镜像
FROM ubuntu:20.04
# 维护者信息
LABEL maintainer="yourname@example.com"
# 设置环境变量
ENV APP_HOME /app
WORKDIR $APP_HOME
# 安装依赖
RUN apt-get update && apt-get install -y \
python3 \
python3-pip
# 复制应用文件
COPY . .
# 安装Python依赖
RUN pip3 install -r requirements.txt
# 暴露端口
EXPOSE 8000
# 启动命令
CMD ["python3", "app.py"]
构建命令:
docker build -t my-app:1.0 .
# 启动一个容器并做修改
docker run -it ubuntu:20.04 /bin/bash
# 在容器内进行修改后,提交为新镜像
docker commit [CONTAINER_ID] my-modified-ubuntu
适用于需要编译环境的场景,可以减小最终镜像大小。
# 第一阶段:构建环境
FROM golang:1.16 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .
# 第二阶段:运行环境
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]
Docker 18.09+支持BuildKit,提供更快的构建速度和更多功能。
启用BuildKit:
export DOCKER_BUILDKIT=1
docker build -t my-app .
列出镜像:
docker images
docker image ls
删除镜像:
docker rmi [IMAGE_ID]
docker image rm [IMAGE_ID]
查看镜像历史:
docker history [IMAGE_ID]
保存/加载镜像:
docker save -o myimage.tar myimage:tag
docker load -i myimage.tar
Docker官方镜像仓库,可用于存储和分发镜像。
登录:
docker login
推送镜像:
docker tag my-app:1.0 username/my-app:1.0
docker push username/my-app:1.0
Docker Registry:
# 运行私有Registry
docker run -d -p 5000:5000 --name registry registry:2
# 推送镜像到私有Registry
docker tag my-app:1.0 localhost:5000/my-app:1.0
docker push localhost:5000/my-app:1.0
Harbor: 企业级Registry解决方案,提供UI、权限控制等功能
Trivy: 开源漏洞扫描器
trivy image my-app:1.0
Docker Scout: Docker官方扫描工具
docker scout quickview my-app:1.0
Buildx: Docker的扩展构建工具,支持多平台构建
docker buildx build --platform linux/amd64,linux/arm64 -t my-app:multiarch .
Kaniko: 在Kubernetes中构建镜像的工具,无需Docker守护进程
Podman Build: 无需守护进程的替代构建工具
Dive: 分析镜像层内容
dive my-app:1.0
docker-slim: 自动缩减镜像大小
docker-slim build --target my-app:1.0
减小镜像体积:
安全考虑:
标签管理:
分层优化:
通过合理使用这些工具和方法,可以高效地构建、管理和优化Docker镜像,为容器化应用提供可靠的基础。