1. Linux环境下Docker安装全指南
作为容器化技术的标杆,Docker已经成为现代开发和运维的标配工具。最近在帮团队搭建测试环境时,发现不少新人对Linux下的Docker安装还存在各种疑问。今天我就以Ubuntu 20.04 LTS为例,详细拆解安装过程中的技术要点和避坑指南。
先说说为什么要在Linux上装Docker?相比Windows和macOS,Linux原生支持容器技术,不需要额外的虚拟化层,性能损耗更低。特别是在生产环境中,Linux服务器配合Docker能实现更高的资源利用率。下面这个安装流程同样适用于CentOS、Debian等主流发行版,我会特别标注不同系统的差异点。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与依赖检查
2.1 系统要求确认
在开始安装前,建议先运行以下命令检查系统信息:
bash复制uname -a # 查看内核版本(需3.10以上)
lsb_release -a # 查看发行版信息
free -h # 检查内存(建议2GB以上)
df -h # 检查磁盘空间(建议20GB以上空闲)
特别注意:如果是在虚拟机上安装,需要确认BIOS中已开启VT-x/AMD-v虚拟化支持。可以用
egrep -c '(vmx|svm)' /proc/cpuinfo命令检查,返回结果大于0表示支持。
2.2 卸载旧版本
很多安装问题都源于旧版本残留,建议先执行清理:
bash复制sudo apt-get remove docker docker-engine docker.io containerd runc
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
对于CentOS系统,需要用yum remove替代apt-get,其他路径保持一致。
3. 安装方法与核心配置
3.1 使用官方脚本安装(推荐)
最快捷的方式是使用Docker官方提供的安装脚本:
bash复制curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
这个脚本会自动检测系统类型并完成以下操作:
- 添加Docker官方GPG密钥
- 设置稳定版仓库
- 安装最新版Docker引擎
- 启动Docker服务并设置开机自启
实测技巧:如果下载速度慢,可以尝试在命令前加上
HTTP_PROXY=http://your_proxy:port设置代理。
3.2 手动安装详解
对于需要定制安装的场景,可以分步执行:
步骤1:安装依赖包
bash复制sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
步骤2:添加GPG密钥
bash复制curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
步骤3:设置稳定版仓库
bash复制echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
步骤4:安装Docker引擎
bash复制sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
4. 安装后配置与验证
4.1 用户组配置
默认只有root用户可以直接操作Docker,建议将当前用户加入docker组:
bash复制sudo usermod -aG docker $USER
newgrp docker # 立即生效
验证配置是否成功:
bash复制docker run hello-world
如果看到欢迎信息,说明安装成功。
4.2 镜像加速配置
国内用户建议配置镜像加速器,创建或修改/etc/docker/daemon.json:
json复制{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
然后重启服务:
bash复制sudo systemctl daemon-reload
sudo systemctl restart docker
5. 常见问题排查
5.1 启动失败问题
如果遇到Failed to start docker.service: Unit docker.service is masked.错误,执行:
bash复制sudo systemctl unmask docker.service
sudo systemctl unmask docker.socket
sudo systemctl start docker
5.2 存储驱动问题
对于某些旧系统,可能需要修改存储驱动。编辑/etc/docker/daemon.json:
json复制{
"storage-driver": "devicemapper"
}
5.3 防火墙配置
如果容器网络异常,可能需要调整防火墙规则:
bash复制sudo ufw allow 2375/tcp # Docker守护进程端口
sudo ufw reload
6. 生产环境优化建议
6.1 日志轮转配置
防止Docker日志占用过多磁盘空间,创建/etc/docker/daemon.json:
json复制{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
6.2 内核参数调优
对于高并发场景,建议调整内核参数:
bash复制echo "
vm.max_map_count=262144
fs.file-max=65536
" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
6.3 资源限制配置
限制Docker资源使用,创建或修改/etc/docker/daemon.json:
json复制{
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 65536,
"Soft": 65536
}
}
}
7. 进阶工具安装
7.1 Docker Compose安装
管理多容器应用的必备工具:
bash复制sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
验证安装:
bash复制docker-compose --version
7.2 可视化工具Portainer
安装管理界面:
bash复制docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
访问http://服务器IP:9000即可使用。
8. 日常维护技巧
8.1 磁盘空间清理
定期执行以下命令释放空间:
bash复制docker system prune -a -f # 清理无用镜像、容器和网络
docker volume prune -f # 清理无用数据卷
8.2 版本升级方法
升级Docker CE版本:
bash复制sudo apt-get update
sudo apt-get install --only-upgrade docker-ce docker-ce-cli containerd.io
8.3 备份与恢复
备份Docker配置和数据:
bash复制sudo tar -czvf docker_backup.tar.gz /var/lib/docker /etc/docker
恢复时解压到对应目录后重启服务即可。
9. 安全加固建议
9.1 启用用户命名空间
编辑/etc/docker/daemon.json:
json复制{
"userns-remap": "default"
}
然后创建对应的子用户和组:
bash复制sudo useradd dockremap
sudo usermod -aG dockremap dockremap
echo "dockremap:100000:65536" | sudo tee /etc/subuid
echo "dockremap:100000:65536" | sudo tee /etc/subgid
9.2 启用内容信任
设置环境变量启用数字签名验证:
bash复制export DOCKER_CONTENT_TRUST=1
或者在/etc/docker/daemon.json中配置:
json复制{
"content-trust": {
"mode": "enforced"
}
}
10. 性能监控方案
10.1 使用cAdvisor
Google开源的容器监控工具:
bash复制docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
--privileged \
--device=/dev/kmsg \
gcr.io/cadvisor/cadvisor:v0.47.0
访问http://服务器IP:8080查看监控数据。
10.2 日志集中管理
配置Docker日志驱动发送到ELK:
json复制{
"log-driver": "syslog",
"log-opts": {
"syslog-address": "tcp://192.168.1.100:514",
"tag": "{{.Name}}/{{.ID}}"
}
}
11. 多版本管理技巧
11.1 使用Docker Machine
安装不同版本的Docker引擎:
bash复制curl -L https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine
chmod +x /tmp/docker-machine
sudo mv /tmp/docker-machine /usr/local/bin/docker-machine
创建使用特定版本的环境:
bash复制docker-machine create --driver virtualbox --engine-install-url https://get.docker.com/v2.18.0 default
11.2 版本切换方法
查看已安装版本:
bash复制apt-cache madison docker-ce
安装指定版本:
bash复制sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
12. 网络配置进阶
12.1 自定义网桥创建
创建隔离的网络环境:
bash复制docker network create \
--driver=bridge \
--subnet=172.28.0.0/16 \
--ip-range=172.28.5.0/24 \
--gateway=172.28.5.254 \
my-bridge-network
12.2 IPv6支持配置
编辑/etc/docker/daemon.json:
json复制{
"ipv6": true,
"fixed-cidr-v6": "2001:db8:1::/64"
}
重启服务后验证:
bash复制docker network inspect bridge | grep EnableIPv6
13. 存储驱动选择
13.1 主流驱动对比
| 驱动类型 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| overlay2 | 通用场景 | 性能好,兼容性强 | 需要Linux内核4.0+ |
| devicemapper | 旧系统兼容 | 支持旧内核 | 性能较差 |
| btrfs | 需要快照功能 | 支持子卷快照 | 需要专用文件系统 |
| zfs | 大数据量场景 | 高效存储利用率 | 内存占用高 |
13.2 驱动切换方法
- 停止Docker服务
- 备份
/var/lib/docker - 修改
/etc/docker/daemon.json - 重启服务
重要提示:切换存储驱动会导致现有镜像和容器不可用,需要提前迁移数据。
14. 容器调试技巧
14.1 进入运行中容器
使用exec命令进入容器shell:
bash复制docker exec -it 容器ID /bin/bash
如果容器没有bash,可以尝试:
bash复制docker exec -it 容器ID sh
14.2 查看容器进程
获取容器内进程树:
bash复制docker top 容器ID
14.3 实时日志查看
跟踪容器日志输出:
bash复制docker logs -f 容器ID
15. 镜像构建优化
15.1 多阶段构建
减少最终镜像大小:
dockerfile复制FROM golang:1.16 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]
15.2 构建缓存利用
合理排序Dockerfile指令:
dockerfile复制# 先安装依赖(变化频率低)
COPY package.json .
RUN npm install
# 再复制源代码(变化频率高)
COPY . .
16. 企业级实践建议
16.1 私有仓库搭建
使用Harbor搭建企业级仓库:
bash复制docker run -d -p 80:80 -p 443:443 \
--name harbor \
--restart=always \
-v /data/harbor/registry:/var/lib/registry \
-v /data/harbor/cert:/etc/harbor/ssl \
-v /data/harbor/config:/etc/harbor \
goharbor/harbor:latest
16.2 镜像扫描集成
使用Trivy进行漏洞扫描:
bash复制docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
aquasec/trivy:latest \
image 镜像名称
17. 跨平台开发技巧
17.1 多架构镜像构建
使用buildx构建跨平台镜像:
bash复制docker buildx create --use
docker buildx build --platform linux/amd64,linux/arm64 -t 用户名/镜像名:标签 .
17.2 开发环境容器化
典型开发环境Dockerfile示例:
dockerfile复制FROM ubuntu:20.04
# 安装基础工具
RUN apt-get update && apt-get install -y \
build-essential \
git \
curl \
vim
# 配置开发用户
RUN useradd -ms /bin/bash developer
USER developer
WORKDIR /home/developer
# 安装语言环境
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash -
RUN apt-get install -y nodejs
18. CI/CD集成方案
18.1 GitLab Runner配置
注册Docker执行器:
bash复制docker run --rm -it \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
gitlab/gitlab-runner:latest register
18.2 Jenkins流水线示例
典型Jenkinsfile配置:
groovy复制pipeline {
agent {
docker {
image 'maven:3.8.1-openjdk-11'
args '-v $HOME/.m2:/root/.m2'
}
}
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
}
}
19. 备份与迁移策略
19.1 完整备份方案
创建全量备份脚本backup_docker.sh:
bash复制#!/bin/bash
BACKUP_DIR="/backup/docker_$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
# 备份配置
tar -czvf $BACKUP_DIR/config.tar.gz /etc/docker
# 备份数据卷
docker stop $(docker ps -aq)
tar -czvf $BACKUP_DIR/volumes.tar.gz /var/lib/docker/volumes
docker start $(docker ps -aq)
# 备份镜像列表
docker images --format "{{.Repository}}:{{.Tag}}" > $BACKUP_DIR/images.list
19.2 迁移恢复流程
在新服务器上恢复:
bash复制# 恢复配置
tar -xzvf config.tar.gz -C /
# 恢复数据卷
tar -xzvf volumes.tar.gz -C /var/lib/docker/
# 重新拉取镜像
while read img; do docker pull $img; done < images.list
20. 性能调优实战
20.1 容器内存限制
启动时设置内存限制:
bash复制docker run -it --memory="512m" --memory-swap="1g" ubuntu
20.2 CPU资源分配
限制CPU使用:
bash复制docker run -it --cpus="1.5" ubuntu
或者绑定特定CPU核心:
bash复制docker run -it --cpuset-cpus="0,1" ubuntu
20.3 IO带宽控制
限制磁盘IO:
bash复制docker run -it \
--device-read-bps /dev/sda:1mb \
--device-write-bps /dev/sda:1mb \
ubuntu
21. 安全审计方法
21.1 容器漏洞扫描
使用docker scan命令(需登录Docker Hub):
bash复制docker scan 镜像名称
21.2 运行时检测
使用Falco进行异常行为监控:
bash复制docker run -d \
--name falco \
--privileged \
-v /var/run/docker.sock:/host/var/run/docker.sock \
-v /dev:/host/dev \
-v /proc:/host/proc:ro \
-v /boot:/host/boot:ro \
-v /lib/modules:/host/lib/modules:ro \
-v /usr:/host/usr:ro \
falcosecurity/falco
22. 网络故障排查
22.1 容器网络检查
查看容器网络配置:
bash复制docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器ID
22.2 端口映射验证
检查端口绑定情况:
bash复制docker port 容器ID
22.3 网络连通性测试
从容器内测试外网:
bash复制docker run --rm busybox ping -c 4 8.8.8.8
23. 资源监控方案
23.1 使用docker stats
实时监控容器资源使用:
bash复制docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"
23.2 Prometheus监控
配置Docker暴露指标:
json复制{
"metrics-addr": "0.0.0.0:9323",
"experimental": true
}
然后配置Prometheus抓取:
yaml复制scrape_configs:
- job_name: 'docker'
static_configs:
- targets: ['docker-host:9323']
24. 日志管理进阶
24.1 日志驱动选择
| 驱动类型 | 适用场景 | 特点 |
|---|---|---|
| json-file | 默认选项 | 本地存储,支持日志轮转 |
| syslog | 集中日志 | 发送到远程syslog服务器 |
| journald | systemd系统 | 集成系统日志 |
| gelf | Graylog | 支持结构化日志 |
| fluentd | 大数据分析 | 高吞吐量处理 |
24.2 日志标签配置
为日志添加自定义标签:
bash复制docker run --log-opt tag="{{.ImageName}}/{{.Name}}/{{.ID}}" nginx
25. 设备映射技巧
25.1 USB设备映射
将主机USB设备映射到容器:
bash复制docker run -it --device=/dev/ttyUSB0 ubuntu
25.2 GPU设备支持
NVIDIA GPU支持需要先安装nvidia-docker2:
bash复制distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker
使用示例:
bash复制docker run --gpus all nvidia/cuda:11.0-base nvidia-smi
26. 时间同步配置
26.1 容器时间设置
让容器使用主机时区:
bash复制docker run -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro ubuntu
26.2 NTP服务配置
在容器内运行NTP客户端:
bash复制docker run --cap-add SYS_TIME \
-e TZ=Asia/Shanghai \
ubuntu \
bash -c "apt-get update && apt-get install -y ntpdate && ntpdate ntp.aliyun.com"
27. 容器安全加固
27.1 只读文件系统
以只读模式运行容器:
bash复制docker run --read-only -it alpine
27.2 能力限制
移除不必要的Linux能力:
bash复制docker run --cap-drop all --cap-add NET_BIND_SERVICE nginx
27.3 安全选项配置
添加额外安全约束:
bash复制docker run --security-opt no-new-privileges:true ubuntu
28. 多主机网络方案
28.1 Overlay网络创建
跨主机通信网络配置:
bash复制docker network create -d overlay my-overlay
28.2 Weave Net部署
安装Weave网络插件:
bash复制curl -L git.io/weave -o /usr/local/bin/weave
chmod a+x /usr/local/bin/weave
weave launch
29. 存储卷管理
29.1 数据卷操作
创建和管理数据卷:
bash复制docker volume create my_volume
docker volume inspect my_volume
docker volume prune
29.2 绑定挂载技巧
将主机目录挂载到容器:
bash复制docker run -v /host/path:/container/path:ro -it ubuntu
注意:生产环境建议使用
:ro只读挂载,防止容器意外修改主机文件。
30. 容器编排入门
30.1 Docker Swarm初始化
创建Swarm集群:
bash复制docker swarm init --advertise-addr <MANAGER-IP>
加入工作节点:
bash复制docker swarm join --token <TOKEN> <MANAGER-IP>:2377
30.2 服务部署示例
部署高可用Nginx服务:
bash复制docker service create --name nginx --replicas 3 -p 80:80 nginx
31. 镜像仓库管理
31.1 私有仓库认证
登录私有仓库:
bash复制docker login private.registry.com
31.2 镜像推送流程
标记并推送镜像:
bash复制docker tag local-image:tag private.registry.com/repo:tag
docker push private.registry.com/repo:tag
32. 容器内调试工具
32.1 诊断工具安装
在容器内安装调试工具包:
bash复制docker run -it --rm alpine sh -c "apk add --no-cache busybox-extras && sh"
32.2 网络诊断命令
常用网络工具:
bash复制# 查看网络连接
docker run --rm nicolaka/netshoot netstat -tulnp
# 测试DNS解析
docker run --rm nicolaka/netshoot dig @8.8.8.8 example.com
33. 容器化数据库
33.1 MySQL容器部署
生产级MySQL配置:
bash复制docker run -d \
--name mysql \
-v /data/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=complexpassword \
-e MYSQL_DATABASE=appdb \
-e MYSQL_USER=appuser \
-e MYSQL_PASSWORD=userpass \
--restart unless-stopped \
mysql:8.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
33.2 Redis容器优化
带持久化的Redis配置:
bash复制docker run -d \
--name redis \
-v /data/redis:/data \
-p 6379:6379 \
--restart unless-stopped \
redis:6 \
redis-server --appendonly yes --save 60 1
34. 容器化Web服务
34.1 Nginx最佳实践
优化过的Nginx容器:
bash复制docker run -d \
--name nginx \
-v /path/to/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /path/to/html:/usr/share/nginx/html:ro \
-v /path/to/logs:/var/log/nginx \
-p 80:80 \
-p 443:443 \
--restart unless-stopped \
nginx:alpine
34.2 Apache调优示例
带PHP支持的Apache:
bash复制docker run -d \
--name apache-php \
-v /path/to/webroot:/var/www/html \
-p 8080:80 \
--restart unless-stopped \
php:8.0-apache
35. 批处理任务容器化
35.1 Cron任务实现
使用容器运行定时任务:
bash复制docker run -d \
--name cron-container \
-v /path/to/crontab:/etc/crontabs/root \
alpine:latest \
crond -f -l 8
35.2 一次性任务执行
运行后自动删除的临时容器:
bash复制docker run --rm alpine sh -c "echo '任务开始'; date; echo '任务结束'"
36. GUI应用容器化
36.1 X11转发配置
运行GUI应用的基本方法:
bash复制xhost +local:docker
docker run -it \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
ubuntu xclock
36.2 VNC服务容器
基于VNC的远程桌面:
bash复制docker run -d \
--name vnc-desktop \
-p 5901:5901 \
-v /path/to/data:/home/user \
dorowu/ubuntu-desktop-lxde-vnc
37. 系统服务容器化
37.1 SSH服务容器
带SSH访问的容器:
bash复制docker run -d \
--name ssh-container \
-p 2222:22 \
-e SSH_PUBKEY="$(cat ~/.ssh/id_rsa.pub)" \
linuxserver/openssh-server
37.2 日志收集服务
Fluentd日志收集器:
bash复制docker run -d \
--name fluentd \
-v /path/to/conf:/fluentd/etc \
-v /path/to/logs:/fluentd/log \
-p 24224:24224 \
fluent/fluentd
38. 多容器应用示例
38.1 WordPress全套部署
使用Docker Compose部署WordPress:
yaml复制version: '3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html
volumes:
db_data:
wp_data:
38.2 微服务示例
简单的微服务架构:
yaml复制version: '3'
services:
redis:
image: redis:alpine
ports:
- "6379:6379"
api:
build: ./api
ports:
- "3000:3000"
depends_on:
- redis
worker:
build: ./worker
depends_on:
- redis
39. 容器化开发环境
39.1 VS Code远程开发
使用Dev Containers扩展:
- 安装VS Code和Remote - Containers扩展
- 创建
.devcontainer/devcontainer.json配置文件 - 使用"Remote-Containers: Open Folder in Container"命令
39.2 JetBrains网关配置
连接Docker容器开发:
- 安装JetBrains Gateway
- 选择"Docker"连接方式
- 指定镜像或使用Dockerfile
- 配置端口映射和卷挂载
40. 性能基准测试
40.1 压力测试工具
使用容器化wrk进行测试:
bash复制docker run --rm williamyeh/wrk -t4 -c100 -d30s http://target:8080/
40.2 资源监控方案
使用cAdvisor+Prometheus+Grafana:
yaml复制version: '3'
services:
prometheus:
image: prom/prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
cadvisor:
image: gcr.io/cadvisor/cadvisor
ports:
- "8080:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
grafana:
image: grafana/grafana
ports:
- "3000:3000"
41. 容器安全扫描
41.1 Clair静态分析
使用Clair扫描镜像漏洞:
bash复制docker run -d --name clair-db arminc/clair-db:latest
docker run -p 6060:6060 --link clair-db:postgres -d --name clair arminc/clair-local-scan:latest
clair-scanner --ip 主机IP --clair=http://clair:6060 镜像名称
41.2 Anchore深度检查
使用Anchore引擎:
bash复制docker-compose -f docker-compose.yaml up -d
anchore-cli image add 镜像名称
anchore-cli image wait 镜像名称
anchore-cli image vuln 镜像名称 all
42. 容器网络诊断
42.1 网络问题排查
使用netshoot工具包:
bash复制docker run --rm -it --net container:目标容器 nicolaka/netshoot
42.2 流量捕获分析
在容器内抓包:
bash复制docker run --rm -it --net=host nicolaka/netshoot tcpdump -i eth0 -w capture.pcap
43. 容器存储方案
43.1 分布式存储集成
使用Ceph RBD卷:
bash复制docker volume create --driver=rbd \
--name=ceph-vol \
--opt=pool=rbd \
--opt=size=1024 \
--opt=name=volume1
43.2 NFS卷配置
使用NFS共享存储:
bash复制docker volume create \
--driver local \
--opt type=nfs \
--opt o=addr=192.168.1.100,rw \
--opt device=:/path/to/share \
nfs-volume
44. 容器日志分析
44.1 ELK日志收集
Docker日志发送到Logstash:
json复制{
"log-driver": "gelf",
"log-opts": {
"gelf-address": "udp://logstash:12201",
"tag": "{{.ImageName}}/{{.Name}}/{{.ID}}"
}
}
44.2 实时日志分析
使用lnav工具:
bash复制docker run --rm -it -v /path/to/logs:/logs alpine sh -c "apk add lnav && lnav /logs"
45. 容器镜像优化
45.1 多阶段构建进阶
优化Go应用镜像示例:
dockerfile复制# 第一阶段:构建应用
FROM golang:1.16 AS builder
WORKDIR /src
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
# 第二阶段:最小化运行时镜像
FROM scratch
COPY --from=builder /src/app /app
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
CMD ["/app"]
45.2 镜像瘦身技巧
减小镜像体积的方法:
- 使用Alpine等小型基础镜像
- 合并RUN命令减少层数
- 清理不必要的缓存和临时文件
- 使用多阶段构建
- 压缩静态资源
46. 容器编排进阶
46.1 Swarm服务更新
滚动更新策略示例:
bash复制docker service update \
--image nginx:1.19 \
--update-parallelism 2 \
--update-delay 10s \
nginx
46.2 服务约束配置
基于标签的节点约束:
bash复制docker node update --label-add disk=ssd node1
docker service create \
--constraint 'node.labels.disk == ssd' \
--name fast-storage \
nginx
47. 容器安全监控
47.1 运行时防护
使用Falco检测异常:
bash复制docker run -d \
--name falco \
--privileged \
-v /var/run/docker.sock:/host/var/run/docker.sock \
-v /dev:/host/dev \
-v /proc:/host/proc:ro \
-v /boot:/host/boot:ro \
-v /lib/modules:/host/lib/modules:ro \
-v /usr:/host/usr:ro \
falcosecurity/falco
47.2 审计日志分析
收集Docker审计日志:
bash复制echo "
-w /usr/bin/docker -k docker
-w /var/lib/docker -k
