从零开始玩转 Docker:一站式掌握镜像、容器与仓库

一、Docker 入门:为什么选择它?

Docker 是一种轻量级的虚拟化技术,通过容器化将应用及其依赖环境打包成独立单元,实现“一次构建,随处运行”。相比传统虚拟机,Docker 容器具有启动快、资源占用低、环境一致性强的优势,尤其适合微服务架构、持续集成(CI/CD)和跨平台部署场景。

核心概念速览

  • 镜像(Image):应用的只读模板,包含代码、运行时、依赖库等。
  • 容器(Container):镜像的运行实例,可启动、停止、删除。
  • 仓库(Registry):存储和分发镜像的服务器,如 Docker Hub、私有仓库。

二、镜像管理:从构建到优化

1. 镜像基础操作

  • 拉取镜像:从仓库下载镜像到本地。
    1. docker pull ubuntu:22.04 # 拉取Ubuntu 22.04镜像
  • 查看本地镜像
    1. docker images # 列出所有本地镜像
  • 删除镜像
    1. docker rmi ubuntu:22.04 # 删除指定镜像

2. 自定义镜像构建

通过 Dockerfile 定义镜像构建步骤,例如构建一个简单的 Python 应用镜像:

  1. # Dockerfile 示例
  2. FROM python:3.9-slim # 基础镜像
  3. WORKDIR /app # 设置工作目录
  4. COPY requirements.txt .
  5. RUN pip install -r requirements.txt # 安装依赖
  6. COPY . . # 复制应用代码
  7. CMD ["python", "app.py"] # 启动命令

构建镜像:

  1. docker build -t my-python-app . # -t 指定镜像标签

3. 镜像优化技巧

  • 使用多阶段构建:减少最终镜像体积。

    1. # 第一阶段:构建
    2. FROM golang:1.19 AS builder
    3. WORKDIR /app
    4. COPY . .
    5. RUN go build -o myapp
    6. # 第二阶段:运行
    7. FROM alpine:latest
    8. COPY --from=builder /app/myapp .
    9. CMD ["./myapp"]
  • 选择轻量级基础镜像:如 alpinedebian-slim
  • 清理无用层:合并 RUN 命令,减少中间层。

三、容器操作:运行与调试

1. 容器生命周期管理

  • 启动容器

    1. docker run -d --name my-container -p 8080:80 nginx # 后台运行,映射端口
    • -d:后台运行
    • --name:指定容器名
    • -p:端口映射(主机端口:容器端口)
  • 进入运行中的容器

    1. docker exec -it my-container /bin/bash # 交互式终端
  • 停止/启动容器

    1. docker stop my-container # 停止
    2. docker start my-container # 启动

2. 容器数据管理

  • 绑定挂载:将主机目录映射到容器内。
    1. docker run -v /host/path:/container/path ubuntu
  • 数据卷(Volume):持久化存储,独立于容器生命周期。
    1. docker volume create myvol # 创建数据卷
    2. docker run -v myvol:/data ubuntu # 挂载数据卷

3. 容器日志与监控

  • 查看日志
    1. docker logs my-container # 实时日志
    2. docker logs -f my-container # 跟踪日志
  • 资源监控
    1. docker stats # 实时显示容器资源占用

四、仓库管理:存储与分发

1. 公共仓库(Docker Hub)

  • 登录与推送
    1. docker login # 输入用户名和密码
    2. docker tag my-python-app username/my-python-app:latest # 打标签
    3. docker push username/my-python-app:latest # 推送到Docker Hub

2. 私有仓库搭建

使用官方 registry 镜像快速搭建私有仓库:

  1. docker run -d -p 5000:5000 --name registry registry:2

推送镜像到私有仓库:

  1. docker tag my-python-app localhost:5000/my-python-app
  2. docker push localhost:5000/my-python-app

3. 仓库安全最佳实践

  • 使用 HTTPS 加密通信。
  • 配置镜像签名验证(如 Docker Content Trust)。
  • 定期清理未使用的镜像。

五、常见问题与解决方案

1. 容器无法访问网络

  • 检查防火墙规则:
    1. sudo iptables -L # Linux系统查看防火墙
  • 确保容器端口正确映射。

2. 镜像拉取失败

  • 检查网络连接或配置镜像加速器(如阿里云、腾讯云镜像源)。
  • 修改 /etc/docker/daemon.json
    1. {
    2. "registry-mirrors": ["https://<mirror-url>"]
    3. }

    重启 Docker 服务:

    1. sudo systemctl restart docker

3. 容器内文件权限问题

  • 使用 -u 参数指定用户:
    1. docker run -u 1000:1000 my-image # 以用户ID 1000运行

六、进阶技巧:Docker Compose

通过 docker-compose.yml 定义多容器应用,例如同时运行 Web 服务和数据库:

  1. version: '3'
  2. services:
  3. web:
  4. image: nginx
  5. ports:
  6. - "80:80"
  7. volumes:
  8. - ./html:/usr/share/nginx/html
  9. db:
  10. image: mysql:5.7
  11. environment:
  12. MYSQL_ROOT_PASSWORD: example

启动服务:

  1. docker-compose up -d # 后台启动

七、总结与行动建议

  1. 实践优先:从简单应用(如静态网站)开始,逐步尝试复杂场景。
  2. 参考官方文档:Docker 官方文档是权威学习资源。
  3. 加入社区:在 Stack Overflow、GitHub 或中文社区(如 CSDN)交流问题。
  4. 持续优化:定期审查镜像和容器配置,提升效率与安全性。

通过本文的指引,你已掌握 Docker 的核心操作。接下来,尝试构建一个完整的微服务应用,或探索 Kubernetes 等容器编排工具,进一步拓展技能边界!