Docker 学习指南

5 阅读1分钟

Docker 学习指南

一、Docker 基础概念

核心组件

概念说明
Image(镜像)只读模板,包含运行应用所需的一切
Container(容器)镜像的运行实例,隔离的进程
Dockerfile构建镜像的脚本文件
Registry(仓库)存储和分发镜像的服务(如 Docker Hub)
Volume(卷)持久化数据存储
Network(网络)容器间通信机制

二、安装与配置

# Windows/Mac: 安装 Docker Desktop
# Linux:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER  # 免 sudo 运行

# 验证安装
docker --version
docker info

配置国内镜像加速

编辑 /etc/docker/daemon.json

{
  "registry-mirrors": [
    "https://mirror.ccs.tencentyun.com",
    "https://registry.cn-hangzhou.aliyuncs.com"
  ]
}

三、常用命令速查

镜像操作

docker pull nginx:latest          # 拉取镜像
docker images                     # 列出本地镜像
docker rmi nginx:latest           # 删除镜像
docker image prune                # 清理无用镜像
docker search nginx               # 搜索镜像

容器操作

# 运行容器
docker run -d \
  --name my-nginx \
  -p 8080:80 \
  -v /data:/usr/share/nginx/html \
  nginx:latest

docker ps                         # 查看运行中容器
docker ps -a                      # 查看所有容器
docker stop my-nginx              # 停止容器
docker start my-nginx             # 启动容器
docker restart my-nginx           # 重启容器
docker rm my-nginx                # 删除容器
docker logs -f my-nginx           # 查看日志(实时)
docker exec -it my-nginx bash     # 进入容器交互
docker stats                      # 查看资源使用
docker inspect my-nginx           # 查看详细信息

run 常用参数

-d          # 后台运行
-p 主机:容器  # 端口映射
-v 主机:容器  # 挂载卷
-e KEY=VAL  # 环境变量
--name      # 指定容器名
--rm        # 退出后自动删除
--network   # 指定网络
--restart always  # 自动重启

四、Dockerfile 编写

基本结构

# 基础镜像
FROM node:18-alpine

# 设置工作目录
WORKDIR /app

# 复制依赖文件(利用缓存层)
COPY package*.json ./
RUN npm install --production

# 复制源代码
COPY . .

# 暴露端口
EXPOSE 3000

# 启动命令
CMD ["node", "server.js"]

常用指令

指令说明
FROM指定基础镜像
RUN构建时执行命令
CMD容器启动命令(可被覆盖)
ENTRYPOINT容器入口点(不可被覆盖)
COPY复制文件到镜像
ADD复制 + 自动解压
ENV设置环境变量
ARG构建参数
EXPOSE声明端口
VOLUME声明挂载点
USER指定运行用户

多阶段构建(减小镜像体积)

# 构建阶段
FROM golang:1.21 AS builder
WORKDIR /build
COPY . .
RUN go build -o app .

# 运行阶段(只复制二进制)
FROM alpine:latest
COPY --from=builder /build/app /app
CMD ["/app"]

构建镜像

docker build -t myapp:1.0 .
docker build -t myapp:1.0 -f Dockerfile.prod .  # 指定文件
docker push myapp:1.0                            # 推送到仓库

五、Docker Compose

docker-compose.yml 示例

version: '3.9'

services:
  web:
    build: .
    ports:
      - "8080:80"
    environment:
      - NODE_ENV=production
    depends_on:
      - db
      - redis
    restart: unless-stopped
    volumes:
      - ./static:/app/static

  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: mydb
      POSTGRES_USER: user
      POSTGRES_PASSWORD: secret
    volumes:
      - pg_data:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    command: redis-server --appendonly yes

volumes:
  pg_data:

networks:
  default:
    name: myapp-network

Compose 常用命令

docker compose up -d          # 启动所有服务
docker compose down           # 停止并删除容器
docker compose down -v        # 同时删除卷
docker compose logs -f web    # 查看日志
docker compose ps             # 查看状态
docker compose exec web bash  # 进入容器
docker compose build          # 重新构建
docker compose restart web    # 重启某服务
docker compose scale web=3    # 扩容

六、网络管理

# 查看/创建网络
docker network ls
docker network create mynet

# 网络类型说明
# bridge(默认):容器间通过容器名通信
# host:直接使用主机网络
# none:无网络

# 同一网络的容器可直接用名称互访
docker run --network mynet --name app1 nginx
docker run --network mynet --name app2 nginx

七、数据持久化

# 命名卷(推荐生产使用)
docker volume create mydata
docker run -v mydata:/data nginx

# 绑定挂载(开发调试用)
docker run -v $(pwd):/app nginx

# 卷管理
docker volume ls
docker volume inspect mydata
docker volume rm mydata
docker volume prune            # 清理未使用的卷

八、实用技巧

.dockerignore

node_modules
.git
*.log
.env
dist

常用调试命令

# 查看容器内进程
docker top my-container

# 宿主机与容器间复制文件
docker cp my-container:/app/log.txt ./log.txt

# 将容器保存为镜像
docker commit my-container my-image:v2

# 导出/导入镜像(离线传输)
docker save nginx:latest | gzip > nginx.tar.gz
docker load < nginx.tar.gz

资源限制

docker run -d \
  --memory="512m" \
  --cpus="1.5" \
  nginx

九、学习路径建议

阶段1(第1周):基础入门
  → 理解镜像/容器概念
  → 掌握 docker run / ps / exec / logs
  → 运行官方镜像(nginx、postgres、redis)

阶段2(第2周):镜像构建
  → 编写 Dockerfile
  → 理解层缓存机制
  → 发布镜像到 Docker Hub

阶段3(第3周):多容器编排
  → 掌握 Docker Compose
  → 多容器应用部署
  → 网络与卷管理

阶段4(进阶):生产实践
  → 镜像安全扫描(docker scout)
  → Kubernetes 基础
  → CI/CD 集成(GitHub Actions / GitLab CI)

十、参考资源