Docker的前世今生及安装与使用命令详解

news/2025/2/19 2:56:06/

在云原生时代,容器技术已经成为软件开发与部署的关键工具。其中,Docker 凭借其轻量、灵活和高效的特性迅速走红。本文将带你走进 Docker 的历史沿革,了解其从前世到今生的发展历程,并详细介绍如何安装 Docker 以及常用的操作命令。


一、Docker 的前世——容器化技术的萌芽与发展

1. 早期背景与虚拟化技术

在 Docker 出现之前,虚拟机(Virtual Machine)技术已经广泛应用于服务器资源的隔离和管理。虚拟机通过硬件虚拟化技术,将一台物理机分割成多个独立的系统实例,但相对来说资源开销较大、启动速度较慢。为了追求更高效的资源利用率,Linux 社区早期就发展出基于内核特性的容器技术,如 chrootcgroups命名空间(namespaces) 等技术,这为后来的容器化打下了基础。

2. Docker 的诞生与初步发展

2013 年,Solomon Hykes 及其团队在 dotCloud 平台上推出了 Docker 项目。Docker 利用 Linux 内核的容器化技术,将应用及其依赖打包成一个独立的、可移植的镜像,使得应用在不同环境中都能保持一致的运行状态。这一设计理念迅速获得开发者和运维人员的青睐。Docker 的出现不仅简化了应用部署流程,还极大地推动了微服务架构和持续集成/持续交付(CI/CD)的发展。

3. Docker 的生态体系形成

随着 Docker 社区的壮大,Docker 生态系统也在不断完善:

  • Docker Hub:作为官方镜像仓库,提供海量公共镜像供用户下载和分享。
  • Docker Compose:让用户可以通过简单的 YAML 文件定义和管理多容器应用。
  • Docker Swarm:原生的集群编排工具,使得 Docker 容器在集群环境下实现高可用和负载均衡。
    同时,Kubernetes 等容器编排工具的崛起,也让 Docker 成为云原生应用的核心组成部分。

二、Docker 的今生——云原生时代的明星

1. 广泛应用与产业生态

进入 2020 年代,Docker 不仅在开发和测试环境中占据重要地位,也逐渐成为生产环境中部署微服务架构的首选工具。借助其轻量级、启动快和高效资源利用的优势,Docker 成为了云平台、DevOps 和持续交付流程中的标准组件。

2. 与 Kubernetes 的协同发展

尽管 Kubernetes 已经成为主流的容器编排平台,但 Docker 依然在镜像构建与容器运行时发挥着重要作用。部分 Kubernetes 集群也使用 Docker 作为默认的容器运行时,二者形成了互补的生态系统,共同推动了云原生应用的发展。

3. 社区与开源精神

Docker 的成功离不开活跃的开源社区。全球无数开发者和企业不断为 Docker 贡献代码、撰写文档和开发插件,使其不断进化,满足各种复杂场景下的应用需求。


三、Docker 的安装方法

安装 Docker 的步骤因操作系统不同而略有差异,下面以 Ubuntu、CentOS 以及 Windows/Mac 为例说明:

1. 在 Ubuntu 上安装 Docker

  1. 更新软件包索引:
    sudo apt-get update
    
  2. 安装必要的依赖包:
    sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    
  3. 添加 Docker 官方 GPG 密钥:
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    
  4. 设置稳定版仓库:
    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:
    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io
    
  6. 验证安装:
    sudo docker run hello-world
    
    若能成功输出欢迎信息,则说明 Docker 安装成功。

2. 在 CentOS 上安装 Docker

  1. 卸载旧版本(若有):
    sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
    
  2. 安装必要的软件包:
    sudo yum install -y yum-utils
    
  3. 设置稳定仓库:
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
  4. 安装 Docker Engine:
    sudo yum install docker-ce docker-ce-cli containerd.io
    
  5. 启动 Docker 并设置开机启动:
    sudo systemctl start docker
    sudo systemctl enable docker
    
  6. 测试 Docker 是否正常工作:
    sudo docker run hello-world
    

