当前位置: 首页 > news >正文

Docker容器技术基础入门

Docker容器技术基础入门

第一章 容器技术演进与Docker定位

1.1 虚拟化技术演进路径

从物理机时代到虚拟机技术(Hypervisor-based Virtualization),再到容器化技术(Container-based Virtualization),计算资源利用率呈现指数级提升。传统虚拟机需要模拟完整硬件栈并运行独立操作系统内核,而容器通过Linux内核的命名空间(Namespaces)、控制组(Cgroups)和联合文件系统(UnionFS)实现进程级隔离。

容器技术的核心优势体现在:

  • 资源利用率提升:容器共享宿主机内核,内存占用减少60%以上,启动时间缩短至毫秒级
  • 环境一致性保障:通过镜像固化运行时环境,消除”在我机器上能运行”的问题
  • 交付流程标准化:构建(Build)-运输(Ship)-运行(Run)的标准化流程

1.2 Docker技术架构解析

Docker采用Client-Server架构,核心组件包括:

  • Docker Daemon:常驻后台进程,通过containerd管理容器生命周期
  • Docker Client:提供CLI接口,通过REST API与Daemon交互
  • Registry:镜像仓库服务(Docker Hub/私有仓库)
  • Containerd:符合OCI标准的容器运行时

![Docker架构示意图]

(图示说明:用户通过Client发送指令,Daemon调用containerd创建容器运行时)

第二章 环境搭建与基础操作

2.1 多平台安装实践

Linux环境(以Ubuntu 22.04为例)


# 卸载旧版本

sudo apt-get remove docker docker-engine docker.io containerd runc

# 设置仓库

sudo apt-get update

sudo apt-get install ca-certificates curl gnupg

sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 安装引擎

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 验证安装

sudo docker run hello-world

Windows环境

要求:

  • Windows 10/11 64位专业版/企业版
  • 启用Hyper-V和WSL2功能
  • 安装Docker Desktop时自动配置虚拟化环境

2.2 核心对象操作指令

镜像管理


# 拉取镜像

docker pull nginx:alpine

# 构建镜像

docker build -t myapp:v1 -f Dockerfile .

# 镜像分析

docker image history nginx:alpine

docker image inspect nginx:alpine

# 清理策略

docker image prune -a --filter "until=24h"

容器生命周期


# 启动容器

docker run -d --name web -p 8080:80 -v /data:/usr/share/nginx/html nginx:alpine

# 执行命令

docker exec -it web sh

# 状态监控

docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"

# 日志分析

docker logs --tail 100 -f web

第三章 镜像构建与优化

3.1 Dockerfile深度解析


# 多阶段构建示例

FROM golang:1.21 as builder

WORKDIR /app

COPY . .

RUN CGO_ENABLED=0 GOOS=linux go build -o myapp

FROM alpine:3.18

RUN apk --no-cache add ca-certificates

WORKDIR /root/

COPY --from=builder /app/myapp .

CMD ["./myapp"]

构建优化策略:

  1. 层级合并:合并RUN指令减少镜像层数
  2. 构建缓存:合理排序指令以利用缓存
  3. 最小化基础镜像:优先选择alpine、distroless等精简镜像
  4. 安全扫描:集成Trivy进行CVE漏洞检测

3.2 镜像分发实践

私有仓库部署方案:


# 启动Registry服务

docker run -d -p 5000:5000 --restart=always --name registry \

  -v /data/registry:/var/lib/registry \

  registry:2

# 镜像标记与推送

docker tag myapp:v1 localhost:5000/myapp:v1

docker push localhost:5000/myapp:v1

第四章 容器网络与存储

4.1 网络模型解析

Docker提供五种网络模式:

  1. bridge:默认NAT模式,通过docker0网桥通信
  2. host:直接使用宿主机网络栈
  3. none:无网络配置
  4. container:共享其他容器网络命名空间
  5. overlay:跨主机容器网络(Swarm模式)

自定义网络创建:


docker network create --driver=bridge --subnet=172.28.0.0/16 mynet

4.2 存储卷管理

持久化存储方案对比:

类型

数据生命周期

性能

适用场景

Bind Mount

与宿主机同步

最高

开发环境代码热更新

Volume

独立管理

生产环境数据库存储

tmpfs

内存临时存储

极高

敏感数据临时处理

