全部笔记All notes

Docker 容器引擎安装配置完整指南

阅读 9m 30s9m 30s read

概述

Docker 是一个开源的容器化平台,它使用 Linux 内核的资源隔离功能来创建独立的容器。Docker 通过容器来打包、分发和运行应用程序,实现了应用与环境的分离。

核心特性

  • 轻量级虚拟化:比传统虚拟机更高效的资源利用
  • 快速部署:秒级启动,快速扩缩容
  • 环境一致性:开发、测试、生产环境一致
  • 易于管理:简化应用部署和管理流程

应用场景

场景描述示例
应用容器化将应用打包成容器镜像Web 应用、微服务
环境隔离多应用环境隔离部署开发测试环境
持续集成CI/CD 流水线构建Jenkins、GitLab CI
服务编排多容器应用管理Docker Compose、Kubernetes

💡 提示: Docker 是现代 DevOps 和云原生应用的基础技术,掌握 Docker 对于容器化部署至关重要。

环境准备

系统要求

系统最低版本推荐版本架构支持
CentOS/RHEL7+8+x86_64, arm64
Ubuntu18.04+20.04+x86_64, arm64
Debian9+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

常用镜像源列表

提供商镜像源地址稳定性
1Panelhttps://docker.1panel.live⭐⭐⭐⭐⭐
Docker CFhttps://docker-cf.registry.cyou⭐⭐⭐⭐
Unseehttps://docker-0.unsee.tech⭐⭐⭐⭐
DockerHub ICUhttps://dockerhub.icu⭐⭐⭐
ChenByhttps://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 基础系列

容器编排

  • Kubernetes 单节点部署 - K8s 快速搭建
  • Kubernetes 多节点部署 - 生产集群搭建
  • Docker Compose 使用指南 - 多容器应用编排

中间件容器化

数据库容器化

监控运维

开发工具

  • Git 版本控制 - 代码版本管理
  • Jenkins CI/CD - 持续集成部署

总结

本指南详细介绍了 Docker 在不同 Linux 发行版上的安装和配置方法:

🎯 核心内容

  • 多系统支持: CentOS/RHEL、Ubuntu/Debian 完整安装流程
  • 镜像加速: 国内镜像源配置,提升下载速度
  • 远程访问: HTTP 和 HTTPS 安全访问配置
  • 安全强化: 用户权限、网络安全、镜像安全配置

🛠️ 安装流程

  1. 环境准备 → 系统更新和依赖安装
  2. 源配置 → 添加官方或镜像软件源
  3. 软件安装 → Docker Engine 和相关组件
  4. 服务配置 → 启动服务和权限设置
  5. 功能验证 → 测试基本功能

🔧 优化配置

  • 镜像加速: 配置国内镜像源
  • 存储优化: overlay2 存储驱动
  • 日志管理: 合理的日志轮转配置
  • 安全加固: TLS 加密和权限控制

💡 最佳实践:

  • 生产环境建议使用 LTS 版本
  • 配置多个镜像源以提高可用性
  • 启用 TLS 加密保护远程访问
  • 定期清理未使用的镜像和容器