3. 在 Windows 和 macOS 上安装 Docker

  • Windows:
    1. 访问 Docker Desktop for Windows 下载页面下载安装包。
    2. 双击安装包,根据向导完成安装。
    3. 安装完成后,重启计算机,并启动 Docker Desktop 进行配置。
  • macOS:
    1. 访问 Docker Desktop for Mac 下载页面下载 DMG 文件。
    2. 将 Docker 拖动至“应用程序”文件夹,启动 Docker Desktop。
    3. 根据提示完成初次设置即可。

四、常见的 Docker 使用命令详解

掌握以下常用命令,可以帮助你高效管理和使用 Docker 容器和镜像:

1. 容器管理命令

2. 镜像管理命令

  • docker images
    列出本地所有的 Docker 镜像:

    docker images
    
  • docker pull
    从 Docker Hub 或其他仓库拉取指定的镜像:

    docker pull ubuntu:latest
    
  • docker build
    根据 Dockerfile 构建自定义镜像:

    docker build -t myimage:1.0 .
    
  • docker rmi
    删除本地镜像:

    docker rmi <镜像ID或名称>
    

3. 网络与数据卷

  • docker network ls
    列出所有 Docker 网络:

    docker network ls
    
  • docker volume ls
    列出所有数据卷:

    docker volume ls
    
  • docker-compose
    虽然不是 Docker Engine 的命令,但 Docker Compose 允许用户通过 YAML 文件定义和管理多容器应用,极大简化了复杂应用的部署流程。例如:

    docker-compose up -d
    

    用于在后台启动所有在 docker-compose.yml 中定义的服务。


五、如何更新 Docker 版本

在日常维护和新功能需求下,更新 Docker 版本是十分常见的操作。更新 Docker 版本前建议先备份重要的容器和数据,以防升级过程中出现意外情况。下面介绍几种常见的更新方法。

1. 更新前的准备工作

  • 检查当前版本
    在更新之前,请先查看当前的 Docker 版本,确认是否需要更新。

    docker --version
    
  • 备份数据和配置
    如果你的容器中有重要数据,建议先备份 /var/lib/docker 目录或通过容器内的备份方式保存数据。

    注意:如果不删除 /var/lib/docker 目录,更新操作通常不会清除镜像和容器,但数据安全始终是第一位的。

  • 停止 Docker 服务
    更新前最好先停止 Docker 服务,确保容器运行状态不会干扰升级过程:

    sudo systemctl stop docker
    

2. 使用包管理器更新 Docker

根据你的操作系统,可以采用相应的包管理器来升级 Docker:

  • Ubuntu/Debian 系统:
    更新软件包列表后升级 Docker CE:

    sudo apt-get update
    sudo apt-get upgrade docker-ce
    
  • CentOS/Fedora 系统:
    使用 yum 命令更新 Docker CE:

    sudo yum update docker-ce
    

    也可以先查看可用的 Docker 版本,然后指定安装某个版本:

    yum list docker-ce --showduplicates | sort -r
    sudo yum install docker-ce-<版本号>
    

    例如:

    sudo yum install docker-ce-25.0.3-1.el7
    

3. 使用 Docker 官方脚本进行更新

Docker 官方提供了一个便捷的安装脚本,该脚本不仅可用于全新安装,同样支持更新操作。操作步骤如下:

  1. 下载脚本:
    curl -fsSL https://get.docker.com -o get-docker.sh
    
  2. 运行脚本进行安装或升级:
    sudo sh get-docker.sh
    
    此方法适用于大多数 Linux 系统,并会自动安装最新稳定版本。

4. 更新后验证

更新完成后,请重新启动 Docker 服务并检查版本:

sudo systemctl start docker
sudo systemctl enable docker
docker --version

此外,也可以运行容器进行测试,确保所有服务正常:

docker run hello-world

5. 更新中常见问题及注意事项

  • 兼容性检查:
    升级前请确认当前容器和镜像与新版本 Docker 兼容,有时 Docker 更新可能会引入不兼容的变更(例如 docker-runc 的参数问题),必要时请参照官方文档或社区经验进行调整。

  • 日志与错误排查:
    如果升级后遇到问题,查看 Docker 日志可以帮助定位错误原因:

    sudo journalctl -u docker
    
  • 备份恢复:
    更新前如果重命名或备份了 /var/lib/docker 目录,更新后可将数据恢复到原路径,确保容器、镜像和数据不丢失。


