Docker安装与配置全指南:从环境检查到性能优化

📅 2026/8/11 18:52:52
Docker安装与配置全指南:从环境检查到性能优化
1. Docker安装前的环境检查在开始安装Docker之前我们需要确保系统满足基本要求。我见过太多人直接跳过这一步结果安装过程中遇到各种奇怪问题。以Windows平台为例首先需要确认以下几点重要提示Windows 10/11家庭版需要先升级到专业版或企业版才能使用Docker Desktop因为家庭版默认不包含Hyper-V功能。1.1 虚拟化支持检查打开任务管理器(CtrlShiftEsc)切换到性能标签页查看CPU部分是否显示虚拟化已启用。如果没有启用需要进入BIOS设置通常在开机时按F2或Del键开启VT-x(Intel)或AMD-V(AMD)虚拟化技术。1.2 WSL2环境准备对于Windows系统Docker Desktop现在默认使用WSL2作为后端。建议先手动安装WSL2wsl --install wsl --set-default-version 2如果遇到WSL 2 requires an update to its kernel component错误需要下载并安装Linux内核更新包。我建议直接从微软官网获取最新版本避免使用第三方来源。1.3 系统版本要求Windows: 10/11 64位专业版或企业版版本号至少为1903macOS: 10.15 Catalina或更高版本Linux: 内核版本3.10以上推荐使用Ubuntu 20.04 LTS或CentOS 72. Docker Desktop安装全流程2.1 下载与安装访问Docker官网下载对应系统的安装包。这里有个小技巧国内用户建议使用迅雷等下载工具官网直连速度可能较慢。安装过程中有几个关键选项需要注意勾选Add shortcut to desktop创建桌面快捷方式勾选Use WSL 2 instead of Hyper-VWindows系统勾选Enable Docker Compose V2推荐2.2 常见安装报错解决错误1Docker Desktop failed to start because virtualization support wasnt detected这个错误通常有三种可能原因BIOS中虚拟化技术未启用解决方案见1.1节Hyper-V未启用以管理员身份运行PowerShell执行Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All与第三方虚拟化软件冲突如VMware、VirtualBox错误2WSL: 检测到localhost代理配置但未镜像到WSL这是网络配置问题解决方法# 在PowerShell中执行 netsh winsock reset netsh int ip reset all netsh winhttp reset proxy ipconfig /flushdns错误3安装后Docker服务无法启动尝试以下步骤以管理员身份运行Docker Desktop重置Docker到出厂设置Settings → Reset完全卸载后重新安装3. 镜像源配置优化国内直接使用Docker官方镜像速度很慢我们需要配置国内镜像加速器。以下是各平台的配置方法3.1 Windows/macOS配置在Docker Desktop界面中点击设置图标(Settings)选择Docker Engine在配置文件中添加registry-mirrors: [ https://registry.docker-cn.com, https://hub-mirror.c.163.com, https://mirror.baidubce.com ]点击Apply Restart3.2 Linux系统配置对于Linux系统编辑或创建/etc/docker/daemon.json文件sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [ https://docker.mirrors.ustc.edu.cn, https://mirror.ccs.tencentyun.com ] } EOF sudo systemctl daemon-reload sudo systemctl restart docker3.3 验证镜像源执行以下命令验证配置是否生效docker info | grep -A 1 Registry Mirrors应该能看到你配置的镜像地址。4. Docker核心命令详解4.1 镜像管理命令拉取镜像以nginx为例docker pull nginx:latest查看本地镜像docker images # 或者更详细的显示 docker image ls --format table {{.ID}}\t{{.Repository}}\t{{.Tag}}\t{{.Size}}删除镜像docker rmi 镜像ID # 强制删除即使有容器使用该镜像 docker rmi -f 镜像ID镜像搜索docker search nginx # 限制显示结果数 docker search --limit 5 nginx4.2 容器生命周期管理运行容器# 基本运行 docker run -d --name my_nginx nginx # 带端口映射 docker run -d -p 8080:80 --name web_nginx nginx # 带数据卷挂载 docker run -d -v /host/path:/container/path --name vol_nginx nginx容器操作# 查看运行中的容器 docker ps # 查看所有容器包括停止的 docker ps -a # 启动/停止/重启容器 docker start 容器ID docker stop 容器ID docker restart 容器ID # 进入容器shell docker exec -it 容器ID /bin/bash # 删除容器 docker rm 容器ID # 强制删除运行中的容器 docker rm -f 容器ID4.3 网络与存储管理网络管理# 查看网络列表 docker network ls # 创建自定义网络 docker network create my_network # 将容器连接到网络 docker network connect my_network my_container数据卷管理# 创建数据卷 docker volume create my_volume # 查看数据卷详情 docker volume inspect my_volume # 删除数据卷 docker volume rm my_volume5. 高级配置与优化5.1 资源限制配置默认情况下Docker容器可以使用宿主机的所有资源。在生产环境中我们需要限制容器资源使用# 限制CPU使用最多使用50%的CPU docker run -d --cpus.5 --name limited_nginx nginx # 限制内存使用最大1GB docker run -d -m 1g --name mem_limited_nginx nginx5.2 日志管理Docker容器日志默认会占用越来越多磁盘空间需要合理配置# 查看容器日志 docker logs 容器ID # 实时查看日志 docker logs -f 容器ID # 配置日志轮转在运行容器时 docker run -d --log-opt max-size10m --log-opt max-file3 --name log_nginx nginx5.3 安全最佳实践不要以root用户运行容器docker run -d -u 1000 --name safe_nginx nginx只读文件系统docker run -d --read-only --name readonly_nginx nginx限制能力docker run -d --cap-drop ALL --cap-add NET_BIND_SERVICE --name secure_nginx nginx6. 常见问题排查指南6.1 容器启动失败现象容器状态显示Exited (1)排查步骤查看容器日志docker logs 容器ID检查端口冲突netstat -tulnp | grep 端口号尝试交互式运行docker run -it --rm 镜像 /bin/bash6.2 网络连接问题现象容器内无法访问外部网络解决方法检查DNS配置docker run -it --rm alpine ping 8.8.8.8 docker run -it --rm alpine ping www.baidu.com如果IP能通但域名不通需要配置DNS# 在daemon.json中添加 dns: [8.8.8.8, 114.114.114.114]6.3 存储空间不足现象docker: write /var/lib/docker: no space left on device.清理方法# 删除所有停止的容器 docker container prune # 删除所有未被使用的镜像 docker image prune -a # 删除所有未被使用的网络 docker network prune # 删除所有未被使用的数据卷 docker volume prune # 一键清理所有未使用资源 docker system prune -a7. 实际应用场景示例7.1 开发环境搭建以Python开发环境为例# 创建开发容器 docker run -it --name py_dev -v $(pwd):/app -p 8000:8000 python:3.9-slim bash # 容器内安装依赖 pip install flask django # 退出后重新进入 docker start py_dev docker exec -it py_dev bash7.2 数据库服务部署部署MySQL数据库docker run -d --name mysql_db \ -e MYSQL_ROOT_PASSWORDmysecretpassword \ -e MYSQL_DATABASEmyapp \ -e MYSQL_USERuser \ -e MYSQL_PASSWORDpassword \ -p 3306:3306 \ -v mysql_data:/var/lib/mysql \ mysql:8.0 \ --character-set-serverutf8mb4 \ --collation-serverutf8mb4_unicode_ci7.3 Web应用部署部署Nginx PHP应用# 创建自定义网络 docker network create app_net # 启动PHP服务 docker run -d --name php_app \ --network app_net \ -v $(pwd):/var/www/html \ php:8.0-fpm # 启动Nginx docker run -d --name nginx_web \ --network app_net \ -p 80:80 \ -v $(pwd):/var/www/html \ -v ./nginx.conf:/etc/nginx/conf.d/default.conf \ nginx:latest8. 性能监控与维护8.1 资源监控查看容器资源使用情况docker stats # 查看单个容器详情 docker inspect 容器ID # 查看容器进程 docker top 容器ID8.2 备份与迁移备份容器# 导出容器为tar文件 docker export 容器ID container.tar # 导入为镜像 cat container.tar | docker import - my_backup备份数据卷# 创建备份容器 docker run --rm -v my_volume:/volume -v $(pwd):/backup alpine \ tar cvf /backup/backup.tar /volume8.3 版本升级Docker版本升级步骤备份重要容器和数据卸载旧版本安装新版本验证功能docker --version docker-compose --version docker run hello-world在实际使用Docker的过程中我发现很多问题都是由于基础配置不当引起的。建议新手在正式使用前先花时间理解Docker的核心概念和架构原理。遇到问题时善用docker logs和docker inspect命令查看详细错误信息大多数常见问题都能在官方文档或社区找到解决方案。