Docker 入门教程(十):镜像构建、提交、打标签与上传

文章目录

  • 🐳 Docker 入门教程(十):镜像构建、提交、打标签与上传
    • 一、镜像的构建方式
    • 二、`docker commit` : 容器->镜像
    • 三、`docker build` : dockerfile->镜像
    • 四、上传镜像
    • 五、拉取镜像

🐳 Docker 入门教程(十):镜像构建、提交、打标签与上传


一、镜像的构建方式

Docker 镜像(Image)是用于启动容器的只读模板,包含:

  • 一个(或多个)层(layer),每层代表一次文件系统的更改
  • 一个基础层(如 ubuntualpine),后续每层构建在其上
  • 镜像不可变,不可写,所有更改都发生在容器可写层

镜像是构建时产物,容器是运行时产物

镜像的构建方式对比

方式命令场景优点缺点
手动保存容器docker commit快速实验保存快速、方便不可复现、不可维护
使用 Dockerfiledocker build正式开发构建可版本管理、可审计、可重建需要 Dockerfile 编写经验

二、docker commit : 容器->镜像

把运行中的容器,保存为一个新的镜像。

# 启动一个容器
docker run -it ubuntu# 安装 curl
apt update && apt install curl# 退出容器(Ctrl+D 或 exit)# 查看容器 ID
docker ps -a# 保存为镜像
docker commit <容器ID或名称> mycurl:v1

现在就可以用:

docker run -it mycurl:v1
  • 这是一种“快照式”的构建方式
  • 不包含构建记录(不知道这个 curl 是谁装的)
  • 适合调试或交互式实验保存

三、docker build : dockerfile->镜像

这是推荐方式,通过写 Dockerfile 构建:

# Dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "main.py"]

构建镜像:

docker build -t myapp:1.0 .

镜像就像是一层层构建的“增量文件系统”,build 命令每执行一个 Dockerfile 指令,就生成一层 layer。


四、上传镜像

步骤一:登录

docker login [registry-url]

默认是 Docker Hub,也可为私有仓库(如 Harbor)。

步骤二:准备上传标签

镜像命名格式:

[REGISTRY_HOST[:PORT]/]NAMESPACE/REPO[:TAG]

举例:

docker.io/library/nginx:latest
ghcr.io/myteam/myapp:1.2.3
harbor.company.com/devops/jenkins:custom
部分示例含义
REGISTRY_HOSTdocker.io默认为 Docker Hub
NAMESPACElibrarymyuser用户名/组织名
REPOnginxmyapp仓库名
TAG:latest:1.0镜像版本标签(可省略,默认为 latest)

镜像命名指令

docker tag myapp:1.0 myusername/myapp:1.0

步骤三:推送

docker push myusername/myapp:1.0

上传前会校验:

  • 是否登录
  • 镜像标签是否合法
  • 是否有权限访问该仓库

五、拉取镜像

docker pull nginx
docker pull myregistry.com/team/app:stable

如果私有仓库地址没有配置信任,需要:

docker login myregistry.com

完整实践流程(一步步)

# 构建镜像
docker build -t myapp .# 查看镜像
docker images# 给镜像打 tag 准备上传
docker tag myapp myusername/myapp:1.0# 登录 Docker Hub(或私有仓库)
docker login# 推送
docker push myusername/myapp:1.0# 在另一台机器上拉取并运行
docker pull myusername/myapp:1.0
docker run -p 8000:8000 myusername/myapp:1.0