尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Ubuntu 22.04安装与优化Docker完整指南

Ubuntu 22.04安装与优化Docker完整指南 1. Ubuntu 22.04系统与Docker的适配性解析作为目前最流行的Linux发行版之一Ubuntu 22.04 LTSJammy Jellyfish对容器化技术的支持已经相当成熟。系统内核默认为5.15版本完全满足Docker对Linux内核的最低要求3.10。与旧版Ubuntu相比22.04在以下方面具有显著优势内置的apt软件源已收录Docker官方维护的稳定版本默认启用的cgroups v2与Docker的兼容性经过优化对Overlay2存储驱动的支持更为完善系统防火墙UFW规则可自动适配Docker网络注意虽然Ubuntu 22.04默认未预装Docker但其软件仓库中的docker.io包实际上是较旧的社区版本。建议始终通过官方仓库安装以获得最新功能和安全性更新。2. 安装前的系统准备2.1 硬件环境检查在开始安装前建议先验证系统环境是否符合Docker运行要求# 检查CPU虚拟化支持物理机需要 grep -E --color vmx|svm /proc/cpuinfo # 检查内核版本 uname -r # 检查存储驱动支持 lsmod | grep overlay若在物理机上运行且未检测到虚拟化支持需进入BIOS启用Intel VT-x或AMD-V技术。对于云服务器通常已由云服务商预配置。2.2 系统依赖安装确保系统软件包为最新状态sudo apt update sudo apt upgrade -y sudo apt install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release2.3 旧版本清理如适用若系统存在旧版Docker应先彻底卸载sudo apt remove -y docker docker-engine docker.io containerd runc sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd3. 官方Docker仓库配置3.1 GPG密钥添加Docker官方软件包采用加密签名需先添加可信密钥sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \ sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg3.2 仓库源设置根据系统架构配置APT源以amd64为例echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null更新软件包索引sudo apt update4. Docker引擎安装与验证4.1 安装核心组件安装Docker CE社区版、CLI工具和容器运行时sudo apt install -y \ docker-ce \ docker-ce-cli \ containerd.io \ docker-compose-plugin4.2 服务启动与自启配置sudo systemctl enable --now docker验证安装是否成功sudo docker run hello-world正常情况应看到欢迎信息及Docker基本说明。5. 非root用户权限配置5.1 用户组管理为避免每次使用docker命令都需要sudo可将当前用户加入docker组sudo usermod -aG docker $USER newgrp docker # 立即生效无需注销5.2 权限验证docker run --rm alpine echo 权限配置成功若出现权限错误可检查/var/run/docker.sock文件权限ls -l /var/run/docker.sock6. 存储驱动优化配置6.1 驱动选择建议Ubuntu 22.04默认使用overlay2驱动可通过以下命令验证docker info | grep Storage对于使用ext4文件系统的用户建议在/etc/docker/daemon.json中添加优化配置{ storage-driver: overlay2, storage-opts: [ overlay2.override_kernel_checktrue ] }6.2 数据目录迁移可选如需更改默认存储位置如挂载独立数据盘{ data-root: /path/to/new/docker }修改后需重启服务sudo systemctl restart docker7. 网络与防火墙配置7.1 UFW规则调整若系统启用了UFW防火墙需放行Docker网络sudo ufw allow 2375/tcp sudo ufw reload7.2 自定义网络创建建议为应用创建独立网络docker network create --driver bridge my_network8. 国内用户特别优化8.1 镜像加速配置在/etc/docker/daemon.json中添加国内镜像源{ registry-mirrors: [ https://hub-mirror.c.163.com, https://mirror.baidubce.com ] }8.2 容器时区同步解决容器内时区不一致问题sudo timedatectl set-timezone Asia/Shanghai sudo apt install -y tzdata9. 常见问题排查指南9.1 虚拟化支持异常错误现象Cannot connect to the Docker daemon at unix:///var/run/docker.sock解决方案sudo systemctl start docker sudo chmod 666 /var/run/docker.sock9.2 存储驱动冲突当出现storage-driver相关错误时可尝试sudo rm -rf /var/lib/docker sudo systemctl restart docker9.3 网络端口冲突排查占用端口的进程sudo netstat -tulnp | grep 端口号10. 进阶配置与工具集成10.1 Docker Compose安装虽然已安装插件版传统Compose仍可通过sudo curl -L https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m) \ -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose10.2 可视化管理工具Portainer CE的快速部署docker volume create portainer_data docker run -d -p 8000:8000 -p 9443:9443 \ --name portainer \ --restartalways \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer-ce:latest11. 系统服务监控与维护11.1 资源使用查看docker stats docker system df11.2 定期清理策略设置定时任务清理无用资源# 每周日凌晨3点执行 (crontab -l 2/dev/null; echo 0 3 * * 0 docker system prune -f) | crontab -12. 安全加固建议12.1 用户命名空间隔离启用userns-remap增强隔离性sudo echo dockremap:165536:65536 /etc/subuid sudo echo dockremap:165536:65536 /etc/subgid然后在daemon.json中添加{ userns-remap: dockremap }12.2 日志轮转配置创建/etc/docker/daemon.json的日志配置{ log-driver: json-file, log-opts: { max-size: 10m, max-file: 3 } }13. 性能调优实践13.1 内存限制调整对于开发环境可修改默认内存限制sudo mkdir -p /etc/systemd/system/docker.service.d sudo tee /etc/systemd/system/docker.service.d/override.conf EOF [Service] MemoryLimit4G EOF sudo systemctl daemon-reload sudo systemctl restart docker13.2 容器资源限制运行容器时明确资源限制docker run -it --cpus1 --memory2g alpine14. 多架构镜像支持启用buildx构建跨平台镜像docker buildx create --use docker buildx inspect --bootstrap构建命令示例docker buildx build --platform linux/amd64,linux/arm64 -t username/image:tag .15. 备份与恢复策略15.1 容器持久化数据备份docker run --rm --volumes-from my_container \ -v $(pwd):/backup alpine \ tar cvf /backup/backup.tar /container_data15.2 完整Docker环境迁移导出所有镜像docker save $(docker images -q) -o all_images.tar导出容器数据卷for container in $(docker ps -aq); do docker export $container ${container}.tar done16. 开发环境特殊配置16.1 IDE集成设置VS Code的Dev Containers扩展需要sudo apt install -y \ openssh-server \ git16.2 调试端口映射运行支持远程调试的容器docker run -p 3000:3000 -p 9229:9229 \ -e NODE_ENVdevelopment \ my_app17. 生产环境部署规范17.1 容器健康检查Dockerfile中应包含HEALTHCHECK --interval30s --timeout3s \ CMD curl -f http://localhost/health || exit 117.2 资源限制实践使用docker-compose.yml示例services: web: deploy: resources: limits: cpus: 0.5 memory: 512M18. 版本升级与回滚18.1 版本查询与升级查看可用版本apt list -a docker-ce指定版本安装sudo apt install docker-ceVERSION18.2 降级操作步骤sudo apt-mark hold docker-ce sudo apt install docker-ceOLDER_VERSION19. 日志收集与分析19.1 ELK集成配置启动ELK容器栈docker run -d --name elasticsearch \ -p 9200:9200 -p 9300:9300 \ -e discovery.typesingle-node \ docker.elastic.co/elasticsearch/elasticsearch:8.6.2 docker run -d --name kibana \ --link elasticsearch:elasticsearch \ -p 5601:5601 \ docker.elastic.co/kibana/kibana:8.6.219.2 容器日志驱动配置syslog日志驱动{ log-driver: syslog, log-opts: { syslog-address: udp://1.2.3.4:514 } }20. 容器编排初步实践20.1 Swarm模式启用初始化Swarm集群docker swarm init --advertise-addr IP_ADDRESS20.2 服务部署示例docker service create \ --name web \ --publish published8080,target80 \ --replicas 3 \ nginx21. GPU加速支持21.1 NVIDIA容器工具安装distribution$(. /etc/os-release;echo $ID$VERSION_ID) \ curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo apt-key add - \ curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list sudo apt update sudo apt install -y nvidia-container-toolkit sudo systemctl restart docker21.2 GPU容器运行测试docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi22. 自定义镜像构建优化22.1 多阶段构建示例FROM golang:1.19 AS builder WORKDIR /app COPY . . RUN go build -o myapp . FROM alpine:latest COPY --frombuilder /app/myapp . CMD [./myapp]22.2 构建缓存利用docker build --build-arg BUILDKIT_INLINE_CACHE1 -t myapp .23. 容器安全扫描23.1 Trivy漏洞扫描docker run --rm \ -v /var/run/docker.sock:/var/run/docker.sock \ aquasec/trivy image my_image23.2 Docker Bench测试docker run --rm --net host --pid host --userns host --cap-add audit_control \ -e DOCKER_CONTENT_TRUST1 \ -v /etc:/etc:ro \ -v /usr/bin/docker-containerd:/usr/bin/docker-containerd:ro \ -v /usr/bin/docker-runc:/usr/bin/docker-runc:ro \ -v /lib/systemd/system:/lib/systemd/system:ro \ -v /var/lib:/var/lib:ro \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ --label docker_bench_security \ docker/docker-bench-security24. 容器网络深度配置24.1 自定义网桥创建docker network create \ --driver bridge \ --subnet 172.28.0.0/16 \ --gateway 172.28.5.254 \ my-bridge-network24.2 Macvlan网络实践docker network create -d macvlan \ --subnet192.168.1.0/24 \ --gateway192.168.1.1 \ -o parenteth0 \ my-macvlan25. 持续集成集成示例25.1 GitHub Actions配置jobs: build: runs-on: ubuntu-22.04 steps: - uses: actions/checkoutv3 - name: Build Docker image run: docker build -t myapp . - name: Run tests run: docker run myapp npm test25.2 Jenkins管道示例pipeline { agent any stages { stage(Build) { steps { sh docker build -t myapp . } } stage(Test) { steps { sh docker run myapp npm test } } } }26. 容器存储卷进阶26.1 卷插件使用示例docker volume create --driver vieux/sshfs \ -o sshcmduserremotehost:/remote/path \ -o passwordsecret \ sshvolume26.2 数据卷备份策略docker run --rm \ -v dbdata:/volume \ -v $(pwd):/backup \ alpine \ tar cvf /backup/dbdata.tar /volume27. 容器资源监控方案27.1 cAdvisor部署docker run \ --volume/:/rootfs:ro \ --volume/var/run:/var/run:ro \ --volume/sys:/sys:ro \ --volume/var/lib/docker/:/var/lib/docker:ro \ --publish8080:8080 \ --detachtrue \ --namecadvisor \ google/cadvisor:latest27.2 Prometheus配置scrape_configs: - job_name: docker static_configs: - targets: [cadvisor:8080]28. 容器日志管理进阶28.1 Loki日志收集docker run -d --name loki -p 3100:3100 grafana/loki28.2 Fluentd日志驱动{ log-driver: fluentd, log-opts: { fluentd-address: fluentdhost:24224, tag: docker.{{.Name}} } }29. 容器调试技巧29.1 故障容器诊断docker exec -it faulty_container /bin/sh29.2 网络连通性测试docker run --rm --network container:target_container \ nicolaka/netshoot \ ping google.com30. 最佳实践总结经过多年在Ubuntu系统上部署Docker的经验我总结出以下关键实践要点始终通过官方仓库安装Docker避免使用系统自带的docker.io包生产环境必须配置日志轮转和资源限制开发环境建议启用BuildKit加速镜像构建定期执行docker system prune清理无用资源重要数据卷必须建立备份机制使用非root用户运行容器时应谨慎处理权限问题多阶段构建可以显著减小最终镜像体积容器编排工具选择应考虑团队熟悉度和业务规模对于刚接触Docker的Ubuntu用户建议从单容器应用开始逐步掌握网络、存储等核心概念后再尝试复杂部署。遇到问题时docker logs和docker inspect应成为首选调试工具。
返回列表