1. Docker 快速入门实操指南
作为一名在容器化领域摸爬滚打多年的老手,我经常被问到"如何快速上手Docker"。今天就用最直白的方式,带你在30分钟内完成从安装到运行第一个容器的完整流程。不同于官方文档的学院派风格,这里只讲真正需要掌握的实战要点。
Docker本质上是一个轻量级虚拟机,但它比传统VM快得多也小得多。想象你搬家时用集装箱运输物品——Docker容器就是软件世界的标准化集装箱。它能将应用及其依赖环境打包成独立单元,实现"一次构建,到处运行"的效果。下面我会用做菜来类比Docker的核心组件:
- 镜像(Image) = 菜谱
- 容器(Container) = 按菜谱做出来的菜
- 仓库(Registry) = 共享菜谱的云盘
重要提示:所有命令在Linux/macOS的终端或Windows的PowerShell中执行,遇到权限问题在命令前加sudo
1.1 环境准备与安装
Windows/macOS用户: 直接下载 Docker Desktop ,安装后会在任务栏看到鲸鱼图标。首次启动需要等待"Starting Docker Engine..."初始化完成。
Linux用户(以Ubuntu为例):
# 卸载旧版本 sudo apt-get remove docker docker-engine docker.io containerd runc # 安装依赖 sudo apt-get update sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release # 添加官方GPG密钥 sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 设置稳定版仓库 echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.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 docker-ce docker-ce-cli containerd.io docker-compose-plugin # 验证安装 sudo docker run hello-world安装完成后,建议执行以下配置:
# 将当前用户加入docker组(避免每次sudo) sudo usermod -aG docker $USER newgrp docker # 立即生效 # 配置国内镜像加速(解决拉取镜像慢的问题) sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://hub-mirror.c.163.com", "https://mirror.baidubce.com" ] } EOF sudo systemctl daemon-reload sudo systemctl restart docker2. 核心概念速成课
2.1 镜像(Image)操作三板斧
搜索镜像(就像在应用商店找APP):
docker search nginx拉取镜像(下载软件安装包):
docker pull nginx:latest # 明确指定标签 docker pull nginx # 默认latest标签管理本地镜像:
docker images # 查看已下载镜像 docker rmi nginx # 删除镜像 docker image prune # 清理悬空镜像2.2 容器(Container)生命周期管理
启动容器的经典姿势:
docker run -d -p 8080:80 --name my_nginx nginx参数解读:
-d:后台运行(detach模式)-p 主机端口:容器端口:端口映射--name:给容器起个名字(否则系统随机分配)
查看容器状态:
docker ps # 查看运行中的容器 docker ps -a # 查看所有容器(包括已停止的) docker stats # 实时资源监控与容器交互:
docker exec -it my_nginx bash # 进入容器内部 docker logs -f my_nginx # 查看实时日志停止/删除容器:
docker stop my_nginx # 优雅停止 docker rm my_nginx # 删除容器 docker container prune # 清理停止的容器3. 实战:部署Python Web应用
我们通过一个Flask应用的容器化案例,演示完整工作流:
3.1 准备应用代码
创建项目目录并新建app.py:
from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return "Hello Docker!" if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)3.2 编写Dockerfile
# 使用官方Python轻量级镜像作为基础 FROM python:3.9-slim # 设置工作目录 WORKDIR /app # 复制依赖文件 COPY requirements.txt . # 安装依赖 RUN pip install --no-cache-dir -r requirements.txt # 复制应用代码 COPY . . # 暴露端口 EXPOSE 5000 # 启动命令 CMD ["python", "app.py"]创建requirements.txt:
flask==2.0.13.3 构建与运行
# 构建镜像(注意最后的点表示当前目录) docker build -t my_flask_app . # 运行容器 docker run -d -p 5000:5000 my_flask_app # 访问测试 curl http://localhost:50004. 数据持久化与网络配置
4.1 数据卷(Volume)管理
容器本身是临时的,重要数据需要持久化:
# 创建命名卷 docker volume create my_data # 使用数据卷 docker run -d -v my_data:/data nginx # 查看卷信息 docker volume inspect my_data4.2 容器网络互联
Docker提供多种网络模式:
# 创建自定义网络 docker network create my_network # 将容器接入同一网络 docker run -d --net=my_network --name web nginx docker run -it --net=my_network alpine ping web5. 常见问题排雷指南
镜像拉取慢:
- 配置国内镜像源(前文已介绍)
- 或者直接指定国内仓库:
docker pull registry.cn-hangzhou.aliyuncs.com/library/nginx
端口冲突:
# 查看端口占用 netstat -tulnp | grep 8080 # 或者改用其他端口 docker run -d -p 8081:80 nginx容器启动后立即退出:
- 检查CMD命令是否正确
- 添加交互模式调试:
docker run -it --entrypoint=/bin/sh my_image
磁盘空间不足:
# 查看磁盘占用 docker system df # 深度清理 docker system prune --all --volumes6. 进阶路线建议
掌握基础操作后,可以继续探索:
- Docker Compose(多容器编排)
- Dockerfile优化(多阶段构建)
- 容器安全扫描(trivy工具)
- 生产环境部署(日志、监控方案)
我个人的经验是:先熟练单容器操作,再学编排工具。遇到问题多查docker --help,官方文档其实写得很详细。记住每个容器最好只跑一个进程,这是微服务架构的核心哲学。