首页 > 系统相关 >CentOS7 解决宝塔面板安装 Docker 和 Docker-compose 的问题

CentOS7 解决宝塔面板安装 Docker 和 Docker-compose 的问题

时间:2024-03-07 09:45:21浏览次数:27  
标签:bin compose CentOS7 usr Docker 安装 docker

在宝塔面板的软件商店安装 Docker 管理器时提示需手动安装 Docker,再在面板中开启 Docker 插件进行可视化管理

但是我手动安装 Docker 后依旧提示当前未安装 Docker 或 Docker-compose,即宝塔面板的 Docker 管理插件仍无法识别到这些安装,在此记录下我的解决过程,如有错误,欢迎指正!

1. 问题描述

1.1 报错信息

1.2 原因分析

参考这篇文章,我找到了宝塔面板检测Docker安装状态的内部逻辑:https://blog.csdn.net/u014126725/article/details/133946944

  • 找到检测逻辑的代码:在宝塔面板的侧边栏点击 文件 选项卡,进入 /www/server/panel/class/projectModel/bt_docker 目录下,双击查看 dk_setup.py 文件,找到函数 check_docker_program

  • 分析代码
    • 定义 docker 和 docker-compose 的检查路径"/usr/bin/docker""/usr/bin/docker-compose"
    • 检查 docker-compose 的备选路径:如果在/usr/bin/docker-compose路径下找不到docker-compose,代码将在两个备选路径"/usr/libexec/docker/cli-plugins/docker-compose""/usr/local/docker-compose"中搜索docker-compose
    • 为找到的 docker-compose 创建符号链接:如果在备选路径中找到了docker-compose,使用命令为它创建一个符号链接到/usr/bin/docker-compose。这一步骤确保即使docker-compose安装在不同的路径,也能被系统识别为在/usr/bin/docker-compose
    • 最终的检查逻辑:检查/usr/bin/docker/usr/bin/docker-compose是否都存在。如果任一文件不存在,函数返回False,表明dockerdocker-compose未完全安装。只有当两者都存在时,才返回True
def check_docker_program(self):
        """
        检查docker和docker-compose是否已经安装
        :return:
        """
        # 定义docker和docker-compose的检查路径
        docker = "/usr/bin/docker"
        docker_compose = "/usr/bin/docker-compose"
        
        if not os.path.exists(docker_compose):
            dk_compose_list = ["/usr/libexec/docker/cli-plugins/docker-compose", "/usr/local/docker-compose"]
            for i in dk_compose_list:
                if os.path.exists(i):
                    public.ExecShell("ln -sf {} {}".format(i, docker_compose))
        if not os.path.exists(docker) or not os.path.exists(docker_compose):
            return False
        return True
  • 需要符合的条件:为了使这段代码返回 True,即判断dockerdocker-compose都已安装,我们需要保证
    • /usr/bin/docker存在,表示docker已安装
    • /usr/bin/docker-compose 存在,无论是直接安装在这个路径,还是通过在备选路径找到后创建的符号链接

2. 解决步骤

2.1 安装 Docker

以下操作均在 root 权限下进行,参考:https://cloud.tencent.com/developer/article/1701451

# 确认是否已安装 docker
docker --version  
yum -y update  # 更新yum包

# 卸载旧版本(如果之前安装过的话)
yum remove docker  docker-common docker-selinux docker-engine  

# 安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2  

# 设置 yum 源
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo  # 中央仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  # 阿里仓库

# 选择docker版本并安装
yum list docker-ce --showduplicates | sort -r  # 查看可用版本
yum -y install docker-ce-18.03.1.ce  # 安装

# 启动 Docker 并设置开机自启
systemctl start docker
systemctl enable docker

2.2 安装 Docker-compose 并创建符号链接

  • 安装 docker-compose

    • 直接 curl 速度太慢了:curl -L https://github.com/docker/compose/releases/download/v2.24.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
    • 我这里直接在官网上选择版本下载 docker-compose-Linux-x86_64 到本地:https://github.com/docker/compose/releases

    • 然后在本地更名为 docker-compose,并上传到云服务器的 /usr/local/bin 目录下后,添加执行权限
    chmod +x /usr/local/bin/docker-compose
    
  • 链接到 /usr/bin/目录下

ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose
  • 验证
docker-compose -v # 查看版本
ls -l /usr/bin/docker-compose  # 查看链接是否成功

2.3 宝塔面板菜单栏显示 Docker

  • 在宝塔面板的侧边栏点击 面板设置, 找到 面板菜单栏隐藏 的设置,将 Docker 打开

  • 成功:

3. 总结

  • Docker

