第1章:Docker入门:容器技术发展史、Docker核心概念、Docker与虚拟机对比、Docker安装与验证

1.1 容器技术发展史:从chroot到Docker

聊容器技术,得先说说它的前世今生。我刚开始接触服务器运维那会儿,用的还是物理机部署,一台机器跑一个应用,资源浪费得让人心疼。

容器技术的萌芽,其实可以追溯到1979年的chroot。说白了,chroot就是给进程换个根目录,让它以为自己独占整个系统。嗯,这想法很朴素,但确实管用。

后来到了2000年,FreeBSD搞出了jail技术,算是真正意义上的容器雏形。2005年,Solaris推出了Zone,再后来就是Linux的cgroups和Namespace。这些技术,说白了都是在做同一件事——隔离。

我记得2013年Docker刚出来那会儿,圈子里炸开了锅。为什么?因为Docker把之前那些零散的技术整合到了一起,还搞了个镜像分层机制。你想想看,以前部署个应用要配环境、装依赖,折腾半天。有了Docker,一个命令就搞定了。

关键时间节点:

  • 1979年:chroot系统调用诞生
  • 2000年:FreeBSD Jails
  • 2005年:Solaris Zones
  • 2008年:LXC(Linux Containers)
  • 2013年:Docker正式发布
  • 2015年:OCI(Open Container Initiative)成立

1.2 Docker核心概念:镜像、容器、仓库

Docker有三个核心概念,我建议你把它刻在脑子里:镜像、容器、仓库。

镜像(Image):你可以把它理解成一个只读的模板。里面装好了操作系统、应用代码、依赖库,啥都有。我在项目中遇到过有人把镜像比作「类」,容器比作「对象」,这个比喻挺贴切的。

容器(Container):镜像跑起来就是容器。它是可读写的,你可以进去改东西、装软件。但要注意,容器一旦删除,里面的改动就全没了。我曾经犯过这个错——在容器里改了配置文件,没提交到镜像,结果容器一删,配置全丢了。

仓库(Registry):存放镜像的地方。Docker Hub是官方的公共仓库,企业一般会用私有的Harbor或Nexus。

我的小建议:刚开始学Docker,别急着搞复杂的概念。先记住「镜像做菜谱,容器是炒好的菜,仓库是菜谱库」这个比喻,后面理解起来会顺很多。

1.3 Docker与虚拟机对比:为什么选Docker?

很多人问我:Docker和虚拟机到底有啥区别?我一般会反问一句:你见过虚拟机启动要多久?

虚拟机有完整的操作系统,包括内核。Docker直接共享宿主机的内核。这就导致了几个关键差异:

对比项 Docker容器 虚拟机
启动速度 秒级 分钟级
磁盘占用 MB级别 GB级别
性能损耗 几乎无 有一定损耗
隔离性 进程级隔离 完全隔离
内核 共享宿主机内核 独立内核

说白了,Docker适合跑微服务、做CI/CD、搞快速部署。虚拟机适合需要强隔离的场景,比如不同租户之间的隔离。

注意:Docker的隔离性不如虚拟机。如果你在容器里跑不信任的代码,建议还是用虚拟机。我在安全审计项目中见过因为容器逃逸导致宿主机被攻破的案例,嗯,那场面挺惨的。

1.4 Docker安装与验证:动手实践

光说不练假把式。咱们现在就把Docker装上。

Linux(Ubuntu/Debian)安装:

# 更新包索引
sudo apt-get update

# 安装依赖
sudo apt-get install -y ca-certificates curl gnupg lsb-release

# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 设置稳定版仓库
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

# 安装Docker引擎
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

# 启动Docker
sudo systemctl start docker
sudo systemctl enable docker

验证安装:

# 查看Docker版本
docker --version

# 运行Hello World
docker run hello-world

# 查看运行中的容器
docker ps

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

我第一次跑 docker run hello-world 的时候,看到那个欢迎信息,心里还挺激动的。你想想看,一行命令就拉取镜像、创建容器、运行程序,这在以前得折腾半天。

避坑指南:如果你用的是非root用户,记得把用户加到docker组里:sudo usermod -aG docker $USER。然后退出重新登录。我曾经忘了这一步,结果每次都要加sudo,烦得很。

Mac/Windows安装:

直接去Docker官网下载Docker Desktop安装包就行。安装完打开,等右下角的小鲸鱼图标稳定下来,就说明跑起来了。

验证方法一样,打开终端跑 docker --versiondocker run hello-world

安装后必做三件事:

  1. 验证版本:docker version 确认客户端和服务端都正常
  2. 跑个测试:docker run hello-world 验证整个链路
  3. 查看信息:docker info 了解Docker环境详情

好了,Docker装上了,核心概念也捋了一遍。下一章咱们聊聊Docker镜像的构建和管理,到时候我会分享一些我在生产环境中踩过的坑。