Docker 基础入门
2025/12/17大约 5 分钟
Docker 基础入门
什么是 Docker?
Docker 是一个开源的容器化平台,可以让开发者将应用及其依赖打包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 或 Windows 机器上。
核心概念
- 镜像(Image):只读模板,包含运行应用所需的所有内容(代码、运行时、库、环境变量和配置文件)
- 容器(Container):镜像的运行实例,是一个轻量级、独立的可执行包
- 仓库(Registry):存储和分发镜像的服务,Docker Hub 是最大的公共仓库
Docker 基础命令
镜像操作
# 搜索镜像
docker search <镜像名>
# 拉取镜像
docker pull <镜像名>[:标签]
# 列出本地镜像
docker images
# 删除镜像
docker rmi <镜像ID或名称>
# 查看镜像详细信息
docker inspect <镜像ID>容器操作
# 运行容器
docker run [选项] <镜像名> [命令]
# 常用选项:
# -d:后台运行
# -p:端口映射 主机端口:容器端口
# --name:指定容器名称
# -v:挂载数据卷 主机路径:容器路径
# -e:设置环境变量
# --rm:容器停止后自动删除
# 示例:运行 Nginx
docker run -d -p 8080:80 --name my-nginx nginx
# 列出运行中的容器
docker ps
# 列出所有容器(包括停止的)
docker ps -a
# 启动/停止/重启容器
docker start <容器ID或名称>
docker stop <容器ID或名称>
docker restart <容器ID或名称>
# 删除容器
docker rm <容器ID或名称>
# 强制删除运行中的容器
docker rm -f <容器ID或名称>
# 查看容器日志
docker logs <容器ID或名称>
# 实时查看日志
docker logs -f <容器ID或名称>
# 进入容器
docker exec -it <容器ID或名称> /bin/bash
# 或
docker exec -it <容器ID或名称> sh实战示例
1. 运行 MySQL 容器
docker run -d \
--name mysql-server \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=your_password \
-v /my/data:/var/lib/mysql \
mysql:8.02. 运行 Redis 容器
docker run -d \
--name redis-server \
-p 6379:6379 \
redis:latest3. 运行 Nginx 并挂载静态文件
docker run -d \
--name nginx-web \
-p 80:80 \
-v /path/to/html:/usr/share/nginx/html \
nginx:latestDockerfile 基础
Dockerfile 是用于构建自定义镜像的文本文件。
常用指令
# 基础镜像
FROM ubuntu:20.04
# 维护者信息
LABEL maintainer="your-email@example.com"
# 工作目录
WORKDIR /app
# 复制文件
COPY . /app
# 添加文件(支持 URL 和自动解压)
ADD app.tar.gz /app
# 执行命令
RUN apt-get update && apt-get install -y python3
# 设置环境变量
ENV APP_ENV=production
# 暴露端口
EXPOSE 8080
# 容器启动时执行的命令
CMD ["python3", "app.py"]
# 或使用 ENTRYPOINT
ENTRYPOINT ["python3", "app.py"]构建镜像示例
创建一个简单的 Python 应用 Dockerfile:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]构建和运行:
# 构建镜像
docker build -t my-python-app:1.0 .
# 运行容器
docker run -d -p 5000:5000 --name my-app my-python-app:1.0Docker Compose
Docker Compose 用于定义和运行多容器 Docker 应用。
docker-compose.yml 示例
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: myapp
volumes:
- db-data:/var/lib/mysql
ports:
- "3306:3306"
redis:
image: redis:latest
ports:
- "6379:6379"
volumes:
db-data:Compose 常用命令
# 启动所有服务
docker-compose up -d
# 停止所有服务
docker-compose down
# 查看服务状态
docker-compose ps
# 查看服务日志
docker-compose logs -f
# 重启服务
docker-compose restart
# 构建服务
docker-compose build数据卷管理
创建和使用数据卷
# 创建数据卷
docker volume create my-volume
# 列出数据卷
docker volume ls
# 查看数据卷详情
docker volume inspect my-volume
# 使用数据卷
docker run -d -v my-volume:/data nginx
# 删除数据卷
docker volume rm my-volume
# 清理未使用的数据卷
docker volume prune网络管理
# 列出网络
docker network ls
# 创建网络
docker network create my-network
# 将容器连接到网络
docker run -d --network my-network --name web nginx
# 查看网络详情
docker network inspect my-network
# 删除网络
docker network rm my-network常用清理命令
# 删除所有停止的容器
docker container prune
# 删除所有未使用的镜像
docker image prune -a
# 删除所有未使用的数据卷
docker volume prune
# 删除所有未使用的网络
docker network prune
# 一键清理所有未使用的资源
docker system prune -a --volumes最佳实践
1. 镜像优化
- 使用轻量级基础镜像(如 alpine)
- 合并 RUN 命令减少层数
- 使用
.dockerignore排除不需要的文件 - 多阶段构建减小最终镜像大小
2. 安全建议
- 不要以 root 用户运行应用
- 定期更新基础镜像
- 扫描镜像漏洞
- 使用官方镜像或可信来源
3. 性能优化
- 合理使用缓存
- 限制容器资源(CPU、内存)
- 使用健康检查
- 合理配置日志驱动
故障排查
# 查看容器详细信息
docker inspect <容器ID>
# 查看容器资源使用情况
docker stats
# 查看容器进程
docker top <容器ID>
# 从容器复制文件到主机
docker cp <容器ID>:/path/to/file /host/path
# 从主机复制文件到容器
docker cp /host/path <容器ID>:/path/to/file参考资源
下一步学习建议:
- 实践基础命令,熟悉容器操作
- 尝试编写 Dockerfile 构建自己的镜像
- 学习 Docker Compose 编排多容器应用
- 了解 Docker 网络和数据持久化
- 探索容器编排工具(如 Kubernetes)