docker 是容器,可以将项目的环境(比如 java、nginx)和项目的代码一起打包成镜像,所有人都能下载镜像,更容易分发和移植。再启动项目时,不需要敲一大堆命令,而是直接下载镜像、启动镜像就可以了。docker 可以理解为软件安装包

  • Docker Compose

Docker Compose 简化了Docker容器的管理过程,通过Compose,用户可以使用YAML文件来配置应用服务,然后只需一个简单的命令,就可以创建并启动所有服务。这对于开发环境的快速配置、测试和部署来说非常方便,特别是在涉及多个相互依赖容器的复杂应用中。

标签:bin,compose,CentOS7,usr,Docker,安装,docker
From: https://www.cnblogs.com/thr-0103/p/18058197

相关文章

  • docker镜像
    1.base镜像base镜像有两层含义:(1)不依赖其他镜像,从scratch构建(2)其他镜像可以以之为基础进行扩展。所以,能称作base镜像的通常都是各种Linux发行版的Docker镜像,比如Ubuntu、Debian、CentOS等。dockerpullubuntuUbuntu镜像只有78M左右,下边解释为什么会这么......
  • Docker使用Dockerfile文件(五)
    前言Dockerfile是一个文本文件,其中包含了创建Docker镜像所需的所有指令。这意味着任何人都可以通过运行dockerbuild命令并使用相同的Dockerfile来创建完全相同的镜像。这确保了镜像创建的可重复性,使得在不同的环境中部署应用程序变得更加容易。Dockerfile提供了丰......
  • CentOS7.9升级OpenSSH到9.6p1
    mkdir/softwarecd/softwarewgethttps://www.openssl.org/source/old/1.1.1/openssl-1.1.1w.tar.gzwget--no-check-certificatehttps://www.openssl.org/source/old/1.1.1/openssl-1.1.1w.tar.gzyuminstall-ygccgcc-c++glibcmakeautomakeautoconfzlibzlib-d......
  • 【Docker】Docker安装MongoDB最新版并连接使用附加docker常用命令
    【Docker】Docker安装MongoDB最新版并连接使用附加docker常用命令前言确保centos7已经安装docker,没安装docker的可以百度自行安装一、docker安装mongodb步骤1、docker拉取mongo镜像dockerpullmongo:latest2、查看本地镜像命令#查看镜像命令dockerimages#查看正在运......
  • 本地快速搭建airflow docker镜像,映射本地路径
    airflow官方文档拉取镜像dockerpullapache/airflow:2.8.2拉取配置文件curl-LfO'https://airflow.apache.org/docs/apache-airflow/2.8.2/docker-compose.yaml'修改刚刚拉取的yaml文件关闭示例dagAIRFLOW__CORE__LOAD_EXAMPLES:'false'映射本地路径volumes:......
  • 在Docker中,stage和step有什么区别?
    在Docker的上下文中,特别是在Dockerfile构建和CI/CD流程中,“stage”和“step”这两个术语具有不同的含义:Stage(阶段):在Dockerfile中,stage(也称为构建阶段或构建阶段目标)是一种构建策略,允许开发者将Docker镜像构建过程分割成多个逻辑部分或阶段。每个阶段定义了一个新的构建环境,可......
  • 在Docker中,Docker和虚拟机有什么不同?
    在Docker中,与传统虚拟机(VirtualMachines,VMs)相比,Docker采用的是操作系统层面的轻量级虚拟化技术,主要体现在以下几个方面的不同:架构和资源使用:虚拟机:运行在hypervisor之上,每个虚拟机都包含一个完整的操作系统副本(内核+用户空间),占用较多的系统资源,如CPU、内存、磁盘空间等。......
  • 在Docker中,Docker容器有几种状态?
    在Docker中,容器可以从一种状态转换到另一种状态,以下是Docker容器可能出现的主要状态:created(已创建):当您使用dockercreate命令创建一个容器但尚未启动它时,容器处于此状态。容器的文件系统结构和配置已经准备完毕,但是还没有开始运行任何进程。restarting(重启中):此状态表明......
  • docker概述
    1.Docker组件Docker客户端:ClientDocker服务器:DockerdaemonDocker镜像:ImageRegistryDocker容器:ContainerDocker采用的是Client/Server架构。客户端向服务器发送请求,服务器负责构建、运行和分发容器。客户端和服务器可以运行在同一个Host上,客户端也可以通......
  • 在Docker中,Docker可以用来做什么?
    Docker作为一种开源的应用容器引擎,主要用于解决应用软件开发、分发和部署过程中面临的环境一致性、可移植性和资源高效利用等问题。以下是一些Docker的主要用途:标准化和隔离应用环境:Docker通过容器技术为每个应用程序及其依赖提供一个独立的、可移植的运行环境。每个容器就像......