1. Docker入门:Docker是什么、Docker与传统虚拟化对比、Docker核心概念(镜像、容器、仓库)、Docker安装与验证

1.1 Docker到底是什么?

说实话,我第一次接触Docker的时候,也觉得很玄乎。说白了,Docker就是一个「集装箱」管理系统。你想想看,以前我们部署一个应用,要装环境、配依赖、调参数,折腾半天。换台机器,又得重来一遍。

Docker把应用和它需要的所有东西——代码、运行时、系统工具、库——打包成一个标准单元。这个单元叫「镜像」。拿到镜像,不管在哪儿都能跑起来,而且行为完全一致。

我在项目中遇到过最典型的场景:开发环境跑得好好的,一上测试服务器就报错。排查半天,发现是系统库版本不一致。用Docker之后,这种问题基本绝迹了。

一句话总结:Docker是一个轻量级的容器化平台,让你能把应用「打包一次,到处运行」。

1.2 Docker vs 传统虚拟化

很多人会把Docker和虚拟机搞混。我刚开始也犯过这个错。它们到底差在哪儿?

对比维度 传统虚拟机 Docker容器
启动速度 分钟级(要启动完整OS) 秒级(共享宿主机内核)
资源占用 大(每个VM有独立OS) 小(共享OS内核)
隔离级别 完全隔离(硬件级) 进程级隔离(内核命名空间)
镜像大小 几个GB起步 几十MB到几百MB
部署密度 一台机器跑几个VM 一台机器跑几十上百个容器

为什么会这样?虚拟机是在硬件层面做虚拟化,每个VM都要装完整的操作系统。Docker直接利用宿主机的Linux内核,只隔离进程和文件系统。说白了,Docker就是「轻量级」的代名词。

我记得有一次给客户做方案,他们原本用VM部署微服务,16台物理机才跑下20个服务。换成Docker后,4台机器就搞定了。成本直接砍掉一大半。

我的建议:如果你需要运行不同操作系统(比如Windows和Linux),或者对安全隔离要求极高,选虚拟机。其他场景,Docker基本是更优解。

1.3 三个核心概念:镜像、容器、仓库

这三个概念,你搞懂了,Docker就算入门了。我习惯用一个类比来解释:

  • 镜像(Image) —— 就像做蛋糕的「配方」和「模具」。它是只读的模板,包含了运行应用所需的一切。
  • 容器(Container) —— 用配方做出来的「蛋糕」。它是镜像的运行实例,可以启动、停止、删除。
  • 仓库(Registry) —— 存放配方的「图书馆」。你可以从图书馆下载配方,也可以把自己做的配方上传分享。

镜像(Image)

镜像是分层构建的。每一层代表一个文件系统的变更。这样做的好处是:多个镜像可以共享底层,节省磁盘空间。我在项目中见过一个团队,100多个微服务镜像,底层基础镜像都一样,实际占用的空间比想象中小得多。

容器(Container)

容器是镜像的实例化。你可以理解成:镜像是一个类(Class),容器是它的对象(Object)。同一个镜像可以启动多个容器,互不干扰。

嗯,这里要注意:容器是有生命周期的。创建、运行、暂停、停止、删除。我见过不少新手,容器跑完不清理,结果磁盘爆了。

仓库(Registry)

最常用的公共仓库是Docker Hub。你可以把它想象成GitHub,只不过存的是镜像。企业内部一般会搭建私有仓库,比如Harbor。

避坑指南:我曾经在Docker Hub上直接拉取了一个第三方镜像,结果里面藏了挖矿脚本。从那以后,我坚持只用官方镜像或自己构建的镜像。安全第一。

1.4 Docker安装与验证

安装Docker其实很简单。我以Ubuntu为例,其他系统大同小异。

安装步骤

# 1. 更新包索引
sudo apt-get update

# 2. 安装依赖包
sudo apt-get install \
    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引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 6. 验证安装
sudo docker run hello-world

看到「Hello from Docker!」就说明安装成功了。

验证Docker是否正常工作

# 查看Docker版本
docker --version

# 查看系统信息
docker info

# 运行一个测试容器
docker run hello-world

# 查看正在运行的容器
docker ps

# 查看所有容器(包括已停止的)
docker ps -a

小技巧:安装完成后,记得把当前用户加入docker组,这样就不用每次敲sudo了。

sudo usermod -aG docker $USER
# 退出重新登录后生效

验证Docker网络

# 查看Docker网络
docker network ls

# 创建一个测试网络
docker network create test-net

# 启动一个Nginx容器并连接到测试网络
docker run -d --name web --network test-net nginx:alpine

# 验证容器是否正常运行
docker ps

# 访问Nginx(如果在本机)
curl http://localhost:80

如果看到Nginx的欢迎页面,恭喜你,Docker环境已经完全就绪了。

总结一下:Docker的核心价值在于「标准化」和「轻量化」。镜像让你告别环境不一致的噩梦,容器让你用更少的资源跑更多的应用。安装过程虽然步骤多,但基本不会出问题。如果遇到权限问题,多半是用户组没加对。

好了,这一章的内容就到这里。下一章我们会深入Docker的常用命令和实战操作。到时候我会分享一些我在生产环境中踩过的坑,保证让你少走弯路。