1. 为什么选择手动解压安装Docker?
在Linux环境下安装Docker,大多数人会直接使用apt或yum等包管理器。但手动解压安装这种方式特别适合以下场景:
- 需要安装特定版本的Docker
- 服务器无法连接官方软件源
- 需要完全控制安装过程
- 内网环境或受限网络条件下
我最近在为某企业部署内部CI/CD系统时就遇到了这种情况——他们的生产服务器只能通过跳板机访问,无法直接使用包管理器。手动解压安装成了最可靠的选择。
2. 准备工作与环境检查
2.1 系统要求确认
在开始前,先确认你的Linux系统是否符合要求:
- 64位系统(运行
uname -m应显示x86_64) - 内核版本3.10或更高(运行
uname -r查看) - 至少2GB可用磁盘空间
- 能正常访问GitHub和Docker官网(或已下载好安装包)
注意:如果是在生产环境操作,建议先在测试环境验证整个过程。
2.2 必要工具安装
确保系统已安装以下基础工具:
bash复制sudo apt update && sudo apt install -y \
curl \
tar \
gzip \
libseccomp2
(如果是CentOS/RHEL系统,使用yum代替apt)
3. Docker二进制包手动安装
3.1 下载最新稳定版Docker
首先确定要安装的Docker版本。可以访问Docker GitHub Release页面查看最新稳定版。
bash复制DOCKER_VERSION=20.10.23
curl -fsSL https://download.docker.com/linux/static/stable/x86_64/docker-${DOCKER_VERSION}.tgz \
-o docker-${DOCKER_VERSION}.tgz
如果下载速度慢,可以尝试国内镜像源:
bash复制curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/docker-${DOCKER_VERSION}.tgz \
-o docker-${DOCKER_VERSION}.tgz
3.2 解压并安装二进制文件
解压下载的压缩包:
bash复制tar xzvf docker-${DOCKER_VERSION}.tgz
将二进制文件移动到系统PATH目录:
bash复制sudo cp docker/* /usr/bin/
验证安装是否成功:
bash复制docker --version
dockerd --version
3.3 配置systemd服务
创建systemd服务文件:
bash复制sudo tee /etc/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
启动并设置开机自启:
bash复制sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker
4. Docker Compose安装与配置
4.1 下载Docker Compose二进制文件
查看最新版本(截至2023年7月最新稳定版是2.17.2):
bash复制COMPOSE_VERSION=2.17.2
sudo curl -L "https://github.com/docker/compose/releases/download/v${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
国内用户可以使用:
bash复制sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/v${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
4.2 设置执行权限
bash复制sudo chmod +x /usr/local/bin/docker-compose
验证安装:
bash复制docker-compose --version
5. 安装后配置与优化
5.1 配置Docker守护进程
创建配置文件目录:
bash复制sudo mkdir -p /etc/docker
编辑daemon.json配置文件:
bash复制sudo tee /etc/docker/daemon.json <<-'EOF'
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"registry-mirrors": [
"https://registry-1.docker.io",
"https://mirror.ccs.tencentyun.com"
]
}
EOF
重启Docker使配置生效:
bash复制sudo systemctl restart docker
5.2 用户权限配置
将当前用户加入docker组,避免每次使用sudo:
bash复制sudo usermod -aG docker $USER
newgrp docker # 立即生效,无需重新登录
6. 验证安装结果
运行测试容器验证Docker是否正常工作:
bash复制docker run --rm hello-world
如果看到"Hello from Docker!"消息,说明安装成功。
检查Docker Compose:
bash复制docker-compose version
7. 常见问题排查
7.1 启动Docker服务失败
如果遇到Failed to start docker.service错误,可以:
- 检查日志:
bash复制
journalctl -xe -u docker - 常见原因:
- 内核版本过低
- 缺少依赖(如libseccomp)
- 端口冲突
7.2 权限问题
如果出现Got permission denied错误:
- 确认用户已加入docker组
- 尝试:
bash复制(临时解决方案,不建议生产环境使用)sudo chmod 666 /var/run/docker.sock
7.3 镜像拉取缓慢
可以修改/etc/docker/daemon.json添加国内镜像源:
json复制{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
8. 维护与升级
8.1 升级Docker版本
- 停止当前Docker服务:
bash复制sudo systemctl stop docker - 下载新版本二进制包
- 重复安装步骤
8.2 清理旧版本
卸载旧版本文件:
bash复制sudo rm -f /usr/bin/docker*
9. 安全加固建议
- 配置TLS加密:
bash复制mkdir -p ~/.docker sudo chown "$USER":"$USER" ~/.docker -R chmod g+rwx ~/.docker -R - 启用用户命名空间:
bash复制sudo tee -a /etc/docker/daemon.json <<-'EOF' { "userns-remap": "default" } EOF
10. 性能优化技巧
- 调整存储驱动:
bash复制sudo tee -a /etc/docker/daemon.json <<-'EOF' { "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] } EOF - 限制日志大小:
json复制{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } }
11. 实际使用心得
经过多次在生产环境部署,我总结了几个关键点:
- 下载二进制包时一定要校验SHA256,避免下载被篡改的包
- 在内网环境可以提前下载好安装包,通过scp传到目标服务器
- 对于长期运行的服务器,建议配置日志轮转和监控
- 测试环境的Docker版本最好与生产环境保持一致
手动安装虽然步骤稍多,但能让你更了解Docker的组成和工作原理。当遇到问题时,这种安装方式也更容易排查和修复。