标签: Docker

  • Docker 环境清理命令详解

    常用的 Docker 环境清理命令,包括删除停止容器、悬挂镜像、未使用卷和网络的操作,帮助用户释放系统磁盘空间。通过使用这些命令,用户可以有效地管理 Docker 资源,避免积累不必要的文件和镜像。

    1. 删除所有停止的容器:

    docker rm $(docker ps -aq -f status=exited)

    解释:

    • docker ps -aq -f status=exited:这个命令列出所有已经停止的容器(状态为 exited),-a 表示显示所有容器,-q 表示只返回容器的 ID,-f status=exited 是通过过滤器指定只列出已经停止的容器。
    • docker rm:这个命令用来删除指定的容器。通过 $(docker ps -aq -f status=exited),它将所有已经停止的容器 ID 传递给 docker rm,从而删除所有停止的容器。

    2. 删除所有悬挂的镜像(dangling images):

    docker rmi $(docker images -q -f dangling=true)

    解释:

    • docker images -q -f dangling=true:这个命令列出所有悬挂镜像的 ID。悬挂镜像是那些没有被任何容器使用的镜像,通常是构建过程中中间层生成的镜像。-q 用来只返回镜像的 ID,-f dangling=true 是通过过滤器指定只列出那些悬挂镜像。
    • docker rmi:这个命令用来删除指定的镜像。通过 $(docker images -q -f dangling=true),它会删除所有悬挂镜像。

    3. 删除所有未使用的卷:

    docker volume prune -f

    解释:

    • docker volume prune:这个命令删除所有没有被任何容器使用的卷。Docker 卷用于存储数据,卷被删除后,任何容器无法再访问这些数据。
    • -f:这是一个强制选项,它让 Docker 在执行删除操作时不需要确认。这样会直接删除所有未使用的卷。

    4. 删除所有未使用的网络:

    docker network prune -f

    解释:

    • docker network prune:这个命令删除所有没有被任何容器使用的网络。Docker 网络是容器之间的通信基础,当网络没有容器使用时,它就成了未使用的资源。
    • -f:这是一个强制选项,确保 Docker 执行删除操作时不需要任何确认。

    5. 清理所有未使用的资源(镜像、容器、卷、网络):

    docker system prune -af

    解释:

    • docker system prune:这个命令用于清理所有未使用的 Docker 资源,包括容器、镜像、卷和网络。它会删除所有没有被使用的资源,从而释放磁盘空间。
    • -a:这是一个选项,表示删除所有未使用的镜像,不仅仅是悬挂镜像。如果没有这个选项,默认只会删除悬挂的镜像。
    • -f:这个选项强制执行删除操作,无需确认。在生产环境中使用时要小心,确保不会误删重要资源。

    注意事项:

    这些命令会永久删除数据,因此请在使用之前务必确认没有误删除重要资源。如果你在生产环境中使用这些命令,建议先做备份,或者使用命令前检查当前容器、镜像和卷的状态,确保删除的内容是无用的。

  • Docker安装Stirling-PDF

    Stirling-PDF 是一款基于 Docker 容器的开源 PDF 处理工具,专为OCR设计,能够将扫描的 PDF 文件中的图像或文字转换为可编辑的文本。通过集成 Tesseract OCR 引擎,Stirling-PDF 使得用户能够轻松提取 PDF 文件中的文字,无论是扫描文档、图像还是其他类型的图文混合内容。

    该工具提供了一个简洁的 Web 界面,用户可以上传 PDF 文件进行批量处理、OCR 识别和文本提取。它支持多语言识别,适用于不同语言的 OCR 数据包,能够帮助用户处理多种语言的文档。

    1. 创建 stirling-pdf 目录并进入

    首先,我们需要在你的服务器上创建一个新的目录来存放相关文件,并进入该目录。

    mkdir stirling-pdf && cd stirling-pdf

    2. 下载 Tesseract OCR 库

    Stirling-PDF 使用 Tesseract OCR 库进行文字识别。因此,我们需要下载其相关的语言数据。

    git clone https://github.com/tesseract-ocr/tessdata.git

    3. 创建 docker-compose.yml 文件

    创建 docker-compose.yml 文件,以便使用 Docker Compose 部署 Stirling-PDF 服务。

    stirling-pdf 目录下,创建并编辑 docker-compose.yml 文件:

    services:
      stirling-pdf:
        restart: always
        image: frooodle/s-pdf:latest
        ports:
          - '8080:8080'  # 映射容器内的 8080 端口到宿主机的 8080 端口
        volumes:
          - ./tessdata:/usr/share/tessdata
          - ./extraConfigs:/configs
          - ./customFiles:/customFiles/
          - ./logs:/logs/
        environment:
          - DOCKER_ENABLE_SECURITY=false
          - INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false
          - LANGS=en_GB

    4. 启动 Stirling-PDF

    创建完 docker-compose.yml 文件后,可以使用以下命令启动 Stirling-PDF 服务:

    docker compose up -d

    该命令会自动下载所需的 Docker 镜像并启动容器。启动完成后,Stirling-PDF 服务将开始运行。

    5. 使用浏览器访问 Stirling-PDF

    启动成功后,你可以在浏览器中通过以下地址访问 Stirling-PDF:

    http://<IP>:8080
    • 替换 <IP> 为你的服务器的 IP 地址,你就可以在浏览器中访问并使用 Stirling-PDF 进行 PDF 文件的处理了。
  • 使用 SSH 端口转发访问 Docker Hub 拉取镜像

    1. 原理解析

    SSH 端口转发(Port Forwarding)是一种将本地端口流量通过 SSH 连接重定向到远程服务器的方式。在本方案中,我们将本地端口映射到 Docker Hub 服务器(registry-1.docker.io),让本地 Docker 以为它正在直接访问 Docker Hub。

    示意图:

    [本地 Docker 客户端] → [SSH 隧道] → [远程服务器] → [Docker Hub]

    这样,本地 Docker 发送的请求会通过 SSH 隧道访问 Docker Hub 并返回数据。


    2. 使用条件

    • 一台可访问 Docker Hub 的服务器
    • 服务器上安装了 SSH
    • 本地设备(Windows/Linux/macOS)可通过 SSH 连接到服务器

    3. 配置 SSH 端口转发

    3.1 在本地终端运行 SSH 端口转发

    ssh -N -L 5000:registry-1.docker.io:443 user@your-server-ip
    • -N:不执行远程命令,仅进行端口转发
    • -L 5000:registry-1.docker.io:443:将本地 5000 端口映射到远程 registry-1.docker.io443 端口
    • user@your-server-ip:远程服务器的 SSH 账户

    保持这个 SSH 连接不关闭,否则端口转发会失效。


    4. 配置 Docker 访问代理

    4.1 在 daemon.json 中修改 Docker 配置

    编辑 Docker 的配置文件:

    nano /etc/docker/daemon.json

    添加以下内容:

    {
      "proxies": {
        "default": "http://127.0.0.1:5000"
      }
    }

    保存后,重启 Docker

    systemctl restart docker

    5. 测试 Docker 是否可以正常拉取

    执行拉取测试:

    docker pull ubuntu

    如果拉取成功,说明 SSH 端口转发生效。

  • Debian12 安装Dify大语言模型(LLM) 应用开发平台

    Dify 是一款开源的大语言模型(LLM)应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。

    Dify 内置了构建 LLM 应用所需的关键技术栈,包括对数百个模型的支持、直观的 Prompt 编排界面、高质量的 RAG 引擎、稳健的 Agent 框架、灵活的流程编排,并同时提供了一套易用的界面和 API。这为开发者节省了许多重复造轮子的时间,使其可以专注在创新和业务需求上。

    1. 安装 Docker 和 Docker Compose

    在服务器上运行以下命令安装 Docker:

    curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh

    2. 安装 Dify

    2.1 克隆 Dify 源代码至本地环境

    git clone https://github.com/langgenius/dify.git --branch 1.0.1

    2.2 启动 Dify

    进入 Dify 源代码的 Docker 目录,并执行以下步骤:

    # 进入 Dify 源代码的 Docker 目录
    cd dify/docker
    
    # 复制环境配置文件
    cp .env.example .env
    
    # 启动 Docker 容器
    docker compose up -d
    
    # 最后检查是否所有容器都正常运行
    docker compose ps

    2.3 访问 Dify 进行安装

    在浏览器中访问以下地址,完成安装流程:

    http://your_server_ip/install

    3. 在 Dify 中接入模型

    在 Dify 控制面板中,进入 设置 > 模型供应商,然后点击 接入模型
    按照界面指引,输入模型供应商相关 API 信息,并完成模型的接入配置。

  • Debian12安装Umami 网站分析工具

    Umami是一款轻量级、开源的 网站分析工具,可用于 隐私友好型 统计,不依赖于 Google Analytics,支持 自托管,且对 GDPR / CCPA 友好

    1. 安装 Docker 和 Docker Compose

    在服务器上运行以下命令安装 Docker:

    curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh

    2. 配置 Umami

    在 服务器上创建目录 umami 并进入该目录:

    mkdir -p ./umami && cd ./umami

    创建 docker-compose.yml 文件:

    nano docker-compose.yml

    文件内容

    services:
      umami:
        image: ghcr.io/umami-software/umami:postgresql-latest
        ports:
          - "3002:3000"
        environment:
          DATABASE_URL: postgresql://umami:umami@db:5432/umami
          DATABASE_TYPE: postgresql
          APP_SECRET: replace-me-with-a-random-string
        depends_on:
          db:
            condition: service_healthy
        init: true
        restart: always
        healthcheck:
          test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"]
          interval: 5s
          timeout: 5s
          retries: 5
      db:
        image: postgres:15-alpine
        environment:
          POSTGRES_DB: umami
          POSTGRES_USER: umami
          POSTGRES_PASSWORD: umami
        volumes:
          - umami-db-data:/var/lib/postgresql/data
        restart: always
        healthcheck:
          test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
          interval: 5s
          timeout: 5s
          retries: 5
    volumes:
      umami-db-data:

    3. 启动 Umami

    # 启动
    docker compose up -d
    
    # 查看运行状态
    docker compose ps

    4. 访问 Umami

    默认账号:admin
    默认密码:umami
    
    http://<服务器IP>:3002
  • Debian12安装 Immich 进行自托管照片和视频

    Immich 是一个强大的自托管照片和视频管理解决方案,允许用户在自己的服务器上存储、管理和浏览照片,同时提供智能搜索、面部识别等 AI 功能,保护您的隐私。

    1. 介绍 Immich

    Immich 的主要功能

    • 自动备份:支持手机和桌面端自动同步照片和视频。
    • 智能搜索:基于 AI 的搜索和标签功能,快速查找照片。
    • 面部识别:自动识别照片中的人物并进行分类。
    • 隐私保护:完全自托管,确保数据不会泄露到第三方服务器。
    • 高效存储:支持增量备份和重复数据删除,优化存储空间。
    • 跨平台支持:支持 Android、iOS、Web 和桌面端访问。

    2. 安装 Docker 和 Docker Compose

    在 Linux 服务器上运行以下命令安装 Docker:

    curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh

    安装完成后,检查 Docker 版本:

    docker --version

    安装 Docker Compose:

    apt install -y docker-compose

    3. 下载 Immich 并配置环境变量

    3.1 创建 Immich 安装目录

    mkdir ./immich-app && cd ./immich-app

    3.2 下载官方 Docker Compose 文件

    # &nbsp;docker-compose.yml
    wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
    
    # .env
    wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

    docker-compose.yml文件

    #
    # WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose
    #
    # Make sure to use the docker-compose.yml of the current release:
    #
    # https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
    #
    # The compose file on main may not be compatible with the latest release.
    
    name: immich
    
    services:
      immich-server:
        container_name: immich_server
        image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
        # extends:
        #   file: hwaccel.transcoding.yml
        #   service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
        volumes:
          # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
          - ${UPLOAD_LOCATION}:/usr/src/app/upload
          - /etc/localtime:/etc/localtime:ro
        env_file:
          - .env
        ports:
          - '2283:2283'
        depends_on:
          - redis
          - database
        restart: always
        healthcheck:
          disable: false
    
      immich-machine-learning:
        container_name: immich_machine_learning
        # For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.
        # Example tag: ${IMMICH_VERSION:-release}-cuda
        image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
        # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
        #   file: hwaccel.ml.yml
        #   service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
        volumes:
          - model-cache:/cache
        env_file:
          - .env
        restart: always
        healthcheck:
          disable: false
    
      redis:
        container_name: immich_redis
        image: docker.io/redis:6.2-alpine@sha256:148bb5411c184abd288d9aaed139c98123eeb8824c5d3fce03cf721db58066d8
        healthcheck:
          test: redis-cli ping || exit 1
        restart: always
    
      database:
        container_name: immich_postgres
        image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:739cdd626151ff1f796dc95a6591b55a714f341c737e27f045019ceabf8e8c52
        environment:
          POSTGRES_PASSWORD: ${DB_PASSWORD}
          POSTGRES_USER: ${DB_USERNAME}
          POSTGRES_DB: ${DB_DATABASE_NAME}
          POSTGRES_INITDB_ARGS: '--data-checksums'
        volumes:
          # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
          - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
        healthcheck:
          test: >-
            pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1;
            Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align
            --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')";
            echo "checksum failure count is $$Chksum";
            [ "$$Chksum" = '0' ] || exit 1
          interval: 5m
          start_interval: 30s
          start_period: 5m
        command: >-
          postgres
          -c shared_preload_libraries=vectors.so
          -c 'search_path="$$user", public, vectors'
          -c logging_collector=on
          -c max_wal_size=2GB
          -c shared_buffers=512MB
          -c wal_compression=on
        restart: always
    
    volumes:
      model-cache:

    .env文件

    # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables
    
    # The location where your uploaded files are stored
    UPLOAD_LOCATION=./library
    # The location where your database files are stored
    DB_DATA_LOCATION=./postgres
    
    # To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
    # TZ=Etc/UTC
    
    # The Immich version to use. You can pin this to a specific version like "v1.71.0"
    IMMICH_VERSION=release
    
    # Connection secret for postgres. You should change it to a random password
    # Please use only the characters `A-Za-z0-9`, without special characters or spaces
    DB_PASSWORD=postgres
    
    # The values below this line do not need to be changed
    ###################################################################################
    DB_USERNAME=postgres
    DB_DATABASE_NAME=immich

    3.3 配置环境变量

    编辑 .env 文件:

    nano .env

    修改以下关键参数:

    # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables
    
    # The location where your uploaded files are stored
    UPLOAD_LOCATION=./library
    # The location where your database files are stored
    DB_DATA_LOCATION=./postgres
    
    # To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
    # TZ=Etc/UTC
    
    # The Immich version to use. You can pin this to a specific version like "v1.71.0"
    IMMICH_VERSION=release
    
    # Connection secret for postgres. You should change it to a random password
    # Please use only the characters `A-Za-z0-9`, without special characters or spaces
    DB_PASSWORD=postgres
    
    # The values below this line do not need to be changed
    ###################################################################################
    DB_USERNAME=postgres
    DB_DATABASE_NAME=immich
    • 指定备份存储位置:
      • 请在UPLOAD_LOCATION中填写您希望存储备份文件的绝对路径。建议选择服务器上具有足够可用空间的新建目录,以确保备份顺利进行。
    • 设置数据库密码:
      • 强烈建议您修改DB_PASSWORD,为其设置一个自定义的强密码。由于PostgreSQL服务仅在本地Docker容器内运行,此密码用于本地身份验证。为避免Docker在解析密码时出现问题,请仅使用A-Za-z0-9范围内的字符。您可以使用pwgen等工具生成安全的随机密码。

    4. 启动 Immich

    运行 Docker Compose 启动 Immich

    docker-compose.yml 所在目录运行:

    docker compose up -d

    5. 访问 Immich Web 界面

    在浏览器中输入:

    http://<服务器IP>:2283

    首次访问时,需要注册一个管理员账户,登录后即可开始使用。