通过以上步骤,你可以根据自己的系统环境和安装方式选择合适的更新方法,顺利将 Docker 升级到最新版本,从而享受到新特性和更稳定的运行环境。

六、总结

Docker 从最初借助 Linux 内核的容器技术起步,到如今成为云原生时代不可或缺的工具,其发展历程充分体现了技术演进与社区创新的力量。无论是在开发、测试还是生产环境中,Docker 都能帮助团队更快地构建、部署和扩展应用。掌握 Docker 的安装方法及常用命令,不仅能提高运维效率,也为深入了解容器编排、微服务架构以及持续交付打下坚实基础。

随着容器化技术和云计算的发展,Docker 生态系统还将不断扩展,为软件交付和系统管理带来更多的创新和便利。希望这篇文章能为你打开 Docker 的大门,助你在技术路上更进一步。


http://www.ppmy.cn/news/1573254.html

相关文章

Django 创建表时 “__str__ ”方法的使用

在 Django 模型中&#xff0c;__str__ 方法是一个 Python 特殊方法&#xff08;也称为“魔术方法”&#xff09;&#xff0c;用于定义对象的字符串表示形式。它的作用是控制当对象被转换为字符串时&#xff0c;应该返回什么样的内容。 示例&#xff1a; 我在初学ModelForm时尝…

Ollama+DeepSeek+Open-WebUi

环境准备 Docker Ollama Open-WebUi Ollama 下载地址&#xff1a;Ollama docker安装ollama docker run -d \ -v /data/ollama/data:/root/.ollama \ -p 11434:11434 \ --name ollama ollama/ollama 下载模型 Ollama模型仓库 # 示例&#xff1a;安装deepseek-r1:7b doc…

SpringMVC重定向接口,参数暴露在url中解决方案!RedirectAttributes

OK&#xff0c;首先描述下业务场景&#xff0c;终端数量限制登录 1.首先访问项目login的get接口 2.输入账号密码点击登录后&#xff0c;会请求login的POST接口 3.后台对终端数量逻辑处理不允许登录跳回到登录页面 4.因代码原因需在后台进行多次重定向接口&#xff0c;最后跳…

说下JVM中一次完整的GC流程?

大家好&#xff0c;我是锋哥。今天分享关于【说下JVM中一次完整的GC流程?】面试题。希望对大家有帮助&#xff1b; 说下JVM中一次完整的GC流程? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 JVM中的一次完整的垃圾回收&#xff08;GC&#xff09;流程可以概括为…

【Spring Boot】网页五子棋项目中遇到的困难及解决方法

目录 一、HikariPool-1 - Starting异常二、Invalid bound statement (not found)异常三、The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary异常四、The server time zone value时区报错异常五、补充知识点…

deepseek:三个月备考高级系统架构师

一、备考总体规划&#xff08;2025年2月11日 - 2025年5月&#xff09; 1. 第一阶段&#xff1a;基础夯实&#xff08;2025年2月11日 - 2025年3月10日&#xff09; 目标&#xff1a;快速掌握系统架构师考试的核心知识点。 重点内容&#xff1a; 计算机组成原理、操作系统、数据…

12、《Spring Data JPA:极简数据库操作实战》

《Spring Data JPA&#xff1a;极简数据库操作实战》 开篇&#xff1a;为什么需要Spring Data JPA&#xff1f; 在Java企业级开发中&#xff0c;数据库操作往往是业务代码的核心&#xff0c;但传统的JDBC或ORM框架&#xff08;如MyBatis&#xff09;需要开发者编写大量模板化…

DeepSeek-R1 蒸馏 Qwen 和 Llama 架构 企业级RAG知识库

“DeepSeek-R1的输出&#xff0c;蒸馏了6个小模型”意思是利用DeepSeek-R1这个大模型的输出结果&#xff0c;通过知识蒸馏技术训练出6个参数规模较小的模型&#xff0c;以下是具体解释&#xff1a; - **知识蒸馏技术原理**&#xff1a;知识蒸馏是一种模型压缩技术&#xff0c;核…