← 返回目录
Day 1 2026-05-18 Linux进阶 🟡 中

Docker基础入门

docker 基础入门

DevOps 第一块基石。理解 docker,就理解了现代应用部署的底层逻辑。


一、核心概念

1.1 什么是 docker

docker 是一个容器化平台,将应用程序及其依赖项打包成一个标准化的单元(容器),在任何支持 docker 的环境中都能一致地运行。

一句话概括:"Build once, run anywhere"——一次构建,处处运行。

1.2 三个核心概念

概念 说明 类比
镜像(Image) 只读模板,包含应用代码 + 运行时 + 系统工具 + 库文件 类 / 蓝图
容器(Container) 镜像的运行实例,可读可写,相互隔离 对象 / 房子
仓库(Registry) 存储和分发镜像的服务 代码托管平台

1.3 docker vs 虚拟机

维度 虚拟机(VM) docker 容器
隔离级别 完整 Guest OS(GB 级) 进程级隔离,共享内核(MB 级)
启动速度 分钟级 秒级
资源占用 极低
适用场景 异构系统、强隔离需求 微服务、CI/CD、快速迭代

二、docker 架构

┌─────────────────────────────────────────┐
│               docker Host               │
│  ┌──────────────┐  ┌──────────────┐   │
│  │  Container A │  │  Container B │   │
│  │  (nginx:1.25)│  │  (redis:7.2) │   │
│  └──────────────┘  └──────────────┘   │
│          ↕ 共享内核                     │
│  ┌──────────────────────────────┐      │
│  │        docker Engine          │      │
│  │  dockerd + containerd + runc  │      │
│  └──────────────────────────────┘      │
└─────────────────────────────────────────┘

关键组件: - dockerddocker 守护进程,负责管理镜像、容器、网络等 - containerd:容器运行时,管理容器生命周期 - runc:OCI 容器运行时,真正执行容器启动


三、常用命令速查

3.1 镜像操作

# 搜索镜像
docker search nginx

# 拉取镜像
docker pull nginx:1.25

# 查看本地镜像
docker images

# 删除镜像
docker rmi nginx:1.25

3.2 容器操作

# 启动容器(前台运行)
docker run nginx:1.25

# 启动容器(后台运行)
docker run -d -p 80:80 --name my-nginx nginx:1.25

# 查看运行中的容器
docker ps

# 查看所有容器(含已停止)
docker ps -a

# 停止容器
docker stop my-nginx

# 启动已停止的容器
docker start my-nginx

# 删除容器
docker rm my-nginx

3.3 日志与调试

# 查看容器日志
docker logs my-nginx

# 实时跟踪日志
docker logs -f my-nginx

# 进入容器内部
docker exec -it my-nginx bash

# 查看容器资源占用
docker stats

3.4 镜像构建

# Dockerfile 示例
FROM nginx:1.25-alpine       # 基础镜像
COPY index.html /usr/share/nginx/html/  # 复制文件
EXPOSE 80                    # 声明端口
CMD ["nginx", "-g", "Daemon off;"]  # 启动命令
# 构建镜像
docker build -t my-nginx:v1 .

# 推送镜像到仓库
docker tag my-nginx:v1 registry.example.com/my-nginx:v1
docker push registry.example.com/my-nginx:v1

四、关键参数解析

4.1 docker run 常用参数

参数 说明 示例
-d 后台运行(Detached) docker run -d nginx
-p 80:80 端口映射(宿主机:容器) -p 8080:80
-v /data:/app 数据卷挂载 -v ./logs:/var/log
--name myapp 指定容器名称 --name web-01
--rm 容器退出后自动删除 docker run --rm busybox
-e KEY=val 设置环境变量 -e DB_HOST=mysql
--network bridge 网络模式 --network host

4.2 数据卷(Volume)

docker 容器是无状态的,容器删除后数据丢失。数据卷提供持久化存储:

# 创建数据卷
docker volume create mydata

# 使用数据卷
docker run -v mydata:/app/data nginx

# 查看数据卷列表
docker volume ls

# 删除数据卷
docker volume rm mydata

五、docker 网络

# 查看网络列表
docker network ls

# 创建自定义网络
docker network create my-net

# 在指定网络中启动容器
docker run -d --name app1 --network my-net nginx
docker run -d --name app2 --network my-net redis

# 容器间直接通过名称通信
docker exec app1 ping app2  # ✅ 直接互通

六、生产环境注意事项

⚠️ 以下事项在实际部署中必须注意,面试也是高频考点。

  1. 不要用 latest 标签——生产环境必须指定精确版本,防止不可预期的升级
  2. 最小化基础镜像——优先用 alpine 版本,减少攻击面
  3. 不要在容器中以 root 运行——使用非特权用户
  4. 限制容器资源——CPU 和内存必须做 cgroup 限制
  5. 敏感信息不要打包进镜像——用 docker Secrets 或环境变量注入
  6. 镜像分层优化——变动小的层放前面,变动大的层放后面,充分利用缓存

七、面试高频题

  1. docker 容器和虚拟机有什么区别?
  2. 容器共享宿主机内核,轻量、秒启、资源占用低;VM 独立 Guest OS,重量级、强隔离。

  3. Dockerfile 中 COPY 和 ADD 的区别?

  4. ADD 支持自动解压 tar 包和 URL 下载;COPY 只做本地文件复制,推荐使用 COPY

  5. docker run -d 和 docker start 的区别?

  6. -d 是启动新容器;start 是重新启动已停止的容器,不创建新实例。

  7. 如何查看 docker 的存储驱动?

  8. docker info | grep "Storage Driver",常用驱动:overlay2、aufs、devicemapper。

📋 课堂作业

```bash docker pull nginx:alpine docker run -d -p 8080:80 --name day1-nginx nginx:alpine

🎯 今日学习
Day 1 · Docker基础入门
✅ 打卡签到
🔒 打卡和提交作业需要 登录 后操作
📤 提交作业
🔒 提交作业需要 登录 后操作
📊 学习进度
✅ 学习打卡 2026-05-18
+2天复习 2026-05-20 ✅ 已完成
+5天复习 2026-05-23 ✅ 已完成
+9天复习 2026-05-27 ✅ 已完成
+15天复习 2026-06-02
📅 打卡记录 📤 我的作业