3-7 安装配置Docker&Docker核心概念
1. Docker安装概述
1.1 Docker的优势价值
1.1.1 解决环境一致性问题
- 核心能力:Docker通过镜像(Image)技术将应用及其依赖环境打包成标准化单元,确保开发、测试、生产环境完全一致。
- 典型场景:
- 开发团队避免"在我机器上能跑"的问题
- CI/CD流水线中实现可靠的环境传递
- 多版本软件并行运行(如同时运行Python 2.7和3.8)
- 技术原理:基于UnionFS的分层存储机制,镜像层只读不可变。
1.1.2 资源隔离能力
- 隔离维度:
- 进程隔离(PID namespace)
- 网络隔离(Network namespace)
- 文件系统隔离(Mount namespace)
- 用户权限隔离(User namespace)
- 对比虚拟机:
- 性能优势:容器直接使用宿主机内核,资源开销减少60%以上。
1.1.3 跨平台部署
- 实现机制:
- 通过Docker Engine抽象底层操作系统差异
- 支持Arm/x86等不同CPU架构
- 典型案例:
- 开发机(Mac)→测试服务器(Ubuntu)→生产环境(CentOS)的无缝迁移
- 物联网设备(Raspberry Pi)与云服务器统一部署
- 扩展阅读:OCI(Open Container Initiative)标准确保跨平台兼容性
💡提示:最新Docker Desktop已内置:
- Kubernetes集群管理(单机版)
- Docker Swarm模式
- WasmEdge边缘计算支持(实验特性)
1.2 安装方式选择
1.2.1 图形化安装(Windows/macOS)
- 适用场景:
- 个人开发环境
- 需要GUI管理工具的场景
- 安装包特性:
- 自动配置WSL2(Windows)
- Rosetta2转译支持(Apple Silicon)
- 内置可视化监控面板
- 下载建议:
- 官网下载:
https://www.docker.com/products/docker-desktop
- 国内镜像:阿里云镜像站提供加速下载
- 官网下载:
1.2.2 命令行安装(Linux)
- 推荐方案:
# 企业级环境推荐 curl -fsSL https://get.docker.com | sudo sh # 国内用户替代方案 curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
bash - 生产环境建议:
- 使用特定版本而非latest
- 配置selinux/AppArmor安全策略
- 日志轮转设置
1.2.3 云环境部署
- 主流云平台支持:
云服务商 托管服务 特色功能 AWS ECS/EKS Fargate无服务器模式 阿里云 ACK 神龙裸金属支持 Azure ACI Windows容器优化 - 学习推荐:
- 腾讯云轻量服务器(1核2G即可运行)
- Google Cloud Shell免费额度
1.2.4 安装验证
# 基础验证
docker run hello-world
# 深度检测
docker info | grep -E 'Server Version|Storage Driver'
bash
💡提示:Windows/macOS安装后需在终端执行docker --version
确认CLI工具链正常工作
2. 各平台安装要求详解
2.1 Windows系统安装要求
系统版本要求
硬件要求
组件 | 最低配置 | 推荐配置 |
---|---|---|
CPU | 64位双核 | 四核及以上 |
内存 | 4GB | 8GB+ |
存储 | 40GB可用空间 | SSD优先 |
虚拟化 | VT-x/AMD-V | 开启SLAT |
BIOS设置实操指南
- 开机按
Del/F2
进入BIOS - 找到
Advanced CPU Configuration
- 启用:
- Intel VT-x
- AMD SVM
- Execute Disable Bit
- 保存设置并重启
💡提示:部分品牌机需在BIOS中额外禁用Hyper-V
才能开启VT-d
2.2 macOS系统安装要求
芯片架构差异
特殊注意事项
- Intel芯片用户:
- 需关闭System Integrity Protection(SIP)
csrutil disable
bash - M1/M2用户:
- 建议使用
--platform linux/amd64
运行x86镜像 - 性能损耗约15-20%
- 建议使用
2.3 Linux系统安装要求
发行版支持矩阵
发行版 | 内核要求 | 包管理器 | 备注 |
---|---|---|---|
Ubuntu | ≥5.4 | apt | LTS版本最佳 |
Debian | ≥4.19 | apt | 需backports源 |
CentOS | ≥3.10 | yum | 需EPEL源 |
Fedora | ≥5.6 | dnf | 最新稳定版 |
虚拟化支持检测
# KVM检测
grep -E '(vmx|svm)' /proc/cpuinfo
# 内核模块检查
lsmod | grep kvm
# 无输出时需加载模块
sudo modprobe kvm
bash
图形界面方案对比
方案 | 依赖组件 | 适用场景 |
---|---|---|
Docker Desktop | X11/GNOME | 开发环境 |
Portainer | Web浏览器 | 生产管理 |
纯CLI | 无 | 服务器环境 |
💡提示:在无GUI的服务器环境,推荐使用docker-compose
+ssh -X
远程管理
生产环境建议
- 配置cgroups v2:
sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"
bash - 禁用swap:
sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstab
bash - 配置日志驱动:
sudo tee /etc/docker/daemon.json <<-'EOF' { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } EOF
bash
最新动态:Linux 6.1+内核已默认支持rootless模式,安全性大幅提升
3. Linux系统安装实操详解
3.1 官方脚本安装(增强版)
安装脚本深度解析
# 安全增强版安装命令(推荐生产环境使用)
curl -fsSL https://get.docker.com | sudo sh -s -- --dry-run # 先模拟运行
curl -fsSL https://get.docker.com | sudo sh -s -- --version 24.0 # 指定版本
bash
脚本工作原理
- 自动检测系统发行版
- 配置官方软件源(packagecloud.io)
- 安装以下组件:
- docker-ce(社区版)
- docker-ce-cli
- containerd.io
- docker-compose-plugin
离线安装方案
# 1. 在有网络的环境下载离线包
mkdir docker-offline && cd docker-offline
curl -fsSL https://get.docker.com | sh -s -- --download-only
# 2. 将整个目录拷贝到目标机器
scp -r docker-offline user@remote:/tmp
# 3. 离线安装
cd /tmp/docker-offline
sudo sh install.sh
bash
3.2 安装后专业配置
安全加固配置
# 创建docker用户组(避免直接使用root)
sudo groupadd docker
sudo usermod -aG docker $USER
# 配置守护进程安全参数
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"userns-remap": "default",
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"live-restore": true
}
EOF
bash
性能调优建议
# 调整存储驱动(根据文件系统选择)
sudo dockerd --storage-driver=overlay2
# 配置cgroup内存限制
sudo sysctl -w vm.max_map_count=262144
bash
3.3 国内加速与镜像管理
主流加速源对比
服务商 | 镜像地址 | 特色 |
---|---|---|
阿里云 | https://<your-id>.mirror.aliyuncs.com | 私有镜像支持 |
腾讯云 | https://mirror.ccs.tencentyun.com | 海外加速 |
华为云 | https://<your-id>.swr.myhuaweicloud.com | ARM优化 |
高级镜像管理
# 镜像批量导入导出
docker save -o images.tar nginx:latest redis:alpine
docker load -i images.tar
# 清理无用镜像
docker image prune -a --filter "until=24h"
bash
企业级配置案例
# 配置私有仓库证书
sudo mkdir -p /etc/docker/certs.d/registry.example.com
sudo cp domain.crt /etc/docker/certs.d/registry.example.com/ca.crt
# 生产环境完整配置示例
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://registry.example.com"],
"insecure-registries": ["192.168.1.100:5000"],
"debug": false,
"metrics-addr": "0.0.0.0:9323",
"experimental": false
}
EOF
bash
3.4 故障排查指南
常见问题解决
# 网络问题诊断
docker run --rm alpine ping -c 4 baidu.com
# 存储驱动检查
docker info | grep "Storage Driver"
# 完整日志收集
sudo journalctl -u docker --no-pager -n 100
bash
安装验证测试矩阵
- 基础功能测试:
docker run --rm hello-world
bash - 网络性能测试:
docker run --rm alpine sh -c "wget -O /dev/null http://speedtest.tele2.net/100MB.zip"
bash - 存储性能测试:
docker run --rm -v $(pwd):/data alpine dd if=/dev/zero of=/data/test.img bs=1G count=1
bash
💡提示:生产环境建议使用Ansible等工具实现批量自动化部署,参考官方Playbook:
- hosts: docker_nodes
tasks:
- name: Install Docker
ansible.builtin.include_role:
name: geerlingguy.docker
vars:
docker_install_compose: true
docker_users:
- "{{ ansible_user }}"
yaml
4. Docker核心概念体系深度解析
4.1 三大核心组件架构
组件交互关系:
- 构建阶段:开发者通过Dockerfile构建镜像(Image)
- 运行阶段:镜像实例化为容器(Container)
- 分发阶段:镜像通过仓库(Registry)共享
4.2 镜像(Image)技术内幕
分层存储原理
# 查看镜像分层
docker inspect nginx:latest --format='{{.RootFS.Layers}}'
bash
层级类型 | 典型内容 | 特点 |
---|---|---|
基础层 | Alpine/Ubuntu | 只读不可变 |
依赖层 | Python/Node.js | 增量叠加 |
应用层 | 业务代码 | 可频繁更新 |
镜像构建优化
# 多阶段构建示例
FROM golang:1.18 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
FROM alpine:latest
COPY --from=builder /app/myapp /
CMD ["/myapp"]
dockerfile
💡提示:使用dive
工具分析镜像层大小:
dive nginx:latest
bash
4.3 容器(Container)运行机制
容器运行时架构
关键隔离技术:
- 进程隔离:PID namespace
- 网络隔离:
# 查看容器网络命名空间 ls -l /proc/$(docker inspect -f '{{.State.Pid}}' mycontainer)/ns/net
bash - 存储隔离:OverlayFS挂载点
生命周期管理:
# 状态转换监控
watch -n 1 docker ps --format 'table {{.Names}}\t{{.Status}}'
bash
4.4 仓库(Registry)企业级实践
仓库类型对比
类型 | 典型产品 | 适用场景 | 认证方式 |
---|---|---|---|
公共仓库 | Docker Hub | 开源项目 | OAuth2 |
私有仓库 | Harbor | 企业内网 | LDAP/AD |
云托管 | AWS ECR | 云原生 | IAM |
Harbor私有仓库部署
# 快速安装
docker run -d -p 80:80 -p 443:443 \
--name harbor \
-v /data/harbor:/data \
goharbor/harbor:latest
bash
镜像同步策略
4.5 高级应用模式
1. 镜像签名验证
# 启用内容信任
export DOCKER_CONTENT_TRUST=1
docker pull signed-image:latest
bash
2. 多架构镜像
FROM --platform=$BUILDPLATFORM golang:alpine AS build
ARG TARGETARCH
RUN go build -o /app-linux-$TARGETARCH
FROM alpine
COPY --from=build /app-linux-* /app
dockerfile
3. 容器安全扫描
docker scan nginx:latest
bash
💡提示:生产环境推荐使用Trivy进行深度扫描:
docker run --rm aquasec/trivy image nginx:latest
bash
4.6 性能监控方案
容器指标采集
# 使用cAdvisor
docker run -d \
--name=cadvisor \
-p 8080:8080 \
-v /:/rootfs:ro \
-v /var/run:/var/run:rw \
google/cadvisor:latest
bash
资源限制配置
docker run -it --cpus="0.5" --memory="512m" alpine
bash
最新趋势:eBPF技术正在革新容器监控方式,提供更低开销的观测能力
5. Docker常用命令解析(增强版)
5.1 镜像管理命令详解
镜像全生命周期操作
# 1. 高级拉取(指定平台/重试机制)
docker pull --platform linux/amd64 nginx:alpine --retry 5
# 2. 镜像深度检查
docker image inspect nginx:latest --format='{{.Config.Env}}'
# 3. 批量清理(删除悬空镜像)
docker image prune -f
# 4. 镜像导出导入
docker save nginx:latest -o nginx.tar
docker load -i nginx.tar
bash
镜像构建进阶技巧
# 多阶段构建+构建参数
FROM alpine AS builder
ARG BUILD_VERSION
RUN echo $BUILD_VERSION > /version.txt
FROM scratch
COPY --from=builder /version.txt /
dockerfile
💡提示:使用--no-cache
避免构建缓存:
docker build --no-cache -t myapp .
bash
5.2 容器管理命令增强
容器高级操作
# 1. 资源限制运行(生产环境必备)
docker run -d \
--name web \
--cpus 1.5 \
--memory 2g \
--pids-limit 100 \
nginx:alpine
# 2. 动态配置更新
docker update --restart=on-failure:3 web
# 3. 容器日志管理
docker logs --tail 100 -f web
docker logs --since 2023-08-01 web
bash
容器排错命令
# 检查容器元数据
docker inspect web --format='{{.NetworkSettings.IPAddress}}'
# 性能监控
docker stats --no-stream web
# 进入容器替代方案(无需bash)
docker run --rm -it nginx:alpine sh
bash
5.3 仓库管理实战技巧
企业级仓库操作
# 1. 私有仓库认证(非交互式)
echo $DOCKER_PASS | docker login -u $DOCKER_USER --password-stdin
# 2. 镜像标签管理
docker tag nginx:latest private.reg/myteam/nginx:v1.2
docker push private.reg/myteam/nginx:v1.2
# 3. 镜像签名验证
export DOCKER_CONTENT_TRUST=1
docker pull signed-image:latest
bash
镜像搜索过滤
# 按星级和官方过滤
docker search --filter=is-official=true --filter=stars=100 mysql
# 显示完整描述
docker search --no-trunc nginx
bash
5.4 综合应用案例
开发环境快速搭建
# 一键启动开发环境
docker run -d \
--name dev-env \
-v $(pwd):/app \
-p 3000:3000 \
-p 8080:8080 \
node:18-alpine \
sh -c "cd /app && npm install && npm run dev"
bash
生产部署命令集
# 滚动更新方案
docker service update --image myapp:v2.0 --update-parallelism 2 myapp_service
bash
5.5 安全管理命令
漏洞扫描与修复
# 使用Snyk扫描
docker scan myapp:latest
# 查看镜像历史
docker history nginx:latest --no-trunc
bash
权限控制
# 创建受限用户
docker run -d --user 1000:1000 nginx:alpine
# 只读文件系统
docker run -d --read-only nginx:alpine
bash
5.6 命令自动补全
# 安装bash补全
sudo apt-get install bash-completion
sudo curl -L https://raw.githubusercontent.com/docker/cli/master/contrib/completion/bash/docker -o /etc/bash_completion.d/docker
bash
💡提示:使用docker help
查看所有子命令,如docker network help
6. Docker核心工作流深度解析
6.1 镜像获取流程(增强版)
智能拉取策略
高级配置技巧
- 多源拉取:
docker pull registry.cn-hangzhou.aliyuncs.com/library/nginx:latest
bash - 内容信任验证:
export DOCKER_CONTENT_TRUST=1 docker pull signed-image
bash - 离线预加载:
docker save nginx:latest > nginx.tar docker load < nginx.tar
bash
6.2 容器运行机制(生产级实践)
存储驱动原理
持久化方案对比
方式 | 命令示例 | 适用场景 | 生命周期 |
---|---|---|---|
容器提交 | docker commit web web-backup | 紧急备份 | 手动维护 |
数据卷 | docker run -v dbdata:/var/lib/mysql | 数据库 | 独立管理 |
绑定挂载 | docker run -v /host/path:/container/path | 开发调试 | 依赖主机 |
自动清理策略
# 运行临时容器(自动删除)
docker run --rm -it alpine sh
# 全局垃圾回收
docker system prune -af
bash
6.3 镜像共享流程(企业级方案)
CI/CD集成示例
私有仓库高级配置
# Harbor仓库API操作
curl -X GET "https://harbor.example.com/api/v2.0/projects" \
-H "Authorization: Basic $(echo -n 'admin:Harbor12345' | base64)"
bash
镜像同步工具链
工具 | 功能 | 典型命令 |
---|---|---|
skopeo | 跨仓库复制 | skopeo copy docker://nginx docker://private.reg/nginx |
regctl | 镜像同步 | regctl image sync nginx:latest private.reg/nginx |
docker-distribution | 本地代理 | docker run -d -p 5000:5000 registry:2 |
6.4 安全增强工作流
签名验证流程
漏洞扫描集成
# 在CI中自动扫描
docker scan --accept-license --dependency-tree myapp:latest
bash
6.5 混合云部署模式
多集群分发方案
# 使用docker context切换环境
docker context create prod --docker "host=ssh://prod-server"
docker context use prod
docker stack deploy -c docker-compose.yml myapp
bash
边缘计算场景
# 多架构镜像示例
FROM --platform=$BUILDPLATFORM golang AS build
ARG TARGETARCH
RUN GOARCH=$TARGETARCH go build -o /app
FROM alpine
COPY --from=build /app /
dockerfile
💡提示:结合Kubernetes可实现更复杂的全球分发策略,参考k8s.gcr.io/pause
镜像的跨区域同步机制
↑