🐳 Docker 入门指南
核心概念
容器 vs 虚拟机
容器 | 虚拟机 | |
---|---|---|
启动速度 | 秒级启动 | 分钟级启动 |
资源占用 | 共享主机内核,占用少 | 独立OS,占用高 |
隔离性 | 进程级隔离 | 完全系统隔离 |
镜像大小 | 通常为 MB 级 | 通常为 GB 级 |
核心组件
- 镜像(Image):只读模板(包含应用+环境)
- 容器(Container):镜像的运行实例
- Registry:镜像仓库(Docker Hub/Aliyun等)
- Dockerfile:镜像构建说明书
环境安装
通用安装方法
# 一键安装脚本(Linux)
curl -fsSL https://get.docker.com | sh
sudo systemctl enable --now docker
验证安装
docker --version # 查看版本
docker run hello-world # 运行测试容器
镜像管理
常用命令
docker pull nginx:alpine # 拉取镜像
docker image ls # 列出镜像
docker image rm <IMAGE_ID> # 删除镜像
docker search mysql # 搜索镜像
docker build -t myapp:v1 . # 构建镜像
镜像加速
// 修改 /etc/docker/daemon.json
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://mirror.ccs.tencentyun.com"
]
}
容器操作
生命周期管理
# 启动容器
docker run -d -p 8080:80 --name web nginx
# 查看容器
docker ps -a
# 停止/启动
docker stop web
docker start web
# 删除容器
docker rm web
交互命令
docker exec -it web bash # 进入容器
docker logs -f web # 跟踪日志
docker stats web # 查看资源占用
数据持久化
三种数据管理方式
1.Bind Mount:直接挂载主机目录
docker run -v /host/path:/container/path nginx
2.Volume:使用Docker管理的数据卷
docker volume create myvol
docker run -v myvol:/container/path mysql
3.tmpfs:内存临时存储(仅Linux)
网络配置
网络模式
模式 | 说明 |
---|---|
bridge | 默认NAT网络(推荐) |
host | 共享主机网络栈 |
none | 无网络 |
overlay | 跨主机集群网络 |
自定义网络
docker network create mynet
docker run --network=mynet redis
Dockerfile 指南
实践示例
# 阶段1:构建应用
FROM node:16 AS builder
WORKDIR /app
COPY package*.json .
RUN npm ci
COPY . .
RUN npm run build
# 阶段2:生产环境
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
构建命令
docker build -t myapp:v1 .
学习资源
📚 官方文档: docs.docker.com
🎓 互动教程:play-with-docker
📦 镜像仓库:Docker Hub
📺 视频教程:Docker Mastery - Udemy