1、Docker基础入门:Docker是什么、Docker与传统虚拟化对比、Docker核心概念(镜像、容器、仓库)、安装Docker引擎(Linux/Windows/Mac)

1.1 Docker到底是什么?

说实话,我第一次接触Docker的时候,也觉得很抽象。简单来说,Docker就是一个「集装箱」系统。你把你的应用和它需要的所有依赖——代码、运行时、系统工具、库——全部打包进一个标准化的单元里。这个单元,就是容器。

我习惯这么跟新人解释:以前我们部署应用,最怕的就是「在我机器上跑得好好的啊」。环境不一致、依赖冲突、操作系统版本差异……这些问题,Docker一次性帮你解决了。你想想看,只要你的应用被打包成Docker镜像,不管扔到哪台机器上,运行结果都是一模一样的。

Docker基于Linux内核的容器技术(比如cgroups和命名空间),但它把这些底层技术封装得极其易用。说白了,Docker就是让你像管理普通进程一样,去管理你的应用环境。

1.2 Docker与传统虚拟化对比

很多刚接触Docker的朋友会问:这不就是虚拟机吗?其实差别很大。我画个简单的对比表,你一看就明白了。

对比维度 传统虚拟机 Docker容器
启动速度 分钟级(需要启动完整操作系统) 秒级(直接运行在宿主机内核上)
资源占用 大(每个VM包含完整OS) 小(共享宿主机内核)
性能 有损耗(硬件虚拟化层) 接近原生(直接调用宿主机资源)
隔离性 强(完全独立的OS) 进程级隔离(共享内核)
镜像大小 GB级别(包含完整OS) MB级别(只包含应用和依赖)
迁移性 较差(依赖特定虚拟化平台) 极好(一次构建,到处运行)

我在项目中遇到过这样的情况:一个微服务架构的应用,如果用虚拟机部署,一台物理机顶多跑3-5个服务。换成Docker后,同样的硬件资源,轻松跑上几十个容器。这就是资源利用率的巨大差异。

核心区别一句话总结:虚拟机虚拟的是硬件,Docker虚拟的是操作系统。所以Docker更轻、更快、更省资源。

1.3 Docker核心概念

要玩转Docker,三个概念必须吃透:镜像、容器、仓库。我一个个说。

1.3.1 镜像(Image)

镜像就是一个只读的模板。它包含了运行某个应用所需的一切——代码、运行时、库、环境变量、配置文件。你可以把镜像理解成「类」,是静态的定义。

镜像采用分层构建的方式。每一层都是只读的,当你修改镜像时,实际上是在原有层之上叠加新的层。这种设计有什么好处?我举个例子:你有一个基础镜像ubuntu:20.04,然后基于它安装了Python,再安装了你的应用代码。如果你要更新应用代码,只需要替换最上面那一层,底下的ubuntu和Python层完全复用。磁盘空间和网络带宽都省了。

我的习惯:写Dockerfile时,尽量把不常变动的层放在前面,经常变动的层放在后面。这样能最大化利用缓存,构建速度能快好几倍。

1.3.2 容器(Container)

容器是镜像的运行实例。镜像跑起来之后,就变成了容器。你可以把容器理解成「对象」,是动态的实体。

容器有自己的文件系统、网络配置、进程空间。但它和宿主机共享内核。所以容器内的进程,本质上就是宿主机上的一个进程,只不过被隔离了。

嗯,这里要注意:容器是轻量的,但不是无状态的。如果你在容器里写入了数据,容器删除后数据就没了。所以生产环境中,持久化数据一定要用卷(Volume)或者绑定挂载。

1.3.3 仓库(Registry)

仓库就是存放镜像的地方。最著名的公共仓库是Docker Hub。你可以从仓库拉取(pull)别人做好的镜像,也可以把自己构建的镜像推送(push)到仓库。

我曾经踩过一个坑:公司内网环境无法访问Docker Hub,结果部署时镜像拉不下来。后来我们搭建了私有仓库Harbor,把所有基础镜像提前同步到内网。这个教训告诉我——生产环境一定要有私有仓库,别依赖外网。

1.4 安装Docker引擎

不同操作系统安装方式略有不同。我分别说一下。

1.4.1 Linux(以Ubuntu为例)

Linux下安装Docker最直接。我个人推荐用官方脚本一键安装:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

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

sudo usermod -aG docker $USER
newgrp docker

验证安装是否成功:

docker --version
docker run hello-world

注意:把用户加入docker组相当于赋予了该用户root权限,因为docker组用户可以操作宿主机上的任何资源。生产环境中要谨慎管理。

1.4.2 Windows

Windows上安装Docker Desktop很简单。去官网下载安装包,双击安装就行。安装过程中会提示启用WSL2(Windows Subsystem for Linux),我建议你启用。WSL2的性能比之前的Hyper-V方案好很多。

安装完成后,Docker Desktop会在系统托盘中运行。你可以打开命令行试试:

docker --version
docker run hello-world

Windows下有个小坑:默认的镜像存储位置在C盘,时间长了C盘容易爆。我习惯在Docker Desktop的设置里,把镜像存储路径改到其他盘。

1.4.3 Mac

Mac上同样用Docker Desktop。下载.dmg文件,拖到Applications文件夹就行。Mac版也推荐用Apple Silicon芯片的版本,性能更好。

安装后,菜单栏会出现Docker图标。点击可以查看状态和设置。同样,跑一下hello-world验证:

docker run hello-world

Mac上我遇到过一个问题:Docker Desktop默认分配的资源(CPU、内存)比较保守。如果你要跑多个容器,建议在设置里把内存调到4GB以上,CPU核心数也适当增加。

1.5 验证安装与基本命令

不管哪个平台,安装完成后,跑几个命令确认一切正常:

# 查看Docker版本
docker version

# 查看系统信息
docker info

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

# 列出所有容器
docker ps -a

# 列出本地镜像
docker images

如果docker run hello-world能正常输出信息,恭喜你,Docker环境已经准备好了。

我的建议:刚装好Docker,别急着跑复杂应用。先玩几个简单的命令,感受一下容器的启动速度。你试试docker run -it ubuntu bash,几秒钟就能进到一个干净的Ubuntu环境里。这种体验,虚拟机给不了你。

好了,第一章的内容就到这里。Docker的基本概念和安装你已经掌握了。下一章,我们会深入Dockerfile的编写和镜像构建,那才是真正开始「造轮子」的时候。