Docker环境配置步骤(离线二进制方式)
一、关闭 SELinux(永久和临时)
步骤说明
bash
# 永久关闭(重启生效):修改配置文件
sed -i 's/enforcing/disabled/' /etc/selinux/config
# 临时关闭(立即生效):设置当前模式为Permissive
setenforce 0
验证
bash
sestatus # 临时关闭后显示 "Permissive",重启后显示 "Disabled"
二、关闭 Swap(永久和临时)
步骤说明
bash
# 临时关闭:立即释放Swap空间
swapoff -a
# 永久关闭(重启生效):注释fstab中所有Swap挂载项
sed -ri 's/.*swap.*/#&/' /etc/fstab
验证
bash
free -h # 确认Swap行值为0
cat /etc/fstab # 确认Swap行已被注释(以#开头)
三、安装 Docker(离线二进制方式)
前提
已获取Docker离线包(如 docker-27.1.2.tgz),包含核心组件(docker、dockerd、containerd、runc 等)。
步骤
1. 解压二进制包
bash
tar -zxvf docker-27.1.2.tgz
2. 复制核心文件到系统路径
bash
# 复制关键二进制文件到/usr/bin(确保PATH可访问)
cp docker/{docker,dockerd,containerd,containerd-shim,runc} /usr/bin/
3. 创建 systemd 服务文件
bash
cat > /etc/systemd/system/docker.service << EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock --default-ulimit nofile=65536:65536
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
四、启动 Docker 服务
bash
# 确保服务文件可执行
chmod +x /etc/systemd/system/docker.service
# 重新加载systemd配置并启动
systemctl daemon-reload
systemctl start docker
systemctl enable docker # 可选:设置开机自启
# 验证状态(确保Active: active (running))
systemctl status docker
五、安装 Docker Compose(二进制方式)
bash
# 假设离线文件为 docker-compose-linux-x86_64(需与系统架构匹配)
mv docker-compose-linux-x86_64 /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose
# 验证安装
docker-compose --version # 应输出版本号
六、配置 Docker Daemon(daemon.json)
步骤
1. 前置准备
bash
# 创建数据存储目录(若配置data-root)
mkdir -p /data/docker-data
# 创建用户命名空间映射用户(若启用userns-remap)
useradd -m lsrm # -m:自动创建家目录
2. 创建配置文件
bash
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"], # 镜像加速地址
"data-root": "/data/docker-data", # 数据存储路径
"userns-remap": "lsrm", # 用户命名空间映射(需提前创建lsrm用户)
"storage-driver": "overlay2", # 推荐存储驱动
"log-driver": "json-file",
"log-opts": {"max-size": "100m", "max-file": "3"}, # 日志轮转配置
"default-ulimits": {"nofile": {"Name": "nofile", "Hard": 65536, "Soft": 65536}} # 默认文件描述符限制
}
EOF
七、重启 Docker 并验证配置
bash
# 重启服务使配置生效
systemctl restart docker
# 验证关键配置(镜像加速、数据路径、存储驱动等)
docker info | grep -E "Registry Mirrors|Data Root|Storage Driver|User Namespace"
八、允许普通用户执行 Docker 命令(安全最佳实践)
推荐方法:添加用户到 docker 组
bash
# 1. 确保docker组存在(不存在则创建)
getent group docker || groupadd docker
# 2. 将用户(如lsrm)添加到docker组
usermod -aG docker lsrm
# 3. 刷新用户组(无需注销,临时生效)
newgrp docker
# 验证:普通用户执行docker命令
su - lsrm -c "docker ps" # 无权限错误则成功
风险提示:
- 禁止使用
chmod 666 /var/run/docker.sock(任何用户可执行Docker命令,等同于root权限,严重不安全)。docker组用户拥有类似root权限,需严格控制组内用户。
九、功能验证
bash
# 验证Docker基础功能
docker run --rm hello-world # 应输出"Hello from Docker!"
# 验证Docker Compose
docker-compose version # 应输出版本信息
总结
关键优化点:
- 提前创建
lsrm用户和/data/docker-data目录,避免启动失败。 - 明确复制Docker核心二进制文件(
containerd、runc等),确保依赖完整。 - 采用安全方式授权普通用户(添加到
docker组而非修改sock权限)。 - 验证每步配置,通过
docker info和测试容器确保功能正常。