跳到主要内容

🚀 Docker 基础入门

❓ 什么是 Docker

Docker 是一个开源的容器化平台,让你将应用及其所有依赖打包成一个轻量级、可移植的容器镜像,确保在任何环境中都能一致运行。

💡 为什么开发者需要 Docker

痛点Docker 解决方案
"在我机器上能跑"环境完全一致,消除差异
依赖冲突(Python 2 vs 3、Node 16 vs 20)每个容器隔离运行,互不干扰
部署流程复杂docker run 一条命令启动
多环境配置混乱同一镜像用于 dev/staging/prod

🧱 核心概念

概念说明类比
Image(镜像)只读模板,包含运行应用所需的一切类「安装光盘」
Container(容器)镜像的运行实例类「运行中的虚拟机」
Dockerfile构建镜像的「配方」文件类「安装脚本」
Volume(数据卷)容器间共享的持久化存储类「U 盘」
Network(网络)容器间通信的虚拟网络类「虚拟局域网」
Registry(仓库)存放和分发镜像的服务类「应用商店」

🛠️ 安装 Docker

Linux

Ubuntu/Debian
# 一键安装官方脚本
curl -fsSL https://get.docker.com | sudo sh

# 将当前用户加入 docker 组(免 sudo)
sudo usermod -aG docker $USER
newgrp docker

# 验证
docker --version
docker run hello-world
CentOS/RHEL
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker

macOS

Homebrew
brew install --cask docker

💡 建议直接下载 Docker Desktop for Mac,内置 GUI 管理界面。

Windows

:::tip 推荐 WSL 2 + Docker Desktop

Windows 上推荐使用 Docker Desktop 搭配 WSL 2 后端,性能远优于 Hyper-V 模式。详见 WSL 开发环境配置

:::

PowerShell
winget install Docker.DockerDesktop

🎉 第一个容器

# 拉取并运行 Nginx 容器
docker run -d \
--name my-nginx \
-p 8080:80 \
nginx:alpine

# 验证运行
curl http://localhost:8080

# 查看运行日志
docker logs my-nginx

# 停止并删除
docker stop my-nginx
docker rm my-nginx

打开浏览器访问 http://localhost:8080,你应该能看到 Nginx 欢迎页面。

🔄 日常核心命令

容器生命周期

# 运行(前台)
docker run -it ubuntu:22.04 bash

# 运行(后台)
docker run -d --name my-app my-image:latest

# 查看运行中的容器
docker ps

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

# 停止 / 启动 / 重启
docker stop my-app
docker start my-app
docker restart my-app

# 删除容器(必须先停止)
docker rm my-app
docker rm -f my-app # 强制删除(运行中也可)

进入容器

# 进入正在运行的容器
docker exec -it my-app bash

# 如果没有 bash,用 sh
docker exec -it my-app sh

# 在容器中执行单条命令
docker exec my-app cat /etc/os-release

查看日志

# 查看完整日志
docker logs my-app

# 实时跟踪(类似 tail -f)
docker logs -f my-app

# 显示最后 100 行
docker logs --tail 100 my-app

# 带时间戳
docker logs -t my-app

镜像管理

# 搜索镜像
docker search nginx

# 拉取镜像
docker pull nginx:1.25-alpine
docker pull node:20 # 默认 latest
docker pull ubuntu@sha256:abc123 # 指定摘要(最安全)

# 查看本地镜像
docker images
docker image ls

# 删除镜像
docker rmi nginx:1.25-alpine
docker rmi $(docker images -q) # 删除所有镜像(危险!)

# 清理所有悬空资源(镜像、容器、网络)
docker system prune

⚖️ 镜像 vs. 容器

:::warning 常见误区

  • 镜像不是虚拟机:容器共享宿主机内核,没有硬件模拟开销
  • 容器不会自动持久化数据:容器删除后,内部数据随之消失
  • 一个容器只跑一个进程:这是 Docker 的设计哲学

:::

🔗 下一步