0%

Docker应用入门教程

Docker 是当今最流行的容器化技术,它改变了软件开发、测试和部署的方式。本文将带你从零开始学习 Docker,掌握容器化的核心技能。

什么是 Docker

Docker 是一个开源的容器化平台,它允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中,然后在任何环境中运行。

Docker 的核心概念

  • 镜像(Image):只读模板,包含运行应用所需的所有内容(代码、库、环境)
  • 容器(Container):镜像的运行实例,可以启动、停止、删除
  • 仓库(Repository):存储和共享镜像的地方,如 Docker Hub
  • Dockerfile:描述如何构建镜像的文本文件

Docker 与虚拟机的区别

  • 虚拟机:每个虚拟机包含完整的操作系统,启动慢、占用资源多
  • Docker 容器:共享宿主机内核,启动快、占用资源少
  • 隔离性:虚拟机隔离更强,Docker 隔离足够大多数场景
  • 性能:Docker 接近原生性能,虚拟机有一定损耗

Docker 安装

Windows 安装

  • 下载 Docker Desktop
  • 确保启用 WSL 2(Windows Subsystem for Linux)
  • 运行安装程序,按提示完成安装
  • 启动 Docker Desktop,等待 Docker 引擎启动

Mac 安装

  • 下载 Docker Desktop for Mac
  • 根据芯片选择 Intel 或 Apple Silicon 版本
  • 将 Docker 拖入 Applications 文件夹
  • 启动 Docker 应用

Linux 安装(Ubuntu)

1
2
3
4
5
6
7
# 更新包索引
sudo apt update

# 安装 Docker
sudo apt install docker.io

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

验证安装

1
2
# 查看 Docker 版本
docker --version

Docker 常用命令

镜像管理命令

1
2
3
4
5
6
7
8
9
10
# 搜索镜像
docker search nginx

# 拉取镜像
docker pull nginx:latest

# 列出本地镜像
docker images

# 删除镜像
docker rmi nginx:latest

容器管理命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 运行容器
docker run -d --name mynginx -p 80:80 nginx

# 查看运行中的容器
docker ps

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

# 停止容器
docker stop mynginx

# 启动已停止的容器
docker start mynginx

# 删除容器
docker rm mynginx

其他常用命令

1
2
3
4
5
6
7
8
# 查看容器日志
docker logs mynginx

# 进入容器
docker exec -it mynginx bash

# 查看容器资源使用
docker stats

Dockerfile 详解

Dockerfile 是构建 Docker 镜像的核心,它描述了如何一步步构建镜像。

基本示例

1
2
3
4
5
6
7
8
9
10
11
12
13
# 基础镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 复制依赖文件
COPY requirements.txt .

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt

# 复制项目文件
COPY . .

# 暴露端口
EXPOSE 8000

# 启动命令
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

常用指令说明

  • FROM:指定基础镜像
  • WORKDIR:设置工作目录
  • COPY:复制文件到镜像中
  • RUN:在构建时执行命令
  • ENV:设置环境变量
  • EXPOSE:声明容器运行时监听的端口
  • CMD:容器启动时执行的命令
  • ENTRYPOINT:配置容器入口程序

构建镜像

1
2
3
4
# 构建镜像,-t 指定名称和标签
docker build -t myapp:1.0 .

# 运行构建的镜像
docker run -d -p 8000:8000 myapp:1.0

Docker Compose

Docker Compose 用于定义和运行多容器 Docker 应用,通过 YAML 文件描述服务之间的关系。

docker-compose.yml 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
version: '3.8'

services:
web:
build: .
ports:
- "8000:8000"
volumes:
- .:/app
depends_on:
- db
environment:
- DATABASE_URL=postgres://user:pass@db:5432/mydb

db:
image: postgres:15
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: mydb
volumes:
- pgdata:/var/lib/postgresql/data

volumes:
pgdata:

Compose 常用命令

1
2
3
4
5
6
7
8
9
# 启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f

# 停止并删除所有服务
docker-compose down

Docker 实际应用场景

1. 开发环境统一

团队成员使用相同的 Docker 镜像,避免"在我机器上能运行"的问题。

2. CI/CD 流水线

  • 代码提交后自动构建 Docker 镜像
  • 在容器中运行自动化测试
  • 将通过测试的镜像推送到镜像仓库
  • 在生产环境拉取新镜像并重启容器

3. 微服务部署

每个微服务打包成独立的容器,实现服务隔离和独立部署。

4. 数据库服务

1
2
3
4
5
# 快速启动 MySQL
docker run -d \
--name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3306:3306 \
mysql:8.0

5. Nginx 反向代理

1
2
3
docker run -d \
--name nginx \
-p 80:80 \
-v /path/to/nginx.conf:/etc/nginx/nginx.conf \
nginx:latest

Docker 最佳实践

1. 镜像优化

  • 使用官方镜像作为基础
  • 选择 alpine 或 slim 版本减小镜像体积
  • 合并 RUN 指令,减少镜像层数
  • 使用 .dockerignore 排除不必要文件

2. 安全实践

  • 不要在镜像中硬编码密码
  • 使用非 root 用户运行容器
  • 定期更新基础镜像
  • 扫描镜像漏洞

3. 数据管理

  • 使用数据卷(Volume)持久化数据
  • 不要在容器中存储重要数据
  • 使用命名卷方便管理

4. 网络管理

1
2
3
4
5
# 创建自定义网络
docker network create mynet

# 使用自定义网络运行容器
docker run -d --network mynet --name app myapp

常见问题与解决方案

1. 容器无法启动

1
2
3
# 查看容器日志
docker logs <container_id>

# 查看容器详细信息
docker inspect <container_id>

2. 端口冲突

修改宿主机映射端口,或停止占用端口的进程。

3. 磁盘空间不足

1
2
# 清理无用镜像和容器
docker system prune -a

总结

Docker 已经成为现代软件开发不可或缺的工具,掌握 Docker 能够:

  • 简化部署:一次构建,到处运行
  • 环境一致:开发、测试、生产环境统一
  • 提升效率:快速启动、易于扩展
  • 资源利用:比虚拟机更轻量高效

学习 Docker 的关键在于多实践,从简单的单容器应用开始,逐步掌握多容器编排和 CI/CD 集成。希望本文能帮助你快速入门 Docker,在容器化的道路上越走越远!

-------------本文结束感谢您的阅读-------------

欢迎关注我的其它发布渠道