在 Ubuntu 系统上生成和加载 Docker 镜像的完整指南


环境准备

在开始之前,请确保您的系统符合以下要求:

  • 操作系统: Ubuntu 20.04 或更高版本。
  • 用户权限 : 拥有 sudo 权限。
  • 网络连接: 确保能够访问互联网以安装依赖和拉取镜像。

安装 Docker

  1. 更新系统包索引:

    bash 复制代码
    sudo apt update
  2. 安装必要的依赖:

    bash 复制代码
    sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
  3. 添加 Docker 的 GPG 密钥:

    bash 复制代码
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  4. 添加 Docker 的 APT 源:

    bash 复制代码
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  5. 安装 Docker Engine:

    bash 复制代码
    sudo apt update
    sudo apt install -y docker-ce docker-ce-cli containerd.io
  6. 验证安装是否成功:

    bash 复制代码
    docker --version

    输出示例:

    复制代码
    Docker version 20.10.21, build baeda1f

生成 Docker 镜像

创建基础应用

我们以创建一个简单的 Python Web 应用为例。以下是项目结构:

复制代码
myapp/
├── app.py
├── requirements.txt
└── Dockerfile
  1. 创建 app.py 文件:

    python 复制代码
    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/')
    def home():
        return "Hello, Docker!"
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=5000)
  2. 创建 requirements.txt 文件:

    复制代码
    flask
  3. 创建 Dockerfile 文件:

    dockerfile 复制代码
    # 基础镜像
    FROM python:3.9-slim
    
    # 设置工作目录
    WORKDIR /app
    
    # 复制项目文件
    COPY . /app
    
    # 安装依赖
    RUN pip install -r requirements.txt
    
    # 暴露端口
    EXPOSE 5000
    
    # 启动应用
    CMD ["python", "app.py"]

构建镜像

  1. 打开终端,进入项目目录:

    bash 复制代码
    cd myapp
  2. 构建镜像:

    bash 复制代码
    sudo docker build -t myapp:1.0 .
  3. 查看构建完成的镜像:

    bash 复制代码
    docker images

    示例输出:

    复制代码
    REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
    myapp        1.0       abcdef123456   10 seconds ago   23.4MB

加载 Docker 镜像

本地加载

保存镜像为文件
  1. 使用 docker save 命令导出镜像:

    bash 复制代码
    docker save -o myapp.tar myapp:1.0

    这将在当前目录生成 myapp.tar 文件。

  2. 验证文件大小:

    bash 复制代码
    ls -lh myapp.tar
加载镜像到 Docker
  1. 将镜像加载回 Docker:

    bash 复制代码
    docker load -i myapp.tar
  2. 确认镜像已加载:

    bash 复制代码
    docker images

上传到远程仓库

登录 Docker Hub
  1. 登录 Docker Hub:

    bash 复制代码
    docker login

    输入用户名和密码。

推送镜像
  1. 为镜像添加标签:

    bash 复制代码
    docker tag myapp:1.0 <your-dockerhub-username>/myapp:1.0
  2. 推送镜像:

    bash 复制代码
    docker push <your-dockerhub-username>/myapp:1.0
  3. 在 Docker Hub 上查看已上传的镜像。


测试 Docker 容器

  1. 运行容器:

    bash 复制代码
    docker run -d -p 5000:5000 myapp:1.0
  2. 验证服务是否启动:

    打开浏览器,访问 http://localhost:5000,应该看到:

    复制代码
    Hello, Docker!
  3. 查看运行中的容器:

    bash 复制代码
    docker ps
  4. 停止容器:

    bash 复制代码
    docker stop <container-id>

常见问题与解决

构建失败

问题 :构建镜像时出现 pip 相关错误。

解决 :确保 requirements.txt 文件正确且网络通畅。可以尝试指定国内源:

dockerfile 复制代码
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

容器无法访问

问题:容器运行后无法通过浏览器访问。

解决 :确保在 Dockerfile 中暴露了正确的端口,并在运行时使用了 -p 参数进行端口映射。


总结

通过本文的详细步骤,我们学习了如何在 Ubuntu 系统上安装 Docker、生成镜像、保存与加载镜像,并通过实际案例运行一个容器化的 Python Web 应用。希望本文能帮助您快速掌握 Docker 的核心操作,提升开发与运维效率。

如有任何疑问,欢迎留言讨论!

相关推荐
JinchuanMaster11 小时前
Ubuntu20.04安装50系显卡驱动[不黑屏版本]
linux·人工智能·深度学习·ubuntu·机器学习·机器人·gpu算力
中草药z11 小时前
【Linux】拆解 Linux 容器化核心:Namespace 隔离 + cgroups 资源控制,附 LXC 容器生命周期实战
运维·docker·容器·虚拟化·namespace·lxc·cgroups
草莓熊Lotso11 小时前
Linux 程序地址空间深度解析:虚拟地址背后的真相
java·linux·运维·服务器·开发语言·c++·人工智能
猫头虎11 小时前
【汉化中文版】OpenClaw(Clawdbot/Moltbot)第三方开源汉化中文发行版部署全指南:一键脚本/Docker/npm 三模式安装+Ubuntu 环境配置+中文汉化界面适配开源版
docker·npm·开源·aigc·ai编程·远程工作·openclaw
郝学胜-神的一滴11 小时前
使用Linux命名管道(FIFO)实现无血缘关系进程间通信
linux·服务器·开发语言·c++·程序人生
Jinkxs11 小时前
【Linux】零基础入门:一篇吃透操作系统核心概念
linux·运维·服务器·网络·操作系统
一目Leizi11 小时前
Windows 系统下安装 Ubuntu 双系统详细教程(图文指南)
linux·windows·ubuntu
feasibility.12 小时前
基于Qwen3-VL多模态嵌入/重排序模型+Dify(docker)工作流的电商图文检索系统
人工智能·docker·多模态·教育电商·dify·rag·智能体/工作流
江畔何人初12 小时前
LVM中物理卷、物理区块、卷组、逻辑卷的概念以及它们之间的关系
linux·运维·云原生·容器·kubernetes
liu****12 小时前
4.镜像仓库详解
c++·docker·云原生·容器·kubernetes·镜像\