数据卷操作示例:


# 创建命名卷

docker volume create dbdata

# 挂载使用

docker run -d --name mysql -v dbdata:/var/lib/mysql mysql:8.0

第五章 容器编排进阶

5.1 Docker Compose实践


version: '3.8'

services:

  web:

    image: nginx:alpine

    ports:

      - "8080:80"

    volumes:

      - ./html:/usr/share/nginx/html

    depends_on:

      - app

  app:

    build: ./backend

    environment:

      - DB_HOST=db

      - DB_PORT=3306

  db:

    image: mysql:8.0

    volumes:

      - db_data:/var/lib/mysql

    environment:

      MYSQL_ROOT_PASSWORD: secret

volumes:

  db_data:

编排功能特性:

  • 服务依赖管理(depends_on)
  • 环境变量注入(environment)
  • 资源限制(cpus/mem_limit)
  • 健康检查(healthcheck)

5.2 生产环境最佳实践

  1. 安全加固
    • 启用用户命名空间映射(–userns-remap)
    • 设置容器只读文件系统(–read-only)
    • 限制能力(–cap-drop ALL –cap-add)
  2. 监控方案

  • 使用cAdvisor收集指标

    docker run -d --name=cadvisor \

      -v /:/rootfs:ro \

      -v /var/run:/var/run:ro \

      -v /sys:/sys:ro \

      -v /var/lib/docker/:/var/lib/docker:ro \

      -p 8080:8080 \

      gcr.io/cadvisor/cadvisor:v0.47.0
  1. 日志管理

  1.  run --log-driver=fluentd --log-opt fluentd-address=fluentd:24224

第六章 企业级应用场景

6.1 CI/CD流水线集成

典型Docker化流水线架构:


开发环境 -> Docker构建 -> 镜像扫描 -> 仓库推送 -> 蓝绿部署 -> 生产环境

GitLab CI示例:


stages:

  - build

  - test

  - deploy

build_image:

  stage: build

  script:

    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .

    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

deploy_prod:

  stage: deploy

  environment: production

  script:

    - docker-compose -f docker-compose.prod.yml up -d

6.2 云原生技术栈整合

Docker与Kubernetes集成架构:


Pod -> Sidecar容器 -> Service -> Ingress

       ↑
Docker Runtime

服务网格方案:


# 注入Istio边车

kubectl apply -f <(istioctl kube-inject -f deployment.yaml)

相关文章:

  • Java 的创新与变革之路:从 JDK 7 到 JDK 23
  • 无需手动重建!Altium到Cadence的封装转换:ASCII文件方法详解
  • 前端实现商品放大镜效果(Vue3完整实现)
  • 【计算机视觉】TorchVision 深度解析:从核心功能到实战应用 ——PyTorch 官方计算机视觉库的全面指南
  • MCU低功耗运行模式与唤醒机制解析
  • Docker 常用命令(涵盖多个方面)
  • 8、HTTPD服务--ab压力测试
  • Java多线程入门案例详解:继承Thread类实现线程
  • mtrace和memleak源码分析
  • 从困局到破局的AI+数据分析
  • 【机器学习】​碳化硅器件剩余使用寿命稀疏数据深度学习预测
  • UE 滚动提示条材质制作
  • 民锋视角下的价格风险管理策略
  • 0805登录_注册_token_用户信息_退出-网络ajax请求2-react-仿低代码平台项目
  • 八大排序——快速排序/快排优化
  • 【javascript】竞速游戏前端优化:高频操作与并发请求的解决方案
  • jaffree 封装ffmpeg 转换视频格式,获取大小,时间,封面
  • 汤晓鸥:计算机视觉的开拓者与AI产业化的先行者
  • python数据分析(五):Pandas 数据检索技术
  • Android学习总结之Java篇(一)
  • 圆桌|特朗普上台百日未能结束俄乌冲突,若美国“退出”会发生什么?
  • 国家发展改革委:我们对实现今年经济社会发展目标任务充满信心
  • 三杀皇马剑指四冠,硬扛到底的巴萨,赢球又赢人
  • 我驻阿巴斯总领馆:将持续跟踪港口爆炸事件进展,全力确保中方人员安全
  • 青年如何打破“千人一面”,创造属于自己的文化观?
  • 生于1987年,万宏宇已任内蒙古鄂温克旗委常委