1. Docker入门:为什么你需要它

第一次接触Docker时,我和大多数人一样困惑:这玩意儿到底有什么用?直到有次部署项目,在本地跑得好好的服务,上了服务器就各种报错,折腾了整整两天。后来用了Docker,同样的问题五分钟就解决了——这就是容器的魔力。

简单来说,Docker就像快递行业的标准化集装箱。想象一下,以前运输货物要针对不同物品单独包装(好比传统部署要配置不同环境),现在所有东西都放进标准集装箱(Docker容器),卡车(服务器)直接拉走就行。三大核心组件构成了Docker的生态系统:

  • 镜像(Image):好比集装箱的设计图纸,包含完整的运行环境
  • 容器(Container):根据图纸造出来的实体集装箱,即运行中的服务
  • 仓库(Registry):存放图纸的仓库,Docker Hub是最大的"图纸市场"

实际开发中最爽的是环境一致性。上周我帮同事调试代码,他电脑是Windows+Python3.8,我的是Mac+Python3.10。用Docker后,只需一句docker-compose up,两边的运行环境完全一致,再也不用说"在我机器上好好的"这种话了。

2. 手把手安装Docker

2.1 环境准备

以CentOS 7为例(其他系统可参考官方文档),先确认系统符合要求:

# 查看内核版本(需3.10以上)
uname -r
# 检查系统版本
cat /etc/os-release

遇到过最坑的情况是某些云主机默认没开cgroups(Docker依赖的Linux功能)。如果安装失败,先执行:

sudo yum install -y device-mapper-persistent-data lvm2

2.2 官方安装方式

# 卸载旧版本(如果有)
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

# 安装工具包
sudo yum install -y yum-utils

# 设置官方仓库(国内推荐换成阿里云源)
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装引擎
sudo yum install docker-ce docker-ce-cli containerd.io

2.3 验证安装

启动服务后跑个测试:

sudo systemctl start docker
sudo docker run hello-world

如果看到"Hello from Docker!"的欢迎信息,说明安装成功。第一次可能会卡在pull镜像,别急,下一节就解决这个问题。

3. 阿里云镜像加速配置

3.1 为什么需要加速

默认从Docker Hub拉镜像就像用2G网络下电影,特别是初次使用时。实测在AWS东京节点pull一个500MB的镜像:

  • 默认源:平均速度200KB/s,耗时约40分钟
  • 阿里云加速后:8MB/s,只要1分钟

3.2 获取专属加速地址

  1. 登录阿里云容器镜像服务控制台
  2. 左侧菜单选择"镜像加速器"
  3. 复制属于你的加速器地址(每个账号不同)

3.3 配置方法

创建配置文件并重启服务:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://你的专属ID.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

验证配置是否生效:

docker info | grep Mirrors -A 1

应该能看到你配置的阿里云地址。曾经有学员把JSON格式写错导致Docker无法启动,建议直接用上面的tee命令避免格式问题。

4. 实战:用加速器部署Nginx

4.1 拉取镜像对比测试

先清空本地镜像:

docker rmi nginx

用阿里云源拉取:

time docker pull nginx

正常情况下应该能看到速度明显提升,time命令会显示实际耗时。我最近一次测试只用了17秒。

4.2 运行测试容器

docker run -d -p 8080:80 --name my-nginx nginx

访问服务器IP:8080应该能看到Nginx欢迎页。这里有个实用技巧:如果8080被占用,Docker会报错。可以改成-p 8081:80使用其他端口。

4.3 常见问题排查

如果访问不了,按这个顺序检查:

  1. docker ps查看容器是否运行
  2. docker logs my-nginx看日志
  3. 服务器安全组是否开放8080端口
  4. 本地防火墙设置(CentOS7执行sudo firewall-cmd --add-port=8080/tcp --permanent && sudo firewall-cmd --reload

5. 进阶技巧与维护

5.1 镜像管理

查看下载的镜像:

docker images

清理无用镜像(谨慎操作):

docker image prune -a

5.2 容器生命周期

停止/启动容器:

docker stop my-nginx
docker start my-nginx

删除容器(加-v会同时删除关联的匿名卷):

docker rm -v my-nginx

5.3 修改配置后重启

每次修改daemon.json都需要:

sudo systemctl restart docker

建议在维护窗口操作,会短暂影响正在运行的容器。

刚开始用Docker时,我总喜欢把所有命令都记在笔记里。后来发现docker --help和官方文档才是最好的老师。比如忘记参数时,直接docker run --help就能看到所有选项说明。

更多推荐