Docker 学习篇(三)| Docker安装指南(Linux版)
- [1. 安装前准备](#1. 安装前准备)
- [2. 方式一:在线安装](#2. 方式一:在线安装)
-
- [2.1 卸载旧版本](#2.1 卸载旧版本)
- [2.2 安装依赖](#2.2 安装依赖)
- [2.3 配置 Docker 源(阿里云)](#2.3 配置 Docker 源(阿里云))
- [2.4 安装 Docker Engine](#2.4 安装 Docker Engine)
- [2.5 安装 Compose 插件](#2.5 安装 Compose 插件)
- [3. 方式二:离线安装](#3. 方式二:离线安装)
-
- [3.1 下载离线包](#3.1 下载离线包)
- [3.2 上传到服务器](#3.2 上传到服务器)
- [3.3 解压安装](#3.3 解压安装)
- [3.4 注册为系统服务](#3.4 注册为系统服务)
- [4. 启动 Docker](#4. 启动 Docker)
- [5. 验证](#5. 验证)
- [6. 配置镜像加速](#6. 配置镜像加速)
- [7. 防火墙](#7. 防火墙)
- [8. SELinux(CentOS 特有)](#8. SELinux(CentOS 特有))
- [9. 常用管理命令](#9. 常用管理命令)
- [10. 安装中可能遇到的问题](#10. 安装中可能遇到的问题)
1. 安装前准备
以 root 或 sudo 用户登录服务器,执行以下检查:
bash
# 1. 确认系统版本
cat /etc/redhat-release
# 应显示 CentOS Linux release 7.x 或 8.x
# 2. 确认网络(在线安装需要)
ping -c 2 mirrors.aliyun.com
# 收到回复说明网络通
# 3. 确认是 root 或有 sudo 权限
whoami
# 非 root 的话后面每条命令前加 sudo
# 4. 查看架构(离线安装需要)
uname -m
# 结果是 x86_64
如果前三步都过了,直接跳到第 2 节(在线安装)。如果服务器没网,跳到第 3 节(离线安装)。
2. 方式一:在线安装
2.1 卸载旧版本
如果之前装过 Docker,先清干净:
bash
yum remove -y \
docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce \
2>/dev/null
末尾 2>/dev/null 的意思是:没找到旧包也不报错,忽略即可。不用管输出。
2.2 安装依赖
bash
yum install -y yum-utils device-mapper-persistent-data lvm2 --skip-broken
yum-utils提供yum-config-manager,下一步配置仓库要它--skip-broken遇到有问题的包跳过,不卡住安装
2.3 配置 Docker 源(阿里云)
国内用阿里云源,不然下载极慢:
bash
# 添加仓库
yum-config-manager --add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 替换下载地址为阿里云
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' \
/etc/yum.repos.d/docker-ce.repo
# 更新缓存
yum makecache
第三步
yum makecache报黄色警告可以忽略,红色报错才要处理。
2.4 安装 Docker Engine
bash
yum install -y docker-ce
装完确认:
bash
docker -v
# 输出示例:Docker version 26.1.4, build 5650f9b
只要有版本号输出就是装好了。
2.5 安装 Compose 插件
bash
yum install -y docker-compose-plugin
确认:
bash
docker compose version
# 输出示例:Docker Compose version v2.27.1
如果提示找不到这个包,先装 EPEL 源:
yum install -y epel-release,然后重试。
3. 方式二:离线安装
3.1 下载离线包
找一台有网的电脑,打开 Docker 静态安装包,下载最新的 .tgz 文件。
3.2 上传到服务器
用 FinalShell、宝塔面板或 scp 把 .tgz 传到服务器。放哪里都行,下面以 /data/ 为例。
3.3 解压安装
bash
mkdir -p /data
cd /data/
# 版本号换成你实际下载的文件名
tar -xf docker-26.1.4.tgz
# 把所有 Docker 命令移到系统目录
mv docker/* /usr/bin/
确认:
bash
docker -v
# 能输出版本号就说明文件到位了
3.4 注册为系统服务
bash
cat > /usr/lib/systemd/system/docker.service << 'EOF'
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
离线安装不包含 Compose 插件。如需用
docker compose,去 GitHub Releases 下载docker-compose-linux-x86_64,放入/usr/libexec/docker/cli-plugins/目录并chmod +x。
4. 启动 Docker
不管在线还是离线安装,接下来操作都一样。
bash
# 启动
systemctl start docker
# 设置开机自启
systemctl enable docker
# 查看状态
systemctl status docker
看到 Active: active (running) 就是成功了。
5. 验证
bash
# 版本检查
docker -v
# 拉一个测试镜像
docker run hello-world
看到 Hello from Docker! 就说明 Docker 完全装好了。
离线安装注意: 离线环境下
docker run hello-world会因为拉不到镜像而失败,用docker -v确认版本即可。离线拉镜像的方式见第五篇命令速查的docker load -i。
bash
# 验证 Compose(在线安装才有)
docker compose version
# 删掉测试镜像
docker rmi hello-world
如果
docker run hello-world报permission denied:执行sudo usermod -aG docker $USER,然后退出终端重新登录(必须退出再登录,不退出不生效),再试。
6. 配置镜像加速
国内需要配镜像加速,否则拉镜像极慢。
bash
# 创建配置目录
mkdir -p /etc/docker
# 写入配置文件
cat > /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.m.daocloud.io"
],
"data-root": "/data/docker/lib",
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
EOF
# 重载并重启
systemctl daemon-reload
systemctl restart docker
配置说明:
| 字段 | 作用 |
|---|---|
registry-mirrors |
告诉 Docker 从这些镜像站拉,而不是直连 Docker Hub |
data-root |
镜像和数据存哪。系统盘满了换大磁盘路径 |
log-driver + log-opts |
每个容器日志最多 10MB、保留 3 个文件,防止日志撑爆磁盘 |
验证加速器:
bash
docker pull hello-world
# 速度明显快了就是生效了
docker rmi hello-world
不要加
docker.xuanyuan.me------在 Docker 26+ 上会报content size of zero错误。
7. 防火墙
bash
# 根据需要开放对外端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 重载
firewall-cmd --reload
# 确认
firewall-cmd --list-ports
容器之间的通信不需要手动开端口,Docker 自己管理 iptables。
8. SELinux(CentOS 特有)
SELinux 可能会阻止容器访问文件或网络。
检查状态:
bash
getenforce
如果显示 Enforcing,可以选择:
bash
# 临时关闭(重启后恢复)
setenforce 0
# 或永久关闭
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
个人服务器或开发环境可以直接关。生产环境如果不方便关,启动容器时加
--security-opt label=disable。
9. 常用管理命令
bash
systemctl start docker # 启动
systemctl stop docker # 停止
systemctl restart docker # 重启
systemctl enable docker # 开机自启
systemctl status docker # 查看状态
systemctl daemon-reload # 改完配置重载
10. 安装中可能遇到的问题
| 现象 | 原因 | 解决 |
|---|---|---|
yum install docker-ce 找不到包 |
阿里云源没配好 | 重做第 2.3 步,确认 yum repolist 里有 docker |
docker-compose-plugin 找不到 |
缺 EPEL 源 | yum install -y epel-release 后重试 |
docker run hello-world 卡住不动 |
镜像加速没配或没重启 | 重做第 6 步 |
permission denied while trying to connect |
当前用户不在 docker 组 | sudo usermod -aG docker $USER,退出重新登录 |
docker run hello-world 报网络错误 |
加速器配了但镜像源挂了 | 换成另一个镜像源试试 |
| 容器不能访问磁盘目录 | SELinux 挡住了 | 参考第 8 步 |
| 磁盘空间不足 | 镜像和数据占满了系统盘 | daemon.json 里 data-root 改到大磁盘路径 |