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的常用命令和实战操作。到时候我会分享一些我在生产环境中踩过的坑,保证让你少走弯路。