Docker Aria2的最佳实践
Docker Hub:https://hub.docker.com/r/superng6/aria2
GitHub:https://www.github.com/SuperNG6/docker-aria2
博客:https://sleele.com/2019/09/27/docker-aria2的最佳实践/
在茫茫多的docker aria2镜像中,一直找不到符合我需求的镜像
之所以构建这个镜像的原因
当前的镜像或多或少都有以下几点不符合的我的需求
-
没有配置UID和GID
这关系到你下载的文件的权限问题,默认是root权限,很难管理
-
端口不全
绝大多数的aria2 images 都只开放了6800端口 下载速度息息相关的BT下载DTH监听端口、BT下载监听端口,需要expose出来 支持修改
DHT网络监听端口
和BT监听端口
,部分网络6881端口已被封禁,建议修改 -
没有自动删除.aria2文件的自动执行脚本
aria2建立下载任务后会自动生成.aria2文件,aria2自身提供了api可以触发执行脚本
-
没有回收站
不小心删除文件后无法找回,现在有了回收站,再也不用担心误删了
-
没有任务转移功能
NAS下载,建议使用SSD盘,减少硬盘噪音,下载完成后自动保留目录结构转移到HDD硬盘中
-
不能保存在保存磁力链接为种子文件时更名
aria2虽然可以保存磁力链接为种子,但是种子名为随机字符串,本镜像可以将种子命名为正确名称
-
无法检测是否下载过的任务
aria2只能够在持续运行期间检查是否为重复任务,重启后再建立相同任务则会覆盖,本镜像支持持久化检查重复任务 支持检测到重复任务自动删除新创立的重复任务
-
不能够暂停任务后结束/移动文件
BT任务有个特点,就说很容易卡在一个进度就不动了,如果主要文件已下载完成可以执行其他操作就好了 本镜像支持暂停任务后清理垃圾文件,并移动到已完成目录,并结束该任务
本镜像的一些优点
- 全平台架构
x86-64
、arm64
、armhf
,统一latest tag - 做了usermapping,使用你自己的账户权限来运行,这点对于群辉来说尤其重要
- 纯aria2,没有包含多于的服务
- 超小镜像体积 10.77 MB
- 可以自定义任意二级目录
- 开放了BT下载DTH监听端口、BT下载监听端口(TCP/UDP 6881),加快下载速度
- 默认开启DHT并且创建了DHT文件,加速下载
- 包含了下载完成后自动删除.aria2文件脚本
- 包含了执行删除正在下载任务事时自动执行删除文件(删除已完成的任务不会删除文件,请放心)和aria2文件的脚本
- 内置最优的aria2配置文件(修改自P3TERX/aria2.conf,感谢)
- 内置400多条最新trackers(来自XIU2 / TrackersListCollection,感谢)
- 每天自动更新trackers,不需要重启aria2即可生效(来自P3TERX/aria2.conf,感谢)
- 默认上海时区 Asia/Shanghai
- 直接设置token,不需要在配置文件里修改
- 最新静态编译版的aria2c1.3.5(来自P3TERX/aria2-builder,感谢)
- 解除aria2c下载线程限制
- 支持自动更新tracker,每次启动容器时会自动更新tracker
- 手动设置磁盘缓存
CACHE
,默认参数128M
- 可选则开启回收站,删除文件后移动至回收站,防止丢失文件
- 可选下载任务完成后,保留目录结构移动文件
- 相对来说最完善的任务处理脚本
- 更多可手动调节参数,大量选项不需要修改conf文件
- 全平台镜像统一tag
环境变量说明
参数 | 说明 |
---|---|
--name=aria2 |
容器名设置为aria2 |
-v 本地文件夹1:/downloads |
Aria2下载位置 |
-v 本地文件夹2:/config |
Aria2配置文件位置 |
-e PUID=1026 |
Linux用户UID |
-e PGID=100 |
Linux用户GID |
-e SECRET=yourtoken |
Aria2 token |
-e CACHE=1024M |
Aria2磁盘缓存配置 |
-e PORT=6800 |
RPC通讯端口 |
-e WEBUI=true |
启用WEBUI |
-e WEBUI_PORT=8080 |
WEBUI端口 |
-e BTPORT=32516 |
DHT和BT监听端口 |
-e UT=true |
启动容器时更新trackers |
-e CTU= |
启动容器时更新自定义trackes地址 |
-e RUT=true |
每天凌晨3点更新trackers |
-e SMD=true |
保存磁力链接为种子文件 |
-e FA= |
磁盘预分配模式none ,falloc ,trunc ,prealloc |
-p 6800:6800 |
Aria2 RPC连接端口 |
-p 6881:6881 |
Aria2 tcp下载端口 |
-p 6881:6881/udp |
Aria2 p2p udp下载端口 |
--restart unless-stopped |
自动重启容器 |
自定义tracker地址
CTU="https://cdn.jsdelivr.net/gh/XIU2/TrackersListCollection@master/best_aria2.txt"
/config/setting.conf
配置说明(推荐使用)
推荐使用setting.conf
进行本镜像附加功能选项设置
## docker aria2 功能设置 ##
# 配置文件为本项目的自定义设置选项
# 重置配置文件:删除本文件后重启容器
# 所有设置无需重启容器,即刻生效
# 删除任务,`delete`为删除任务后删除文件,`recycle`为删除文件至回收站,`rmaria`为只删除.aria2文件
remove-task=rmaria
# 下载完成后执行操作选项,默认`false`
# `true`,下载完成后保留目录结构移动
# `dmof`非自定义目录任务,单文件,不执行移动操作。自定义目录、单文件,保留目录结构移动(推荐)
move-task=false
# 文件过滤,任务下载完成后删除不需要的文件内容,`false`、`true`
# 由于aria2自身限制,无法在下载前取消不需要的文件(只能在任务完成后删除文件)
content-filter=false
# 下载完成后删除空文件夹,默认`true`,需要开启文件过滤功能才能生效
# 开启内容过滤后,可能会产生空文件夹,开启`DET`选项后可以删除当前任务中的空文件夹
delete-empty-dir=true
# 对磁力链接生成的种子文件进行操作
# 在开启`SMD`选项后生效,上传的种子无法更名、移动、删除,仅对通过磁力链接保存的种子生效
# 默认保留`retain`,可选删除`delete`,备份种子文件`backup`、重命名种子文件`rename`,重命名种子文件并备份`backup-rename`
# 种子备份位于`/config/backup-torrent`
handle-torrent=backup-rename
# 删除重复任务,检测已完成文件夹,如果有该任务文件,则删除任务,并删除文件,仅针对文件数量大于1的任务生效
# 默认`true`,可选`false`关闭该功能
remove-repeat-task=true
# 任务暂停后移动文件,部分任务下载至百分之99时无法下载,可以启动本选项
# 建议仅在需要时开启该功能,使用完后请记得关闭
# 默认`false`,可选`true`开启该功能
move-paused-task=false
/config/文件过滤.conf
配置说明
## 文件过滤设置(全局) ##
# 仅 BT 多文件下载时有效,用于过滤无用文件。
# 可自定义;如需启用请删除对应行的注释 #
# 排除小文件。低于此大小的文件将在下载完成后被删除。
#min-size=10M
# 保留文件类型。其它文件类型将在下载完成后被删除。
#include-file=mp4|mkv|rmvb|mov|avi|srt|ass
# 排除文件类型。排除的文件类型将在下载完成后被删除。
#exclude-file=html|url|lnk|txt|jpg|png
# 按关键词排除。包含以下关键字的文件将在下载完成后被删除。
#keyword-file=广告1|广告2|广告3
# 保留文件(正则表达式)。其它文件类型将在下载完成后被删除。
#include-file-regex=
# 排除文件(正则表达式)。排除的文件类型将在下载完成后被删除。
# 示例为排除比特彗星的 padding file
#exclude-file-regex="(.*/)_+(padding)(_*)(file)(.*)(_+)"
Linux
输入 id 你的用户id
获取到你的UID和GID,替换命令中的PUID、PGID
执行命令
docker run -d \
--name=aria2 \
-e PUID=1026 \
-e PGID=100 \
-e TZ=Asia/Shanghai \
-e SECRET=yourtoken \
-e CACHE=512M \
-e PORT=6800 \
-e BTPORT=32516 \
-e WEBUI=true \
-e WEBUI_PORT=8080 \
-e UT=true \
-e RUT=true \
-e FA=falloc \
-e QUIET=true \
-e SMD=true \
-p 32516:32516 \
-p 32516:32516/udp \
-p 6800:6800 \
-p 8080:8080 \
-v $PWD/config:/config \
-v $PWD/downloads:/downloads \
--restart unless-stopped \
superng6/aria2:webui-latest
docker-compose
version: "3.1"
services:
aria2:
image: superng6/aria2:webui-latest
container_name: aria2
network_mode: host
environment:
- PUID=1026
- PGID=100
- TZ=Asia/Shanghai
- SECRET=yourtoken
- CACHE=512M
- PORT=6800
- WEBUI=true
- WEBUI_PORT=8080
- BTPORT=32516
- UT=true
- QUIET=true
- SMD=true
volumes:
- $PWD/config:/config
- $PWD/downloads:/downloads
restart: unless-stopped
Dockerfile
FROM lsiobase/alpine:3.13 as builder
# download static aria2c && AriaNg AllInOne
RUN apk add --no-cache curl unzip \
&& ARIANG_VER=$(wget -qO- https://api.github.com/repos/mayswind/AriaNg/tags | grep 'name' | cut -d\" -f4 | head -1 ) \
&& wget -P /tmp https://github.com/mayswind/AriaNg/releases/download/${ARIANG_VER}/AriaNg-${ARIANG_VER}-AllInOne.zip \
&& unzip /tmp/AriaNg-${ARIANG_VER}-AllInOne.zip -d /tmp \
&& curl -fsSL https://git.io/docker-aria2c.sh | bash
# install static aria2c
FROM lsiobase/alpine:3.13
# set label
LABEL maintainer="NG6"
ENV TZ=Asia/Shanghai UT=true SECRET=yourtoken CACHE=128M QUIET=true \
SMD=true RUT=true PORT=6800 WEBUI=true WEBUI_PORT=8080 BTPORT=32516 \
PUID=1026 PGID=100
# copy local files && aria2c
COPY root/ /
COPY darkhttpd/ /etc/cont-init.d/
COPY --from=builder /tmp/index.html /www/index.html
COPY --from=builder /usr/local/bin/aria2c /usr/local/bin/aria2c
# install
RUN apk add --no-cache darkhttpd curl jq findutils \
&& chmod a+x /usr/local/bin/aria2c \
&& ARIANG_VER=$(wget -qO- https://api.github.com/repos/mayswind/AriaNg/tags | grep 'name' | cut -d\" -f4 | head -1 ) \
&& echo "docker-aria2-$(date +"%Y-%m-%d")" > /aria2/build-date \
&& echo "docker-ariang-$ARIANG_VER" >> /aria2/build-date \
&& rm -rf /var/cache/apk/* /tmp/*
# volume
VOLUME /config /downloads /www
EXPOSE 8080 6800 32516 32516/udp
build.sh
#!/bin/bash
docker build \
--tag superng6/aria2:latest \
--force-rm \
.
install.sh
#!/usr/bin/env bash
# Check CPU architecture
ARCH=$(uname -m)
ARIAC=1.36.0
echo -e "${INFO} Check CPU architecture ..."
if [[ ${ARCH} == "x86_64" ]]; then
ARCH="aria2-${ARIAC}-static-linux-amd64.tar.gz"
elif [[ ${ARCH} == "aarch64" ]]; then
ARCH="aria2-${ARIAC}-static-linux-arm64.tar.gz"
elif [[ ${ARCH} == "armv7l" ]]; then
ARCH="aria2-${ARIAC}-static-linux-armhf.tar.gz"
else
echo -e "${ERROR} This architecture is not supported."
exit 1
fi
# Download files
echo "Downloading binary file: ${ARCH}"
curl -L "https://github.com/SuperNG6/docker-aria2/releases/download/2021.08.24/${ARCH}" | tar -xz
mv aria2c /usr/local/bin
echo "Download binary file: ${ARCH} completed"
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。