logo

Docker使用手册:从入门到进阶实践指南

作者:谁偷走了我的奶酪2025.09.17 10:30浏览量:0

简介:本文全面解析Docker核心概念与操作流程,涵盖安装部署、镜像管理、容器运行、网络配置及安全实践,为开发者提供系统化的技术指导与实战案例。

一、Docker核心概念解析

1.1 容器化技术本质

Docker通过Linux内核的Cgroups和Namespaces机制实现进程级隔离,每个容器拥有独立的文件系统、网络栈和资源配额。相较于传统虚拟机,容器启动速度提升90%以上,磁盘占用减少80%,这种轻量化特性使其成为微服务架构的理想载体。

1.2 镜像与容器关系

镜像(Image)是容器的只读模板,采用分层存储结构。以Ubuntu镜像为例,其基础层包含核心系统文件,上层可叠加Apache、MySQL等应用层。通过docker history命令可查看镜像构建历史,示例输出:

  1. $ docker history ubuntu:22.04
  2. IMAGE CREATED CREATED BY SIZE
  3. ubuntu:22.04 2 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B
  4. <missing> 2 weeks ago /bin/sh -c set -xe && echo... 11.4MB

二、安装与基础配置

2.1 系统要求验证

  • Linux:内核版本≥3.10(uname -r查看)
  • Windows/macOS:需启用Hyper-V或VirtualBox
  • 存储空间:建议预留20GB以上用于镜像存储

2.2 安装流程(Ubuntu示例)

  1. # 卸载旧版本
  2. sudo apt-get remove docker docker-engine docker.io containerd runc
  3. # 安装依赖
  4. sudo apt-get update
  5. sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  6. # 添加GPG密钥
  7. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  8. # 添加仓库
  9. sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  10. # 安装Docker CE
  11. sudo apt-get update
  12. sudo apt-get install docker-ce docker-ce-cli containerd.io
  13. # 验证安装
  14. sudo docker run hello-world

2.3 用户组配置

将当前用户加入docker组以避免sudo操作:

  1. sudo usermod -aG docker $USER
  2. newgrp docker # 立即生效

三、镜像管理进阶

3.1 镜像构建最佳实践

Dockerfile优化示例

  1. # 多阶段构建减少镜像体积
  2. FROM golang:1.19 AS builder
  3. WORKDIR /app
  4. COPY . .
  5. RUN go build -o myapp
  6. FROM alpine:3.16
  7. WORKDIR /app
  8. COPY --from=builder /app/myapp .
  9. CMD ["./myapp"]

此构建方式使最终镜像从1.2GB缩减至15MB。

3.2 镜像仓库管理

私有仓库部署

  1. # 启动本地仓库
  2. docker run -d -p 5000:5000 --restart=always --name registry registry:2
  3. # 标记并推送镜像
  4. docker tag myapp localhost:5000/myapp
  5. docker push localhost:5000/myapp

镜像签名验证

  1. # 生成密钥对
  2. openssl genrsa -aes256 -out private.key 4096
  3. openssl rsa -in private.key -outform PEM -pubout -out public.pem
  4. # 签名镜像
  5. cosign sign --key private.key localhost:5000/myapp:v1

四、容器运行管理

4.1 资源限制配置

  1. # 内存限制示例
  2. docker run -it --memory="512m" --memory-swap="1g" ubuntu bash
  3. # CPU配额控制
  4. docker run -it --cpus=".5" ubuntu bash # 限制使用0.5个CPU核心

4.2 健康检查机制

  1. HEALTHCHECK --interval=30s --timeout=3s \
  2. CMD curl -f http://localhost/ || exit 1

4.3 日志收集方案

JSON文件驱动配置

  1. {
  2. "log-driver": "json-file",
  3. "log-opts": {
  4. "max-size": "10m",
  5. "max-file": "3"
  6. }
  7. }

通过/var/lib/docker/containers/<container-id>/<container-id>-json.log查看日志。

五、网络配置深度解析

5.1 自定义网络拓扑

  1. # 创建自定义网络
  2. docker network create --driver=bridge --subnet=172.28.0.0/16 mynet
  3. # 启动容器并指定网络
  4. docker run -d --name=web --network=mynet nginx
  5. docker run -it --network=mynet alpine ping web

5.2 端口映射策略

  • 随机端口:-P自动映射所有暴露端口
  • 指定端口:-p 8080:80将容器80端口映射到主机8080
  • 主机模式:--network=host共享主机网络栈

六、安全加固方案

6.1 最小化镜像原则

  • 使用scratch基础镜像构建无OS容器
  • 移除不必要的包和文件
  • 示例:仅包含静态文件的Nginx镜像
    1. FROM scratch
    2. COPY static/ /usr/share/nginx/html/
    3. COPY nginx.conf /etc/nginx/nginx.conf

6.2 运行时安全配置

  1. # 启用安全配置
  2. docker run --security-opt="no-new-privileges:true" \
  3. --cap-drop=ALL --cap-add=NET_BIND_SERVICE \
  4. nginx

6.3 漏洞扫描流程

  1. # 使用Docker Scan
  2. docker scan myapp:latest
  3. # 第三方工具集成
  4. trivy image myapp:latest

七、生产环境实践

7.1 编排方案选型

特性 Docker Compose Kubernetes
适用场景 单机多容器 集群管理
复杂度
扩展性 有限 无限

7.2 CI/CD集成示例

  1. # GitLab CI示例
  2. build_image:
  3. stage: build
  4. script:
  5. - docker build -t $CI_REGISTRY/$CI_PROJECT_PATH:$CI_COMMIT_SHA .
  6. - docker push $CI_REGISTRY/$CI_PROJECT_PATH:$CI_COMMIT_SHA
  7. deploy_staging:
  8. stage: deploy
  9. script:
  10. - docker stack deploy -c docker-compose.yml myapp

7.3 监控解决方案

Prometheus配置示例

  1. # docker-compose.yml
  2. services:
  3. prometheus:
  4. image: prom/prometheus
  5. volumes:
  6. - ./prometheus.yml:/etc/prometheus/prometheus.yml
  7. ports:
  8. - "9090:9090"
  9. node-exporter:
  10. image: prom/node-exporter
  11. ports:
  12. - "9100:9100"

本手册通过系统化的知识体系与实战案例,帮助开发者掌握Docker从基础操作到生产部署的全流程技能。建议定期更新Docker版本(sudo apt-get upgrade docker-ce),并关注CVE安全公告及时修复漏洞。实际部署时建议结合具体业务场景进行参数调优,通过docker statsdocker inspect命令持续监控容器运行状态。

相关文章推荐

发表评论