# redhat 9.7 安装docker，关闭selinux，及其他常规操作

在没有正版授权的情况下，无法直接使用 Red Hat 官方的软件仓库。不过，你可以通过配置第三方软件源来在线安装 Docker 等软件。

对于 Red Hat 系统，推荐使用 Docker 官方为 RHEL 提供的通用基础镜像（UBI）对应的软件仓库，这是合规且稳定的方式。

### 🚀 在线安装 Docker

你可以通过以下步骤，将 Docker 的官方仓库地址替换为国内的镜像源（以北京外国语大学镜像站为例），然后进行安装。

1. **移除旧版本**  
    如果你的系统上安装过旧版本的 Docker，建议先将其卸载。
    
    ```bash
    sudo dnf remove docker \
                    docker-client \
                    docker-client-latest \
                    docker-common \
                    docker-latest \
                    docker-latest-logrotate \
                    docker-logrotate \
                    docker-engine
    
    ```
2. **安装依赖并添加仓库**  
    首先安装必要的工具，然后添加 Docker 的官方仓库配置文件，并立即将其中的下载链接替换为国内镜像源地址。
    
    ```bash
    # 安装 dnf 插件
    sudo dnf -y install dnf-plugins-core
    
    # 添加 Docker 官方仓库
    sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
    # 将仓库地址替换为国内镜像源
    sudo sed -i 's+https://download.docker.com+https://mirrors.bfsu.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
    
    ```
3. **安装 Docker Engine**  
    完成以上配置后，就可以直接通过 `yum` 命令安装 Docker 了。
    
    ```bash
    sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    
    ```
4. **启动并验证**  
    安装完成后，启动 Docker 服务并检查其状态。
    
    ```bash
    # 启动 Docker 服务
    sudo systemctl start docker
    
    # 设置开机自启
    sudo systemctl enable docker
    
    # 验证安装是否成功
    sudo docker run hello-world
    
    ```

### 💡 补充说明

- **关于 CentOS Vault**：你可能会看到一些资料提到将 RHEL/CentOS 的源指向 `vault.centos.org`。这是因为 CentOS 7 已经停止维护（EOL），官方源已失效。但对于 RHEL 系统，更推荐上述使用 Docker 官方 UBI 源的方式，它更直接且专为 RHEL 设计。
- **其他镜像源**：如果上述镜像源访问不畅，你也可以尝试替换为其他国内镜像源，例如： 
    - 阿里云：`https://developer.aliyun.com/mirror/docker-ce`
    - 清华大学：`https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/`在 Red Hat Enterprise Linux 9.7 中，关闭 SELinux 的方式与旧版本（RHEL 8 及以前）有显著不同。
        
        **核心提示：** 在 RHEL 9 中，仅修改配置文件将 SELinux 设置为 `disabled` **并不能**从内核层面彻底禁用它，系统仍会加载 SELinux 模块但处于“无策略”状态，这可能会消耗系统资源或在某些极端情况下导致服务启动异常。
        
        要在 RHEL 9.7 中**彻底且正确**地关闭 SELinux，推荐使用**内核参数**方式。
        
        以下是两种方法的详细步骤：
        
        ### 🚀 方法一：内核参数禁用（RHEL 9 推荐，彻底生效）
        
        这是 RHEL 9 官方推荐的方式，能够确保 SELinux 在系统启动时完全不加载。
        
        
        1. **执行命令添加内核参数**  
            使用 `grubby` 工具向内核启动参数中添加 `selinux=0`。这会自动修改 GRUB 配置，无需手动编辑文件。
            
            ```bash
            sudo grubby --update-kernel ALL --args selinux=0
            
            ```
        2. **重启系统**  
            修改内核参数后，必须重启才能生效。
            
            ```bash
            sudo reboot
            
            ```
        3. **验证状态**  
            重启后，输入以下命令查看状态：
            
            ```bash
            getenforce
            
            ```
            
            
            - 如果输出 `Disabled`，说明 SELinux 已彻底关闭。
            - 你也可以通过查看内核命令行来确认参数是否生效： ```bash
                cat /proc/cmdline
                
                ```
                
                （输出中应包含 `selinux=0`）
        
        ---
        
        ### 📝 方法二：修改配置文件（传统方式，RHEL 9 中不彻底）
        
        如果你只是想让 SELinux 停止拦截操作（即切换到宽容模式），或者在无法使用 `grubby` 的特殊环境下，可以使用此方法。但在 RHEL 9 中，这不会像旧版本那样完全卸载 SELinux。
        
        
        1. **编辑配置文件**  
            打开 SELinux 的主配置文件：
            
            ```bash
            sudo vim /etc/selinux/config
            
            ```
        2. **修改参数**  
            找到 `SELINUX=enforcing` 这一行，将其修改为 `disabled`。
            
            ```ini
            # 修改前
            SELINUX=enforcing
            
            # 修改后
            SELINUX=disabled
            
            ```
            
            *(注：如果你不想彻底关闭，只是想让服务不报错，建议改为 `permissive`，这样既能记录日志又不会拦截操作。)*
        3. **保存并重启**  
            保存文件（在 vim 中按 `Esc`，输入 `:wq` 回车），然后重启系统。
            
            ```bash
            sudo reboot
            
            ```
        
        ---
        
        ### 🛑 临时关闭（无需重启）
        
        如果你正在排查故障，不想重启服务器，可以临时将 SELinux 切换为**宽容模式（Permissive）**。这不会彻底关闭它，但会停止拦截行为。
        
        ```bash
        # 临时切换为宽容模式（只记录日志，不拦截）
        sudo setenforce 0
        
        # 查看当前状态
        getenforce
        # 输出应为 Permissive
        
        ```
        
        *注意：`setenforce 0` 只是临时生效，重启后会恢复配置文件中的设置。*
        
        ### 📊 总结对比
        
        <table><thead><tr><th align="left">方式</th><th align="left">命令/操作</th><th align="left">适用场景</th><th align="left">RHEL 9 特性</th></tr></thead><tbody><tr><td align="left">**彻底禁用**</td><td align="left">`grubby --update-kernel ALL --args selinux=0`</td><td align="left">生产环境、彻底移除 SELinux 影响</td><td align="left">**推荐**，内核级完全禁用</td></tr><tr><td align="left">**配置禁用**</td><td align="left">修改 `/etc/selinux/config` 为 `disabled`</td><td align="left">一般测试</td><td align="left">**不推荐**，RHEL 9 中仅停止加载策略，仍占资源</td></tr><tr><td align="left">**临时宽容**</td><td align="left">`setenforce 0`</td><td align="left">故障排查、调试</td><td align="left">立即生效，重启失效</td></tr></tbody></table>
        
        **回滚方法：**  
        如果你想重新开启 SELinux，只需执行以下命令移除参数并重启：
        
        ```bash
        sudo grubby --update-kernel ALL --remove-args selinux
        sudo reboot
        
        ```
    -