三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

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

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

1. Docker安装前的环境检查

在开始安装Docker之前,我们需要确保系统满足基本要求。我见过太多人直接跳过这一步,结果安装过程中遇到各种奇怪问题。以Windows平台为例,首先需要确认以下几点:

重要提示:Windows 10/11家庭版需要先升级到专业版或企业版才能使用Docker Desktop,因为家庭版默认不包含Hyper-V功能。

1.1 虚拟化支持检查

打开任务管理器(Ctrl+Shift+Esc),切换到"性能"标签页,查看CPU部分是否显示"虚拟化:已启用"。如果没有启用,需要进入BIOS设置(通常在开机时按F2或Del键)开启VT-x(Intel)或AMD-V(AMD)虚拟化技术。

1.2 WSL2环境准备

对于Windows系统,Docker Desktop现在默认使用WSL2作为后端。建议先手动安装WSL2:

wsl --install wsl --set-default-version 2

如果遇到"WSL 2 requires an update to its kernel component"错误,需要下载并安装Linux内核更新包。我建议直接从微软官网获取最新版本,避免使用第三方来源。

1.3 系统版本要求

  • Windows: 10/11 64位专业版或企业版,版本号至少为1903
  • macOS: 10.15 Catalina或更高版本
  • Linux: 内核版本3.10以上(推荐使用Ubuntu 20.04 LTS或CentOS 7+)

2. Docker Desktop安装全流程

2.1 下载与安装

访问Docker官网下载对应系统的安装包。这里有个小技巧:国内用户建议使用迅雷等下载工具,官网直连速度可能较慢。

安装过程中有几个关键选项需要注意:

  • 勾选"Add shortcut to desktop"(创建桌面快捷方式)
  • 勾选"Use WSL 2 instead of Hyper-V"(Windows系统)
  • 勾选"Enable Docker Compose V2"(推荐)

2.2 常见安装报错解决

错误1:Docker Desktop failed to start because virtualization support wasn't detected

这个错误通常有三种可能原因:

  1. BIOS中虚拟化技术未启用(解决方案见1.1节)
  2. Hyper-V未启用(以管理员身份运行PowerShell执行):
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
  1. 与第三方虚拟化软件冲突(如VMware、VirtualBox)

错误2:WSL: 检测到localhost代理配置,但未镜像到WSL

这是网络配置问题,解决方法:

# 在PowerShell中执行 netsh winsock reset netsh int ip reset all netsh winhttp reset proxy ipconfig /flushdns

错误3:安装后Docker服务无法启动

尝试以下步骤:

  1. 以管理员身份运行Docker Desktop
  2. 重置Docker到出厂设置(Settings → Reset)
  3. 完全卸载后重新安装

3. 镜像源配置优化

国内直接使用Docker官方镜像速度很慢,我们需要配置国内镜像加速器。以下是各平台的配置方法:

3.1 Windows/macOS配置

在Docker Desktop界面中:

  1. 点击设置图标(Settings)
  2. 选择"Docker Engine"
  3. 在配置文件中添加:
"registry-mirrors": [ "https://registry.docker-cn.com", "https://hub-mirror.c.163.com", "https://mirror.baidubce.com" ]
  1. 点击"Apply & Restart"

3.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 docker

3.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 nginx

4.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 <容器ID>

4.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_volume

5. 高级配置与优化

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 nginx

5.2 日志管理

Docker容器日志默认会占用越来越多磁盘空间,需要合理配置:

# 查看容器日志 docker logs <容器ID> # 实时查看日志 docker logs -f <容器ID> # 配置日志轮转(在运行容器时) docker run -d --log-opt max-size=10m --log-opt max-file=3 --name log_nginx nginx

5.3 安全最佳实践

  1. 不要以root用户运行容器
docker run -d -u 1000 --name safe_nginx nginx
  1. 只读文件系统
docker run -d --read-only --name readonly_nginx nginx
  1. 限制能力
docker run -d --cap-drop ALL --cap-add NET_BIND_SERVICE --name secure_nginx nginx

6. 常见问题排查指南

6.1 容器启动失败

现象:容器状态显示Exited (1)

排查步骤:

  1. 查看容器日志:
docker logs <容器ID>
  1. 检查端口冲突:
netstat -tulnp | grep <端口号>
  1. 尝试交互式运行:
docker run -it --rm <镜像> /bin/bash

6.2 网络连接问题

现象:容器内无法访问外部网络

解决方法:

  1. 检查DNS配置:
docker run -it --rm alpine ping 8.8.8.8 docker run -it --rm alpine ping www.baidu.com
  1. 如果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 -a

7. 实际应用场景示例

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 bash

7.2 数据库服务部署

部署MySQL数据库:

docker run -d --name mysql_db \ -e MYSQL_ROOT_PASSWORD=mysecretpassword \ -e MYSQL_DATABASE=myapp \ -e MYSQL_USER=user \ -e MYSQL_PASSWORD=password \ -p 3306:3306 \ -v mysql_data:/var/lib/mysql \ mysql:8.0 \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_unicode_ci

7.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:latest

8. 性能监控与维护

8.1 资源监控

查看容器资源使用情况:

docker stats # 查看单个容器详情 docker inspect <容器ID> # 查看容器进程 docker top <容器ID>

8.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 /volume

8.3 版本升级

Docker版本升级步骤:

  1. 备份重要容器和数据
  2. 卸载旧版本
  3. 安装新版本
  4. 验证功能:
docker --version docker-compose --version docker run hello-world

在实际使用Docker的过程中,我发现很多问题都是由于基础配置不当引起的。建议新手在正式使用前,先花时间理解Docker的核心概念和架构原理。遇到问题时,善用docker logsdocker inspect命令查看详细错误信息,大多数常见问题都能在官方文档或社区找到解决方案。

← 返回列表