Linux怎么安装Docker?环境怎么搭建?步骤是什么?如何配置?有哪些注意事项?出现问题怎么排除?

一、Docker简介与环境准备

1.1 什么是Docker

Docker是一个开源的容器化平台,它使用Linux内核的cgroup,namespace以及OverlayFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。Docker能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员以便他们专注在真正重要的事情上:构建杰出的软件。

Docker的核心概念:

  • 镜像(Image):Docker镜像是用于创建Docker容器的模板
  • 容器(Container):镜像运行时的实体,可以被创建、启动、停止、删除和暂停等
  • 仓库(Repository):集中存放镜像文件的场所

Linux中Docker的优势:

  • 轻量级虚拟化,资源利用率高
  • 快速部署和扩缩容
  • 环境一致性,解决"在我机器上能跑"的问题
  • 便于DevOps实践和微服务架构

1.2 系统环境要求

支持的Linux发行版:

  • Ubuntu 18.04 LTS及以上版本
  • CentOS 7/8/Stream
  • RHEL 7/8/9
  • Debian 9及以上版本
  • Fedora 32及以上版本

内核版本要求:

  • 最低内核版本:3.10
  • 推荐内核版本:4.0及以上
  • 必须启用cgroups和namespace功能

硬件资源要求:

  • 最小内存:512MB(推荐2GB以上)
  • 磁盘空间:至少10GB可用空间
  • CPU架构:x86_64或ARM64

1.3 安装前的系统检查

检查系统版本和内核:

bash 复制代码
# 查看系统版本
cat /etc/os-release
lsb_release -a

# 查看内核版本
uname -r

# 检查内核是否支持Docker
docker version

卸载旧版本Docker:

bash 复制代码
# Ubuntu/Debian系统
sudo apt-get remove docker docker-engine docker.io containerd runc

# CentOS/RHEL系统
sudo yum remove docker docker-client docker-client-latest docker-common \
    docker-latest docker-latest-logrotate docker-logrotate docker-engine

二、Docker安装步骤详解

2.1 Ubuntu/Debian系统安装

方法一:官方仓库安装(推荐)

bash 复制代码
# 1. 更新包索引
sudo apt-get update

# 2. 安装必要的依赖包
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# 3. 添加Docker官方GPG密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 4. 设置稳定版仓库
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 5. 更新包索引
sudo apt-get update

# 6. 安装Docker Engine
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

方法二:脚本一键安装

bash 复制代码
# 下载并执行官方安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 国内用户可使用阿里云脚本
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

2.2 CentOS/RHEL系统安装

yum仓库安装:

bash 复制代码
# 1. 安装yum-utils包
sudo yum install -y yum-utils

# 2. 设置稳定版仓库
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

# 3. 安装Docker Engine
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 4. 启动Docker
sudo systemctl start docker
sudo systemctl enable docker

CentOS 8/Stream使用dnf:

bash 复制代码
# 安装dnf-plugins-core包
sudo dnf install dnf-plugins-core

# 添加Docker仓库
sudo dnf config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

# 安装Docker
sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin

2.3 其他Linux发行版安装

Fedora系统:

bash 复制代码
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager \
    --add-repo \
    https://download.docker.com/linux/fedora/docker-ce.repo
sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Arch Linux系统:

bash 复制代码
sudo pacman -S docker
sudo systemctl start docker.service
sudo systemctl enable docker.service

三、Docker服务配置与启动

3.1 Docker守护进程配置

systemd服务配置:

bash 复制代码
# 启动Docker服务
sudo systemctl start docker

# 设置开机自启动
sudo systemctl enable docker

# 查看服务状态
sudo systemctl status docker

# 重启服务
sudo systemctl restart docker

daemon.json配置文件:

创建或编辑/etc/docker/daemon.json文件:

json 复制代码
{
  "data-root": "/var/lib/docker",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.docker-cn.com"
  ],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "storage-driver": "overlay2"
}

3.2 用户权限配置

将用户加入docker组:

bash 复制代码
# 创建docker组(通常安装时会自动创建)
sudo groupadd docker

# 将当前用户加入docker组
sudo usermod -aG docker $USER

# 注销后重新登录,或使用以下命令刷新组成员身份
newgrp docker

# 测试无sudo运行docker命令
docker run hello-world

3.3 镜像源配置

国内镜像加速器配置:

常用的镜像加速器:

配置方法:

bash 复制代码
# 创建或修改daemon.json
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ]
}
EOF

# 重启Docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker

四、Docker环境验证与测试

4.1 安装验证

版本检查命令:

bash 复制代码
# 查看Docker版本
docker --version
docker version

# 查看详细信息
docker info

# 查看系统信息
docker system info

Hello World容器测试:

bash 复制代码
# 运行测试容器
docker run hello-world

# 查看运行中的容器
docker ps

# 查看所有容器(包括已停止的)
docker ps -a

# 查看镜像列表
docker images

4.2 网络配置验证

网桥配置检查:

bash 复制代码
# 查看Docker网络
docker network ls

# 查看默认bridge网络详情
docker network inspect bridge

# 查看系统网络接口
ip addr show docker0

端口映射测试:

bash 复制代码
# 运行nginx容器并映射端口
docker run -d -p 8080:80 --name test-nginx nginx

