Docker 入门教程(二):镜像管理

Docker 镜像简介

Docker 镜像是一个只读的模板,包含了运行应用程序所需的所有内容:代码、运行时、库、环境变量和配置文件。

搜索镜像

1
2
3
4
5
# 搜索官方镜像
docker search ubuntu

# 搜索特定镜像
docker search nginx

拉取镜像

1
2
3
4
5
6
7
8
# 拉取最新版本
docker pull ubuntu

# 拉取指定版本
docker pull ubuntu:20.04

# 拉取多个镜像
docker pull nginx redis mysql

查看本地镜像

1
2
3
4
5
6
7
8
9
10
11
# 列出所有镜像
docker images

# 或
docker image ls

# 只显示镜像 ID
docker images -q

# 显示完整信息
docker images --no-trunc

删除镜像

1
2
3
4
5
6
7
8
9
10
11
# 删除单个镜像
docker rmi ubuntu:20.04

# 强制删除
docker rmi -f ubuntu:20.04

# 删除所有悬空镜像
docker image prune

# 删除所有未使用的镜像
docker image prune -a

构建镜像

编写 Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
FROM ubuntu:20.04

RUN apt-get update && apt-get install -y \
python3 \
python3-pip

WORKDIR /app

COPY . /app

RUN pip3 install -r requirements.txt

CMD ["python3", "app.py"]

构建镜像

1
2
3
4
5
6
7
8
# 构建镜像
docker build -t myapp:1.0 .

# 指定 Dockerfile 路径
docker build -t myapp:1.0 -f /path/to/Dockerfile .

# 使用构建参数
docker build --build-arg VERSION=1.0 -t myapp:$VERSION .

导出和导入镜像

导出镜像

1
2
3
4
5
6
7
8
# 导出为 tar 文件
docker save -o ubuntu.tar ubuntu:20.04

# 或
docker save ubuntu:20.04 > ubuntu.tar

# 导出多个镜像
docker save -o images.tar ubuntu:20.04 nginx:latest

导入镜像

1
2
3
4
5
6
7
8
# 从 tar 文件导入
docker load -i ubuntu.tar

# 或
docker load < ubuntu.tar

# 导出并导入到另一台机器
docker save ubuntu:20.04 | ssh user@remote 'docker load'

镜像标签管理

1
2
3
4
5
# 给镜像打标签
docker tag ubuntu:20.04 myregistry.com/ubuntu:20.04

# 推送到私有仓库
docker push myregistry.com/ubuntu:20.04

镜像分层原理

Docker 镜像采用分层存储结构:

  1. 基础层:操作系统或基础镜像
  2. 应用层:应用代码和依赖
  3. 配置层:配置文件和环境变量

这种分层结构使得镜像共享和更新更加高效。

最佳实践

  • 使用官方基础镜像
  • 选择合适的基础镜像版本
  • 合理使用 .dockerignore 文件
  • 利用构建缓存
  • 保持镜像尽可能小
  • 使用多阶段构建

总结

本文详细介绍了 Docker 镜像的管理操作,包括搜索、拉取、查看、删除、构建、导入导出等功能。下一篇文章将介绍容器的创建和管理。