概述
Docker 是一个开源的容器化平台,它使用 Linux 内核的资源隔离功能来创建独立的容器。Docker 通过容器来打包、分发和运行应用程序,实现了应用与环境的分离。
核心特性
- 轻量级虚拟化:比传统虚拟机更高效的资源利用
- 快速部署:秒级启动,快速扩缩容
- 环境一致性:开发、测试、生产环境一致
- 易于管理:简化应用部署和管理流程
应用场景
| 场景 | 描述 | 示例 |
|---|---|---|
| 应用容器化 | 将应用打包成容器镜像 | Web 应用、微服务 |
| 环境隔离 | 多应用环境隔离部署 | 开发测试环境 |
| 持续集成 | CI/CD 流水线构建 | Jenkins、GitLab CI |
| 服务编排 | 多容器应用管理 | Docker Compose、Kubernetes |
💡 提示: Docker 是现代 DevOps 和云原生应用的基础技术,掌握 Docker 对于容器化部署至关重要。
环境准备
系统要求
| 系统 | 最低版本 | 推荐版本 | 架构支持 |
|---|---|---|---|
| CentOS/RHEL | 7+ | 8+ | x86_64, arm64 |
| Ubuntu | 18.04+ | 20.04+ | x86_64, arm64 |
| Debian | 9+ | 11+ | x86_64, arm64 |
硬件要求
- CPU: 1 核心以上
- 内存: 2GB 以上(推荐 4GB)
- 存储: 20GB 以上可用空间
- 网络: 稳定的网络连接
前置检查
# 检查系统版本
cat /etc/os-release
# 检查内核版本(Docker 要求 3.10+)
uname -r
# 检查系统架构
uname -m
# 检查磁盘空间
df -h
# 检查内存
free -h
CentOS/RHEL 安装
1. 环境准备
更新系统
# 更新系统包
sudo yum update -y
# 安装必要的系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
卸载旧版本(如果存在)
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2. 添加 Docker 软件源
官方源(国外)
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
阿里云源(国内推荐)
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
清华大学源(备选)
sudo yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
3. 安装 Docker
安装最新版本
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
安装指定版本
# 查看可用版本
yum list docker-ce --showduplicates | sort -r
# 安装指定版本(例如 20.10.24)
sudo yum install -y docker-ce-20.10.24 docker-ce-cli-20.10.24 containerd.io
4. 启动和配置服务
# 启动 Docker 服务
sudo systemctl start docker
# 设置开机自启
sudo systemctl enable docker
# 检查服务状态
sudo systemctl status docker
# 验证安装
sudo docker --version
sudo docker run hello-world
5. 用户权限配置
# 创建 docker 用户组(通常已存在)
sudo groupadd docker
# 将当前用户添加到 docker 组
sudo usermod -aG docker $USER
# 重新登录或执行以下命令使权限生效
newgrp docker
# 验证非 root 用户可以运行 docker
docker run hello-world
Ubuntu/Debian 安装
1. 环境准备
更新软件包索引
sudo apt update
安装必要依赖
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
卸载旧版本
sudo apt remove docker docker-engine docker.io containerd runc
2. 添加 Docker 官方 GPG 密钥
官方源
# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 设置稳定版软件源
echo \
"deb [arch=$(dpkg --print-architecture) 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
阿里云源(国内推荐)
# 添加阿里云 GPG 密钥
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 设置阿里云软件源
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] http://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
3. 安装 Docker
# 更新软件包索引
sudo apt update
# 安装 Docker Engine
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 验证安装
sudo docker --version
sudo docker run hello-world
4. 启动和配置服务
# 启动 Docker 服务
sudo systemctl start docker
# 设置开机自启
sudo systemctl enable docker
# 检查服务状态
sudo systemctl status docker
5. 用户权限配置
# 将当前用户添加到 docker 组
sudo usermod -aG docker $USER
# 重新登录或执行以下命令
newgrp docker
# 验证权限
docker run hello-world
镜像加速配置
国内镜像源推荐
由于网络原因,建议配置国内镜像加速器以提高拉取速度:
1. 创建或编辑配置文件
sudo mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json
2. 配置镜像源
推荐配置(多源备份):
{
"registry-mirrors": [
"https://docker.1panel.live",
"https://docker-cf.registry.cyou",
"https://docker-0.unsee.tech",
"https://dockerhub.icu",
"https://docker.chenby.cn"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"storage-driver": "overlay2"
}
简化配置:
{
"registry-mirrors": [
"https://docker.1panel.live"
]
}
3. 重启 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker
4. 验证配置
# 检查镜像源配置
docker info | grep -A 10 "Registry Mirrors"
# 测试拉取镜像
docker pull nginx:alpine
常用镜像源列表
| 提供商 | 镜像源地址 | 稳定性 |
|---|---|---|
| 1Panel | https://docker.1panel.live | ⭐⭐⭐⭐⭐ |
| Docker CF | https://docker-cf.registry.cyou | ⭐⭐⭐⭐ |
| Unsee | https://docker-0.unsee.tech | ⭐⭐⭐⭐ |
| DockerHub ICU | https://dockerhub.icu | ⭐⭐⭐ |
| ChenBy | https://docker.chenby.cn | ⭐⭐⭐ |
⚠️ 注意: 镜像源可能会发生变化,建议配置多个备用源。
远程访问配置
Docker API 远程访问
方法1: 修改 systemd 服务文件
# 编辑 Docker 服务文件
sudo vim /etc/systemd/system/multi-user.target.wants/docker.service
# 修改 ExecStart 行,添加 TCP 监听
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock
# 重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
方法2: 使用 daemon.json 配置
{
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"],
"registry-mirrors": [
"https://docker.1panel.live"
]
}
安全的远程访问(TLS)
# 生成 CA 私钥
openssl genrsa -aes256 -out ca-key.pem 4096
# 生成 CA 证书
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
# 生成服务器私钥
openssl genrsa -out server-key.pem 4096
# 生成服务器证书签名请求
openssl req -subj "/CN=your-host" -sha256 -new -key server-key.pem -out server.csr
# 签名服务器证书
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -out server-cert.pem -CAcreateserial
# 启动 Docker 守护进程
dockerd \
--tlsverify \
--tlscacert=ca.pem \
--tlscert=server-cert.pem \
--tlskey=server-key.pem \
-H=0.0.0.0:2376
验证远程访问
# 测试远程连接(HTTP)
curl http://your-server-ip:2375/version
# 测试远程连接(HTTPS)
curl --cert client-cert.pem --key client-key.pem --cacert ca.pem https://your-server-ip:2376/version
Docker Compose 安装
CentOS/RHEL 安装
# 使用 yum 安装插件版本
sudo yum install -y docker-compose-plugin
# 验证安装
docker compose version
Ubuntu/Debian 安装
# 使用 apt 安装插件版本
sudo apt update
sudo apt install -y docker-compose-plugin
# 验证安装
docker compose version
手动安装(适用于所有系统)
# 下载最新版本
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 设置可执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 创建软链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 验证安装
docker-compose --version
安全配置
1. 用户权限管理
# 创建专用的 Docker 用户
sudo useradd -r -s /bin/false dockeruser
# 设置适当的文件权限
sudo chown root:docker /var/run/docker.sock
sudo chmod 660 /var/run/docker.sock
2. 限制容器权限
{
"userns-remap": "default",
"no-new-privileges": true,
"seccomp-profile": "/etc/docker/seccomp.json"
}
3. 网络安全
# 禁用不必要的网络功能
docker network ls
docker network rm unused_network
# 使用用户定义的网络
docker network create --driver bridge secure-network
4. 镜像安全
# 启用内容信任
export DOCKER_CONTENT_TRUST=1
# 扫描镜像漏洞
docker scan your-image:tag
性能优化
存储驱动优化
{
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
日志配置
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
资源限制
# 限制容器资源使用
docker run -d \
--memory="512m" \
--cpus="1.0" \
--restart=unless-stopped \
nginx:alpine
监控配置
{
"metrics-addr": "127.0.0.1:9323",
"experimental": true
}
常见问题
问题1:权限被拒绝
现象: permission denied while trying to connect to the Docker daemon socket
解决方案:
# 将用户添加到 docker 组
sudo usermod -aG docker $USER
newgrp docker
# 或使用 sudo
sudo docker ps
问题2:镜像拉取失败
现象: dial tcp: lookup registry-1.docker.io: no such host
解决方案:
# 配置镜像加速器
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://docker.1panel.live"]
}
EOF
sudo systemctl restart docker
问题3:磁盘空间不足
现象: no space left on device
解决方案:
# 清理未使用的资源
docker system prune -a
# 清理特定类型资源
docker image prune -a
docker container prune
docker volume prune
docker network prune
问题4:容器无法启动
现象: container exits immediately
解决方案:
# 查看容器日志
docker logs container-name
# 查看详细错误信息
docker inspect container-name
# 交互式调试
docker run -it --entrypoint /bin/bash image-name
问题5:端口冲突
现象: port is already allocated
解决方案:
# 查看端口占用
netstat -tlnp | grep :port
# 停止占用端口的容器
docker ps | grep :port
docker stop container-id
# 使用不同端口
docker run -p 8081:80 nginx
问题6:网络连接问题
现象: 容器间无法通信 解决方案:
# 检查网络配置
docker network ls
docker network inspect bridge
# 创建自定义网络
docker network create mynetwork
docker run --network mynetwork image-name
⚠️ 注意: 在生产环境中,建议启用 TLS 加密和适当的访问控制,确保 Docker 守护进程的安全。
相关文章
Docker 系列导航
- 下一篇: Docker 基本命令 - 常用 Docker 命令详解
Docker 基础系列
- Docker 基本命令 - 常用 Docker 命令详解
- Docker 环境部署 - 各种服务容器化部署
- Docker 最佳实践 - 生产环境使用建议
容器编排
- Kubernetes 单节点部署 - K8s 快速搭建
- Kubernetes 多节点部署 - 生产集群搭建
- Docker Compose 使用指南 - 多容器应用编排
中间件容器化
- Nacos 服务发现 - 微服务注册中心
- Kafka 消息队列 - 分布式消息系统
- Redis 缓存数据库 - 内存数据库
数据库容器化
- MySQL 数据库 - 关系型数据库
- MongoDB 文档数据库 - NoSQL 数据库
- Cassandra 分布式数据库 - 大数据存储
监控运维
- SkyWalking 链路追踪 - 应用性能监控
- ELK Stack 日志分析 - 日志收集分析
开发工具
- Git 版本控制 - 代码版本管理
- Jenkins CI/CD - 持续集成部署
总结
本指南详细介绍了 Docker 在不同 Linux 发行版上的安装和配置方法:
🎯 核心内容
- 多系统支持: CentOS/RHEL、Ubuntu/Debian 完整安装流程
- 镜像加速: 国内镜像源配置,提升下载速度
- 远程访问: HTTP 和 HTTPS 安全访问配置
- 安全强化: 用户权限、网络安全、镜像安全配置
🛠️ 安装流程
- 环境准备 → 系统更新和依赖安装
- 源配置 → 添加官方或镜像软件源
- 软件安装 → Docker Engine 和相关组件
- 服务配置 → 启动服务和权限设置
- 功能验证 → 测试基本功能
🔧 优化配置
- 镜像加速: 配置国内镜像源
- 存储优化: overlay2 存储驱动
- 日志管理: 合理的日志轮转配置
- 安全加固: TLS 加密和权限控制
💡 最佳实践:
- 生产环境建议使用 LTS 版本
- 配置多个镜像源以提高可用性
- 启用 TLS 加密保护远程访问
- 定期清理未使用的镜像和容器