# 测试端口连通性
curl http://localhost:8080

# 停止并删除测试容器
docker stop test-nginx
docker rm test-nginx

五、重要注意事项

5.1 安全注意事项

Docker守护进程安全配置:

  • 不要在生产环境中将Docker守护进程暴露在公网
  • 使用TLS加密Docker守护进程通信
  • 定期更新Docker版本以获取安全补丁
bash 复制代码
# 配置TLS加密
sudo dockerd \
    --tlsverify \
    --tlscacert=ca.pem \
    --tlscert=server-cert.pem \
    --tlskey=server-key.pem \
    -H=0.0.0.0:2376

容器运行安全:

  • 避免以root用户运行容器
  • 使用最小权限原则
  • 定期扫描镜像漏洞

5.2 性能优化注意事项

存储驱动选择:

  • 推荐使用overlay2存储驱动
  • 确保文件系统支持(ext4、xfs等)

资源限制配置:

bash 复制代码
# 限制容器内存使用
docker run -m 512m nginx

# 限制CPU使用
docker run --cpus="1.5" nginx

# 设置存储限制
docker run --storage-opt size=10G nginx

5.3 生产环境注意事项

日志轮转配置:

json 复制代码
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

监控配置:

  • 配置容器资源监控
  • 设置日志收集
  • 建立告警机制

六、常见问题排除

6.1 安装过程问题

问题1:依赖包冲突

bash 复制代码
# 错误信息
Package docker-ce conflicts with docker

# 解决方案
sudo yum remove docker
sudo yum install docker-ce

问题2:权限不足问题

bash 复制代码
# 错误信息
Got permission denied while trying to connect to the Docker daemon socket

# 解决方案
sudo usermod -aG docker $USER
newgrp docker

问题3:网络连接问题

bash 复制代码
# 错误信息
Could not connect to download.docker.com

# 解决方案:使用国内源
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

6.2 运行时问题

问题1:容器启动失败

bash 复制代码
# 查看容器日志
docker logs <container_id>

# 查看详细错误信息
docker events --filter container=<container_name>

# 检查容器配置
docker inspect <container_id>

问题2:端口占用问题

bash 复制代码
# 查看端口占用
sudo netstat -tulpn | grep <port>
sudo ss -tulpn | grep <port>

# 查找并停止占用端口的进程
sudo fuser -k <port>/tcp

问题3:存储空间问题

bash 复制代码
# 查看Docker磁盘使用情况
docker system df

# 清理无用数据
docker system prune -a

# 清理无用卷
docker volume prune

# 清理无用网络
docker network prune

6.3 性能问题排查

容器资源占用过高:

bash 复制代码
# 查看容器资源使用情况
docker stats

# 查看详细资源使用
docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"

# 限制容器资源
docker update --memory 512m --cpus 1 <container_id>

网络延迟问题:

bash 复制代码
# 检查DNS设置
docker run --rm busybox nslookup google.com

# 测试网络连通性
docker run --rm busybox ping -c 4 8.8.8.8

# 检查Docker网络配置
docker network inspect bridge

七、最佳实践与运维建议

7.1 Docker运维最佳实践

镜像管理策略:

  • 使用官方镜像作为基础镜像
  • 定期更新和清理无用镜像
  • 使用多阶段构建减小镜像大小
dockerfile 复制代码
# 多阶段构建示例
FROM node:16 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install

FROM node:16-alpine
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

容器生命周期管理:

bash 复制代码
# 健康检查配置
docker run -d \
  --health-cmd="curl -f http://localhost/ || exit 1" \
  --health-interval=30s \
  --health-timeout=10s \
  --health-retries=3 \
  nginx

# 自动重启策略
docker run -d --restart=unless-stopped nginx

7.2 故障排查工具与方法

日志分析工具:

bash 复制代码
# 实时查看日志
docker logs -f <container_name>

# 查看最近的日志
docker logs --tail 100 <container_name>

# 查看指定时间的日志
docker logs --since 2023-01-01T00:00:00 <container_name>

性能监控工具:

bash 复制代码
# 安装docker-compose用于监控栈
sudo apt install docker-compose

# 使用ctop监控容器
docker run --rm -ti \
  --name=ctop \
  --volume /var/run/docker.sock:/var/run/docker.sock:ro \
  quay.io/vektorlab/ctop:latest

调试命令集合:

bash 复制代码
# 进入运行中的容器
docker exec -it <container_name> /bin/bash

# 查看容器进程
docker top <container_name>

# 检查容器文件系统变化
docker diff <container_name>

# 导出容器文件系统
docker export <container_name> > container.tar

# 查看镜像构建历史
docker history <image_name>

总结:

Docker在Linux系统中的安装和配置是一个系统性工程,需要考虑系统环境、安全性、性能优化等多个方面。通过本文的详细介绍,相信大家能够成功安装和配置Docker环境,并具备基本的故障排查能力。

在实际生产环境中,建议:

  1. 定期备份重要数据
  2. 建立完善的监控体系
  3. 制定应急预案
  4. 保持Docker版本更新
  5. 关注安全漏洞和补丁

希望这篇文章能够帮助大家更好地使用Docker技术,提升开发和运维效率。