分类: docker

docker
  • aliyundrive-webdav

    aliyundrive-webdav

     

    GitHub Actions
    PyPI
    Docker Image
    aliyundrive-webdav
    Crates.io

    1f680.svg_ Help me to become a full-time open-source developer by sponsoring me on GitHub

    阿里云盘 WebDAV 服务,主要使用场景为配合支持 WebDAV 协议的客户端 App 如 InfusenPlayer 等实现在电视上直接观看云盘视频内容, 支持客户端 App 直接从阿里云盘获取文件播放而不经过运行本应用的服务器中转, 支持上传文件,但受限于 WebDAV 协议不支持文件秒传。

    请注意:V2 版本基于阿里云盘开放平台接口实现,不再支持阿里云盘 Web 和 App 版本获取的 refresh token。 由于本项目作者不再使用梅林固件,V2 版本不再免费支持 Koolshare 梅林固件系统,如有需要请考虑付费支持

    如果项目对你有帮助,请考虑捐赠支持项目持续维护。 也可以考虑加入aliyundrive-webdav 知识星球获取咨询和技术支持服务。

    Note

    本项目作者没有上传需求, 故上传文件功能测试不全面且没有持续迭代计划.

    安装

     

    可以从 GitHub Releases 页面下载预先构建的二进制包, 也可以使用 pip 从 PyPI 下载:

    pip install aliyundrive-webdav

    如果系统支持 Snapcraft 比如 Ubuntu、Debian 等,也可以使用 snap 安装:

    sudo snap install aliyundrive-webdav

    OpenWrt 路由器

     

    GitHub Releases 中有预编译的 ipk 文件, 目前提供了 aarch64/arm/mipsel/x86_64/i686 等架构的版本,可以下载后使用 opkg 安装,以 nanopi r4s 为例:

    wget https://github.com/messense/aliyundrive-webdav/releases/download/v2.3.3/aliyundrive-webdav_2.3.3-1_aarch64_generic.ipk
    wget https://github.com/messense/aliyundrive-webdav/releases/download/v2.3.3/luci-app-aliyundrive-webdav_2.3.3_all.ipk
    wget https://github.com/messense/aliyundrive-webdav/releases/download/v2.3.3/luci-i18n-aliyundrive-webdav-zh-cn_2.3.3-1_all.ipk
    opkg install aliyundrive-webdav_2.3.3-1_aarch64_generic.ipk
    opkg install luci-app-aliyundrive-webdav_2.3.3_all.ipk
    opkg install luci-i18n-aliyundrive-webdav-zh-cn_2.3.3-1_all.ipk

    其它 CPU 架构的路由器可在 GitHub Releases 页面中查找对应的架构的主程序 ipk 文件下载安装, 常见 OpenWrt 路由器 CPU 架构如下表(欢迎补充):

    路由器 CPU 架构
    nanopi r4s aarch64_generic
    小米 AX3600 aarch64_cortex-a53
    斐讯 N1 盒子 aarch64_cortex-a53
    Newifi D2 mipsel_24kc
    Pogoplug arm_mpcore

    Tips: 不清楚 CPU 架构类型可通过运行 opkg print-architecture 命令查询。

    OpenWrt 配置界面

    Docker 运行

     

    docker run -d --name=aliyundrive-webdav --restart=unless-stopped -p 8080:8080 \
      -v /etc/aliyundrive-webdav/:/etc/aliyundrive-webdav/ \
      -e REFRESH_TOKEN='your refresh token' \
      -e WEBDAV_AUTH_USER=admin \
      -e WEBDAV_AUTH_PASSWORD=admin \
      messense/aliyundrive-webdav

    其中,REFRESH_TOKEN 环境变量为你的阿里云盘 refresh_tokenWEBDAV_AUTH_USER 和 WEBDAV_AUTH_PASSWORD 为连接 WebDAV 服务的用户名和密码。

    QNAP 威联通 NAS

     

    QNAP 插件

     

    qnap-aliyunpan-webdav by @iranee.

    ContainerStation (Docker)

     

    管理员登陆 NAS 后安装 ContainerStation 并启动服务,在 Management (管理) 标签中 Create Application (新建应用),配置如下

    version: '3.3'
    services:
      aliyundrive-webdav:
        container_name: aliyundrive-webdav
        restart: unless-stopped
        ports:
          - '8080:8080'
        environment:
          - 'REFRESH_TOKEN=mytoken...'
        image: messense/aliyundrive-webdav

    其中 REFRESH_TOKEN 文档最下面说明;:8080 网盘访问映射端口,可以按需改为其他的。

    点击 Create (创建)后启动,访问 http://nas地址:8080/ 即可看到你网盘的自动生成索引网页文件。

    参考文档

    rclone

     

    为了避免重复上传文件,使用 rclone 时推荐使用 Nextcloud WebDAV 模式,可以支持 sha1 checksums. 另外需要配合 --no-update-modtime 参数,否则 rclone 为了更新文件修改时间还是会强制重新上传。

    举个例子:

    rclone --no-update-modtime copy abc.pdf aliyundrive-nc://docs/

    获取 refresh token

     

    扫码获取 refresh token

    命令行用法

     

    $ aliyundrive-webdav --help
    WebDAV server for AliyunDrive
    
    Usage: aliyundrive-webdav [OPTIONS]
           aliyundrive-webdav <COMMAND>
    
    Commands:
      qr    Scan QRCode
      help  Print this message or the help of the given subcommand(s)
    
    Options:
          --host <HOST>
              Listen host
    
              

    [env: HOST=]

    [default: 0.0.0.0]

    -p, –port <PORT> Listen port

    [env: PORT=]

    [default: 8080]

    –client-id <CLIENT_ID> Aliyun drive client_id

    [env: CLIENT_ID=]

    –client-secret <CLIENT_SECRET> Aliyun drive client_secret

    [env: CLIENT_SECRET=]

    –drive-type <DRIVE_TYPE> Aliyun drive type

    [env: DRIVE_TYPE=]

    Possible values: – resource: Resource drive – backup: Backup drive – default: Default drive -r, –refresh-token <REFRESH_TOKEN> Aliyun drive refresh token

    [env: REFRESH_TOKEN=]

    -U, –auth-user <AUTH_USER> WebDAV authentication username

    [env: WEBDAV_AUTH_USER=]

    -W, –auth-password <AUTH_PASSWORD> WebDAV authentication password

    [env: WEBDAV_AUTH_PASSWORD=]

    -I, –auto-index Automatically generate index.html -S, –read-buffer-size <READ_BUFFER_SIZE> Read/download buffer size in bytes, defaults to 10MB

    [default: 10485760]

    –upload-buffer-size <UPLOAD_BUFFER_SIZE> Upload buffer size in bytes, defaults to 16MB

    [default: 16777216]

    –cache-size <CACHE_SIZE> Directory entries cache size

    [default: 1000]

    –cache-ttl <CACHE_TTL> Directory entries cache expiration time in seconds

    [default: 600]

    –root <ROOT> Root directory path

    [env: WEBDAV_ROOT=]

    [default: /]

    -w, –workdir <WORKDIR> Working directory, refresh_token will be stored in there if specified –no-trash Delete file permanently instead of trashing it –read-only Enable read only mode –tls-cert <TLS_CERT> TLS certificate file path

    [env: TLS_CERT=]

    –tls-key <TLS_KEY> TLS private key file path

    [env: TLS_KEY=]

    –strip-prefix <STRIP_PREFIX> Prefix to be stripped off when handling request

    [env: WEBDAV_STRIP_PREFIX=]

    –debug Enable debug log –no-self-upgrade Disable self auto upgrade –skip-upload-same-size Skip uploading same size file –prefer-http-download Prefer downloading using HTTP protocol –redirect Enable 302 redirect when possible -h, –help Print help (see a summary with ‘-h’) -V, –version Print version

    [env: HOST=]

    [default: 0.0.0.0]

    -p, –port Listen port

    [env: PORT=]

    [default: 8080]

    –client-id Aliyun drive client_id

    [env: CLIENT_ID=]

    –client-secret Aliyun drive client_secret

    [env: CLIENT_SECRET=]

    –drive-type Aliyun drive type

    [env: DRIVE_TYPE=]

    Possible values: – resource: Resource drive – backup: Backup drive – default: Default drive -r, –refresh-token Aliyun drive refresh token

    [env: REFRESH_TOKEN=]

    -U, –auth-user WebDAV authentication username

    [env: WEBDAV_AUTH_USER=]

    -W, –auth-password WebDAV authentication password

    [env: WEBDAV_AUTH_PASSWORD=]

    -I, –auto-index Automatically generate index.html -S, –read-buffer-size Read/download buffer size in bytes, defaults to 10MB

    [default: 10485760]

    –upload-buffer-size Upload buffer size in bytes, defaults to 16MB

    [default: 16777216]

    –cache-size Directory entries cache size

    [default: 1000]

    –cache-ttl Directory entries cache expiration time in seconds

    [default: 600]

    –root Root directory path

    [env: WEBDAV_ROOT=]

    [default: /]

    -w, –workdir Working directory, refresh_token will be stored in there if specified –no-trash Delete file permanently instead of trashing it –read-only Enable read only mode –tls-cert TLS certificate file path

    [env: TLS_CERT=]

    –tls-key TLS private key file path

    [env: TLS_KEY=]

    –strip-prefix Prefix to be stripped off when handling request

    [env: WEBDAV_STRIP_PREFIX=]

    –debug Enable debug log –no-self-upgrade Disable self auto upgrade –skip-upload-same-size Skip uploading same size file –prefer-http-download Prefer downloading using HTTP protocol –redirect Enable 302 redirect when possible -h, –help Print help (see a summary with ‘-h’) -V, –version Print version” tabindex=”0″ role=”button” style=”box-sizing: border-box; position: relative; display: flex !important; padding: 0px !important; font-size: 14px; font-weight: var(–base-text-weight-medium, 500); line-height: 20px; white-space: nowrap; vertical-align: middle; cursor: pointer; user-select: none; border: 0px; border-radius: 6px; appearance: none; color: var(–fgColor-accent, var(–color-accent-fg)); background-color: transparent; box-shadow: none; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1) 0s, background-color, box-shadow, border-color; justify-content: center !important; align-items: center !important; margin: var(–base-size-8, 8px) !important; width: var(–control-small-size, 28px); height: var(–control-small-size, 28px);”>

    Note

    注意:TLS/HTTPS 暂不支持 MIPS 架构。

    Note

    注意:启用 --skip-upload-same-size 选项虽然能加速上传但可能会导致修改过的同样大小的文件不会被上传

    License

     

    This work is released under the MIT license. A copy of the license is provided in the LICENSE file.

  • docker 容器启动限制日志大小

    docker run -d --name=wxedge --restart=always --privileged --net=host  --tmpfs /run --tmpfs /tmp -v /storage:/storage:rw --log-opt max-size=10m --log-opt max-file=3 onething1/wxedge
  • Docker Registry web-ui 部署

    • Registry web-ui 获取

    docker pull hyper/docker-registry-web
    
    • 编辑配置文件 vim RegistryWebUi/config.yml

    registry:
      # Docker registry url
      url: http://ip:端口/v2
      # Docker registry fqdn
      name: localhost:端口
      # To allow image delete, should be false
      readonly: false
      auth:
        # Disable authentication
        enabled: false ##如果不需要分用户权限设置,推荐选择false
    
    • Registry web-ui 运行

    docker run -d -p 10082:8080  --name registry-web --link myRegistry -v $(pwd)/RegistryWebUi/:/conf/:ro hyper/docker-registry-web:latest
    
    * --link myRegistry  这边的myRegistry是我之前搭建的docker仓库容器的名字
    * 之前搭建docker仓库的命令是:
    ocker run -p 31000:5000 --restart=always -itd  --privileged=true -v /hardDisk_sdd/registry:/var/lib/registry  --name myRegistry -v /etc/localtime:/etc/localtime  registry:latest
    
    • Registry 设置

    sudo docker exec -it myRegistry /bin/sh
    cd /etc/docker/registry
    vi config.yml
    加入
      delete:                                                                                                                                                                          
        # To allow image delete                                                                                                                                                        
        enabled: true 
    

    version: 0.1                                                                                                                                                                       
    log:                                                                                                                                                                               
      level: info                                                                                                                                                                      
      formatter: text                                                                                                                                                                  
      fields:                                                                                                                                                                          
        service: registry                                                                                                                                                              
        environment: OfficeProduction                                                                                                                                                  
    storage:                                                                                                                                                                           
      cache:                                                                                                                                                                           
        blobdescriptor: inmemory                                                                                                                                                       
      filesystem:                                                                                                                                                                      
        rootdirectory: /var/lib/registry                                                                                                                                               
      delete:                                                                                                                                                                          
        # To allow image delete                                                                                                                                                        
        enabled: true                                                                                                                                                                  
    http:                                                                                                                                                                              
      addr: :31000                                                                                                                                                                     
      headers:                                                                                                                                                                         
        X-Content-Type-Options: [nosniff]                                                                                                                                              
    health:                                                                                                                                                                            
      storagedriver:                                                                                                                                                                   
        enabled: true                                                                                                                                                                  
        interval: 10s                                                                                                                                                                  
        threshold: 3 
    
    • 重启 myRegistry

    sudo docker restart myRegistry
    
  • Docker registry API

    查询catalog

    sudo curl -k -XGET https://www.registry.com/v2/_catalog
    

    查询tags

    sudo curl -k -XGET https://www.registry.com/v2/<image>/tags/list
    

    删除镜像

    # 查询镜像是否存在,以及tags
    sudo curl -k -XGET https://user:passwd@www.registry.com/v2/debian/tags/list
    # 获取digest参数
    sudo curl -v --silent -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -XGET -k https://user:passwd@www.registry.com/v2/debian/manifests/jessie 2>&1 | grep Docker-Content-Digest | awk '{print $3}'
    # 根据digest进行删除
    sudo curl -X DELETE -k https://user:passwd@www.registry.com/v2/debian/manifests/sha256:a4a28eee3eb9698fef895484b2dbf1a2179e0f7b23408f5ebfc39b30bab031b4
    # 数据清理
    sudo docker exec registry /bin/registry garbage-collect /etc/docker/registry/config.yml
    sudo docker exec registry rm -rf /data/docker/registry/v2/respositories/debian

  • Docker tag 命令

    语法

    docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

    实例

    将镜像ubuntu:15.10标记为 runoob/ubuntu:v3 镜像。

    root@runoob:~# docker tag ubuntu:15.10 runoob/ubuntu:v3
    root@runoob:~# docker images   runoob/ubuntu:v3
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    runoob/ubuntu       v3                  4e3b13c8a266        3 months ago        136.3 MB
  • DOCKER portainer-ce中文版

    源码仓库https://github.com/eysp/portainer-ce

    其中arm和ppc64le架构没有设备测试,反馈bug 到GitHub issues

    pull的已数量突破100K,我不懂编程,对此我由衷的高兴,想看预览图的点这里https://www.right.com.cn/forum/thread-4066518-1-1.html

    在这里感谢大家的支持,已更新到2.16.2,没有大版本的更新我暂时不会更新了,欢迎大家进q群交流,群号758648462(备注portainer)

    感谢群里@我不是矿神 指导js精简 | @52Fancy 提供编译脚本

    一键安装代码**

    docker run -d --restart=always --name="portainer" -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock 6053537/portainer-ce
    

    163镜像安装,portainer-ce中文,访问dockerhub网速不好的尝试

    docker run -d --restart=always --name="portainer" -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock hub-mirror.c.163.com/6053537/portainer-ce
    

    访问hub.docker.com网络慢,或者以上代码都无法安装成功尝试以下代码

    docker pull hub-mirror.c.163.com/6053537/portainer-ce
    docker run -d --restart=always --name="portainer" -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data 6053537/portainer-ce
    

    Licensing

    Portainer is licensed under the zlib license. See LICENSE for reference.

    Portainer also contains code from open source projects. See ATTRIBUTIONS.md for a list.

  • 清理或删除docker无用镜像的操作方法

    目录清除docker无用镜像一、查看docker占用的资源二、只删除那些未被使用的资源1、通过标签删除镜像2、通过ID删除镜像3、删除镜像的限制4、清理镜像PS:docker批量删除无用的容…

    目录

    清除docker无用镜像
    一、查看 docker 占用的资源
    二、只删除那些未被使用的资源
    1、通过标签删除镜像
    2、通过 ID 删除镜像
    3、删除镜像的限制
    4、清理镜像
    PS:docker 批量删除无用的容器或镜像

    清除docker无用镜像

    一、查看 docker 占用的资源

    在进行资源清理之前我们有必要搞清楚 docker 都占用了哪些系统的资源。这需要综合使用不同的命令来完成。

    docker container ls:默认只列出正在运行的容器,-a 选项会列出包括停止的所有容器。

    docker image ls:列出镜像信息,-a 选项会列出 intermediate 镜像(就是其它镜像依赖的层)。

    docker volume ls:列出数据卷。

    docker network ls:列出 network。

    docker info:显示系统级别的信息,比如容器和镜像的数量等。

    通过这些命令查看 docker 使用的资源情况后,相信你已经决定要清理 docker 占用的一些资源了!让我们先从那些未被使用的资源开始。

    二、只删除那些未被使用的资源

    Docker 提供了方便的 docker system prune 命令来删除那些已停止的容器、dangling 镜像、未被容器引用的 network 和构建过程中的 cache:

    $ docker system prune

    使用以下命令清理已经停止运行的docker容器

     docker rm $(docker ps --all -q -f status=exited)

    1、通过标签删除镜像

    通过如下两个都可以删除镜像:

    docker rmi [image]

    或者:

    docker image rm  [image]

    支持的子命令如下:-f, -force: 强制删除镜像,即便有容器引用该镜像;
    -no-prune: 不要删除未带标签的父镜像;

    2、通过 ID 删除镜像

    除了通过标签名称来删除镜像,我们还可以通过制定镜像 ID, 来删除镜像,如:

    docker rmi ID

    一旦制定了通过 ID 来删除镜像,它会先尝试删除所有指向该镜像的标签,然后在删除镜像本身。

    3、删除镜像的限制

    先删除引用这个镜像的容器;
    再删除这个镜像;

    也就是,根据上图中提示的,引用该镜像的容器 ID, 执行删除命令:

    docker rm  ID

    然后,再执行删除镜像的命令:

    docker rmi ID

    4、清理镜像

    我们在使用 Docker 一段时间后,系统一般都会残存一些临时的、没有被使用的镜像文件,可以通过以下命令进行清理:

    docker image prune

    它支持的子命令有:-a, --all: 删除所有没有用的镜像,而不仅仅是临时文件;
    -f, --force:强制删除镜像文件,无需弹出提示确认;

    PS:docker 批量删除无用的容器或镜像

    docker rm `docker ps -a | grep Exited | awk ‘{print $1}’`   删除异常停止的docker容器

    docker rmi -f  `docker images | grep ‘<none>’ | awk ‘{print $3}’`  删除名称或标签为none的镜像

    到此这篇关于清除或删除docker无用镜像的操作方法的文章就介绍到这了,更多相关docker清理删除无用镜像内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

  • docker 一键安装脚本

    Docker 官方为了简化安装流程,提供了一套安装脚本,Ubuntu 和 Debian 系统可 以使用这套脚本安装:

    curl -sSL https://get.docker.com/ | sh

    DaoCloud 的安装脚本(推荐)

    curl -sSL https://get.daocloud.io/docker | sh

    阿里云的安装脚本

    curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

    推荐使用

    bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/DockerInstallation.sh)
    
  • docker-compose的网络networks的使用技巧

    1. 介绍

    1.1 介绍

    前面福哥通过一篇《docker-compose学习笔记》带着大家把docker-compose的基础知识简单的学习了一番,之所以我们使用docker-compose而不是自己用docker去搞是因为docker-compose给我们提供了很多便利的功能,这些功能可以让我们更好的理解使用Docker部署服务器环境时候的一些对象的概念和特点。

    docker-compose的service概念非常好,可以让我们把一个一个的容器抽象成一个一个的服务,每个服务之间存在了一定的关系,我们可以通过service的名称组织服务之间的关系而不用去关心服务背后的容器。

    有些时候我们希望一些服务只能被一组特定的服务访问,这个时候使用只依靠默认的网络就行不通了,那么我们就需要根据自己的情况搭建我们的服务组的网络架构,就会用到docker-compose的networks功能了。

    2. 类型

    2.1 default

    默认情况下docker-compose会建立一个默认的网络,名称为docker-compose.yml所在目录名称小写形式加上“_default”,我们的TFLinux环境就是“tflinux_default”。

    这个默认网络会对所有services下面的服务生效,所以services下面的各个服务之间才能够通过service名称互相访问。

    如果要自定义默认网络可以针对“default”网络进行设置,这样就会影响导默认网络了。

    networks:
    
      default:
        driver: bridge

    2.2 自定义

    除了默认网络之外,我们也可以建立自定义的网络,这个网络名称就比较随意了。

    networks:
    
      persist:
        driver: bridge

    2.3 已存在网络

    有时候我们想使用我们通过docker network create创建好的网络,而不是让docker-compose创建一个新的,这个时候就需要用到“external”关键字了。

    networks:
    
      persist:
        external:
          name: bridge2

    3. 案例

    3.1 所有服务互通

    要实现这个就非常容易了,因为有默认网络的存在,所以我们什么都不配置,在services下面的服务的容器里面都可以通过service名称访问其端口,前提是service需要通过ports发布它的端口出来。

    services:
    
      # mysql
      mysql:
        build:
          dockerfile: Dockerfile
          context: ./image/mysql5.7
        container_name: mysql
        image: tflinux-mysql5.7
        networks:
          - default
          - persist
        volumes:
          - /tongfu.net/env/mysql-5.7.28/data/:/var/lib/mysql/
        restart: always

    3.2 宿主机访问服务端口

    通过docker-compose的默认网络就可以在宿主机上面访问服务的端口,但是docker-compose的默认网段是每次都会变化的。要想解决这个问题就只能通过在宿主机上面建立一个固定网段的网络,然后指定服务的网络为这个已经存在的网络,这样宿主机就可以通过这个网络的网关访问服务的端口了。

    创建固定网段的网络bridge2。

    docker network create --subnet=10.16.1.0/16 --gateway=10.16.1.1 --opt "com.docker.network.bridge.name"="bridge2" bridge2

    把bridge2网络配置导docker-compose里面。

    networks:
    
      default:
        driver: bridge
    
      persist:
        external:
          name: bridge2

    给需要放开的服务增加default、persist两个网络。

    注意:因为我们指定了persist特殊网络,所以default默认网络就自动失效了,如果需要使用default网络需要显性地指定下。

    services:
    
      # mysql
      mysql:
        build:
          dockerfile: Dockerfile
          context: ./image/mysql5.7
        container_name: mysql
        image: tflinux-mysql5.7
        networks:
          - default
          - persist
        volumes:
          - /tongfu.net/env/mysql-5.7.28/data/:/var/lib/mysql/
        restart: always

    3.3 服务访问宿主机端口

    首先福哥不提倡这样使用,因为宿主机被访问是一种很危险的行为!

    如果一定要访问宿主机的端口,可以通过服务网络的网关IP地址实现,前提是宿主机的端口绑定的是全部IP地址。

    4. 总结

    今天童鞋们跟着福哥对docker-compose的networks有了一个了解,使用networks搭建复杂的应用服务组,即安全,又方便。