1. Docker安装前的准备工作
在开始安装Docker之前,我们需要先了解一些基础概念和准备工作。Docker是一种容器化技术,它允许你将应用程序及其依赖项打包到一个轻量级、可移植的容器中。与虚拟机相比,Docker容器更加轻量,启动更快,资源占用更少。
1.1 系统要求检查
不同操作系统对Docker的支持情况不同。以下是主流操作系统的支持情况:
- Linux:大多数现代Linux发行版都支持Docker,特别是Ubuntu、CentOS、Debian等主流发行版
- Windows:需要Windows 10专业版/企业版/教育版(64位),并启用Hyper-V
- macOS:需要macOS 10.13或更高版本
提示:在Windows家庭版上安装Docker需要额外步骤,建议升级到专业版或使用Docker Toolbox
1.2 硬件要求
虽然Docker对硬件要求不高,但为了获得更好的体验,建议满足以下配置:
- 64位处理器
- 至少4GB内存(建议8GB以上)
- 20GB可用磁盘空间
- 支持虚拟化技术(VT-x/AMD-V)
可以通过以下命令检查CPU是否支持虚拟化(Linux/macOS):
bash复制egrep -c '(vmx|svm)' /proc/cpuinfo
如果输出大于0,则表示支持。
2. Docker安装步骤详解
2.1 Linux系统安装
以Ubuntu 20.04为例,安装步骤如下:
- 更新apt包索引:
bash复制sudo apt-get update
- 安装依赖包:
bash复制sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
- 添加Docker官方GPG密钥:
bash复制curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 添加稳定版仓库:
bash复制sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
- 安装Docker引擎:
bash复制sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
- 验证安装:
bash复制sudo docker run hello-world
2.2 Windows系统安装
-
下载Docker Desktop安装包:
- 访问Docker官网下载Windows版安装程序
- 双击Docker Desktop Installer.exe运行安装程序
-
安装过程中需要:
- 启用Hyper-V和容器功能
- 可能需要重启计算机
-
安装完成后:
- 启动Docker Desktop
- 等待Docker引擎启动(系统托盘会出现鲸鱼图标)
-
验证安装:
打开PowerShell或命令提示符,运行:
cmd复制docker run hello-world
2.3 macOS系统安装
-
下载Docker Desktop for Mac:
- 访问Docker官网下载macOS版安装程序
- 双击Docker.dmg打开安装镜像
-
将Docker应用拖到Applications文件夹
-
启动Docker应用
-
在顶部菜单栏会出现Docker图标,表示正在运行
-
验证安装:
打开终端,运行:
bash复制docker run hello-world
3. 常见安装问题及解决方案
3.1 Linux系统常见问题
问题1:无法连接到Docker守护进程
解决方案:
bash复制sudo systemctl start docker
sudo systemctl enable docker
问题2:权限拒绝错误
解决方案:将当前用户加入docker组
bash复制sudo usermod -aG docker $USER
然后注销并重新登录
3.2 Windows系统常见问题
问题1:WSL 2安装不完整
解决方案:
- 下载WSL 2内核更新包并安装
- 设置WSL 2为默认版本:
powershell复制wsl --set-default-version 2
问题2:Hyper-V未启用
解决方案:
- 以管理员身份打开PowerShell
- 运行:
powershell复制Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
- 重启计算机
3.3 macOS系统常见问题
问题1:无法启动Docker
解决方案:
- 检查系统是否满足要求(macOS 10.13+)
- 尝试重置Docker:
- 点击菜单栏Docker图标
- 选择Troubleshoot > Reset to factory defaults
问题2:磁盘空间不足
解决方案:
- 点击菜单栏Docker图标
- 选择Preferences > Resources > Disk image location
- 更改存储位置到有足够空间的磁盘
4. Docker镜像配置优化
4.1 配置国内镜像加速器
由于国内访问Docker Hub速度较慢,建议配置镜像加速器:
- 编辑或创建配置文件:
bash复制sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://<your-mirror>.mirror.aliyuncs.com"]
}
EOF
- 重启Docker服务:
bash复制sudo systemctl daemon-reload
sudo systemctl restart docker
常用镜像加速器地址:
- 阿里云:https://
.mirror.aliyuncs.com - 腾讯云:https://mirror.ccs.tencentyun.com
- 网易云:https://hub-mirror.c.163.com
4.2 镜像存储位置调整
默认情况下,Docker镜像存储在系统盘,可能导致空间不足。可以修改存储位置:
Linux系统:
- 停止Docker服务:
bash复制sudo systemctl stop docker
- 移动现有数据:
bash复制sudo mv /var/lib/docker /new/location
- 创建符号链接:
bash复制sudo ln -s /new/location/docker /var/lib/docker
- 启动Docker服务:
bash复制sudo systemctl start docker
Windows/macOS:
通过Docker Desktop的Preferences/设置界面修改磁盘镜像位置。
5. Docker常用命令详解
5.1 镜像相关命令
- 搜索镜像:
bash复制docker search <image-name>
- 拉取镜像:
bash复制docker pull <image-name>:<tag>
- 列出本地镜像:
bash复制docker images
- 删除镜像:
bash复制docker rmi <image-id>
- 构建镜像:
bash复制docker build -t <image-name> .
5.2 容器相关命令
- 运行容器:
bash复制docker run [options] <image-name>
常用选项:
- -d:后台运行
- -p:端口映射
- -v:卷挂载
- --name:指定容器名称
- 列出容器:
bash复制docker ps -a
- 启动/停止容器:
bash复制docker start/stop <container-id>
- 进入容器:
bash复制docker exec -it <container-id> /bin/bash
- 删除容器:
bash复制docker rm <container-id>
5.3 网络和卷管理
- 列出网络:
bash复制docker network ls
- 创建网络:
bash复制docker network create <network-name>
- 列出卷:
bash复制docker volume ls
- 创建卷:
bash复制docker volume create <volume-name>
6. Docker日常使用技巧
6.1 容器日志查看
- 查看实时日志:
bash复制docker logs -f <container-id>
- 查看最后N行日志:
bash复制docker logs --tail=100 <container-id>
- 带时间戳查看日志:
bash复制docker logs -t <container-id>
6.2 资源监控
- 查看容器资源使用情况:
bash复制docker stats
- 查看容器详细信息:
bash复制docker inspect <container-id>
- 查看容器进程:
bash复制docker top <container-id>
6.3 数据备份与迁移
- 备份容器为镜像:
bash复制docker commit <container-id> <backup-image-name>
- 导出容器:
bash复制docker export <container-id> > container.tar
- 导入容器:
bash复制cat container.tar | docker import - <image-name>
- 保存镜像为文件:
bash复制docker save -o image.tar <image-name>
- 从文件加载镜像:
bash复制docker load -i image.tar
7. Docker安全最佳实践
7.1 容器安全配置
- 不要以root用户运行容器:
bash复制docker run -u <user> <image-name>
- 限制容器资源:
bash复制docker run --memory=512m --cpus=1 <image-name>
- 设置只读文件系统:
bash复制docker run --read-only <image-name>
7.2 镜像安全扫描
- 使用Docker内置扫描:
bash复制docker scan <image-name>
- 使用第三方工具:
- Clair
- Trivy
- Anchore
7.3 网络隔离
- 创建自定义网络:
bash复制docker network create --driver bridge isolated_network
- 限制容器网络访问:
bash复制docker run --network none <image-name>
- 使用防火墙规则限制容器通信
8. Docker Compose入门
8.1 安装Docker Compose
- Linux系统:
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
- Windows/macOS:
Docker Desktop已包含Compose,无需单独安装
8.2 编写docker-compose.yml
示例文件:
yaml复制version: '3'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: example
8.3 常用Compose命令
- 启动服务:
bash复制docker-compose up -d
- 停止服务:
bash复制docker-compose down
- 查看服务状态:
bash复制docker-compose ps
- 查看服务日志:
bash复制docker-compose logs -f
9. Docker生产环境部署建议
9.1 容器编排选择
- Docker Swarm:Docker原生编排工具,简单易用
- Kubernetes:功能强大,行业标准
- Nomad:轻量级替代方案
9.2 监控方案
- Docker原生监控:
bash复制docker stats
- Prometheus + Grafana:
- 部署Prometheus监控Docker
- 使用Grafana可视化数据
- 商业方案:
- Datadog
- New Relic
9.3 日志管理
- ELK Stack:
- Elasticsearch
- Logstash
- Kibana
- Fluentd:
bash复制docker run --log-driver=fluentd <image-name>
- 云服务:
- AWS CloudWatch
- Google Stackdriver
10. Docker进阶学习资源
10.1 官方文档
- Docker官方文档:https://docs.docker.com/
- Docker Compose文档:https://docs.docker.com/compose/
- Docker Hub:https://hub.docker.com/
10.2 推荐书籍
- "Docker Deep Dive" - Nigel Poulton
- "The Docker Book" - James Turnbull
- "Docker in Action" - Jeff Nickoloff
10.3 在线课程
- Docker官方培训:https://training.mirantis.com/
- Udemy Docker课程
- Pluralsight Docker课程
10.4 社区资源
- Docker官方论坛:https://forums.docker.com/
- Stack Overflow Docker标签
- Reddit r/docker社区
在实际使用Docker的过程中,我发现最常遇到的问题往往是网络配置和存储卷挂载。特别是在多容器协作的场景下,合理的网络规划可以避免很多连通性问题。对于持久化数据,一定要明确区分哪些数据应该放在卷中,哪些可以放在容器内。