Docker 学习指南
一、Docker 基础概念
核心组件
| 概念 | 说明 |
|---|
| Image(镜像) | 只读模板,包含运行应用所需的一切 |
| Container(容器) | 镜像的运行实例,隔离的进程 |
| Dockerfile | 构建镜像的脚本文件 |
| Registry(仓库) | 存储和分发镜像的服务(如 Docker Hub) |
| Volume(卷) | 持久化数据存储 |
| Network(网络) | 容器间通信机制 |
二、安装与配置
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
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
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)
十、参考资源