1. Docker入门:从零认识容器化
大家好,我是你们的讲师。今天咱们聊聊Docker的入门知识。说实话,我接触Docker是在2015年,那时候它还是个新鲜玩意儿。记得我第一次在服务器上部署Docker时,差点把生产环境搞崩了——嗯,这事儿后面细说。
1.1 Docker发展史:一个意外的成功
Docker的故事,得从2013年说起。当时dotCloud公司(就是后来的Docker Inc.)内部有个叫Solomon Hykes的工程师,他搞了个内部工具,想解决“在我机器上能跑”这个老大难问题。
结果你猜怎么着?这个工具火了。2013年3月,Docker正式开源,整个技术圈都炸了。为什么?因为它解决了部署的痛点。我当年在传统企业做运维,每次上线新服务,光环境配置就得折腾半天。Docker一出来,我心想:这不就是我要的“一键部署”吗?
后来Docker的发展速度惊人:
- 2014年:Docker 1.0发布,开始支持生产环境
- 2015年:Docker Compose、Docker Swarm相继推出
- 2017年:Moby项目诞生,Docker开始分化
- 2019年至今:Docker被Mirantis收购,但生态依然活跃
核心观点:Docker不是凭空出现的。它站在了Linux容器技术(LXC)的肩膀上,但做了两件关键的事:一是让容器变得轻量易用,二是建立了镜像分发标准。说白了,它把“集装箱”的概念搬到了软件世界。
1.2 Docker核心概念:镜像、容器、仓库
这三个概念,我建议你把它理解成“做菜”的过程:
- 镜像(Image):就是菜谱。它定义了你要做什么菜、需要哪些原料、步骤是什么。镜像是只读的,不能修改。
- 容器(Container):就是按菜谱做出来的菜。它是镜像的运行实例,可以启动、停止、删除。每个容器都是隔离的。
- 仓库(Registry):就是菜谱的图书馆。Docker Hub就是最大的公共图书馆,你可以从上面下载别人做好的菜谱(镜像),也可以上传自己的。
我在项目中遇到过一个问题:有同事把镜像和容器搞混了,以为删了容器镜像也没了。结果重新部署时发现镜像还在,但容器没了——嗯,这其实是个常见误区。
小技巧:记住这个命令 docker run。它其实是两步:先拉取镜像(如果没有的话),再创建并启动容器。我习惯用 docker run --name myapp -d nginx 来快速启动一个Nginx容器做测试。
1.3 Docker与虚拟机的区别
这个问题,面试时经常被问到。我直接给你画个对比表:
| 特性 | Docker容器 | 虚拟机 |
|---|---|---|
| 启动速度 | 秒级(毫秒级都有可能) | 分钟级 |
| 资源占用 | 极低(共享宿主机内核) | 较高(每个VM有完整OS) |
| 隔离级别 | 进程级隔离 | 硬件级虚拟化 |
| 镜像大小 | 通常MB级别 | GB级别 |
| 适用场景 | 微服务、DevOps、CI/CD | 需要完整OS、强隔离场景 |
说白了,Docker和虚拟机不是替代关系,而是互补。我曾经在项目中同时用Docker和虚拟机:虚拟机跑数据库(需要强隔离),Docker跑应用服务(需要快速扩缩容)。
避坑指南:我曾经在Windows上用Docker Desktop跑生产环境,结果发现性能损耗很大。后来才明白,Docker在Linux上才是原生体验。如果你用Mac或Windows,建议用虚拟机跑Linux再装Docker。
1.4 Docker安装与验证
安装Docker其实很简单。我以Ubuntu 20.04为例,给你演示一下:
# 1. 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 2. 安装依赖
sudo apt-get update
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 Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 6. 启动Docker
sudo systemctl start docker
sudo systemctl enable docker
# 7. 验证安装
sudo docker run hello-world
看到 Hello from Docker! 的提示,就说明安装成功了。我习惯再跑一个命令验证:
docker version
# 输出示例:
# Client: Docker Engine - Community
# Version: 24.0.7
# API version: 1.43
# Go version: go1.20.10
# ...
# Server: Docker Engine - Community
# Engine:
# Version: 24.0.7
# API version: 1.43 (minimum version 1.12)
# ...
个人习惯:安装完后,我会把当前用户加入docker组,这样就不用每次加sudo了:
sudo usermod -aG docker $USER
newgrp docker
注意:加完组后要重新登录才能生效。我曾经忘了这一步,结果折腾了半天才发现是权限问题。
最后,再分享一个我常用的验证脚本:
#!/bin/bash
# 快速验证Docker环境
echo "=== Docker版本 ==="
docker --version
echo "=== Docker信息 ==="
docker info | grep -E "Containers|Images|Server Version"
echo "=== 运行测试容器 ==="
docker run --rm alpine echo "Docker环境正常!"
好了,这就是Docker入门的第一课。记住:镜像、容器、仓库这三个概念,是理解Docker的基石。下一章,咱们聊聊Docker镜像的构建和管理——这可是实战中的重头戏。