博客 / 详情

Docker compose 推荐

2024.03.21
工具推荐
11956 Words
- Views
- Comments

docker compose 相关实例推荐. 话不多说 直接给了.

个人使用

openlist

挂载网盘的

docker-compose.yml

services:
openlist:
image: 'openlistteam/openlist:latest'
container_name: openlist
network_mode: bridge
user: '0:0'
volumes:
- './data:/opt/openlist/data'
ports:
- '5244:5244'
environment:
- UMASK=022
- TZ=Asia/Shanghai
restart: always

emby

自建影视服务器喽,顺便加个代理刮削,使用host网络就不用改代理地址

docker-compose.yml

services:
emby:
image: emby/embyserver_arm64v8 # X86架构镜像: emby/embyserver
container_name: emby
restart: always
network_mode: host
ports:
- 8096:8096
environment:
- TZ=Asia/Shanghai
- HTTP_PROXY=http://127.0.0.1:7890
- HTTPS_PROXY=http://127.0.0.1:7890
- ALL_PROXY=http://127.0.0.1:7890
volumes:
- ./config:/config
- <自定义路径>:/media

go-emby2openlist

重定向 emby 服务器中 strm 文件的 与 emby openlist 搭配使用 配置文件说明 https://github.com/AmbitiousJun/go-emby2openlist

docker-compose.yml

services:
go-emby2openlist:
build:
context: .
dockerfile: Dockerfile
environment:
- TZ=Asia/Shanghai
- GIN_MODE=release
container_name: go-emby2openlist
network_mode: host
restart: always
volumes:
- ./config.yml:/app/config.yml
# - ./lib:/app/lib 不需要ffmpeg
# - ./openlist-local-tree:/app/openlist-local-tree 不使用strm生成
ports:
- 8095:8095 # http

mihomo

docker版本的小喵,需要先准备好 config.yaml 配置文件 以下基本配置自用 需要自行加入节点

docker-compose.yml

services:
mihomo:
image: metacubex/mihomo:latest
container_name: mihomo
network_mode: host
restart: always
ports:
- "7890:7890"
- "9090:9090"
volumes:
- ./config.yaml:/root/.config/mihomo/config.yaml
environment:
MIHOMO_CONFIG_DIRECTORY: "/root/.config/mihomo"

config.yaml

mixed-port: 7890
allow-lan: true
bind-address: '*'
mode: rule
log-level: error
dns:
enable: true
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
use-hosts: true
nameserver:
- 8.8.8.8
- 1.1.1.1
fallback:
- https://dns.cloudflare.com/dns-query
- tls://8.8.8.8
- tls://1.1.1.1
fallback-filter:
geoip: true
geoip-code: CN
ipcidr:
- 240.0.0.0/4
fake-ip-filter:
- '*.lan'
- '*.local'
- 'localhost'
- 'ntp.org'
- 'time.*'
- 'connectivitycheck.gstatic.com'
- 'detectportal.firefox.com'
proxy-server-nameserver:
- 8.8.8.8
- 1.1.1.1
proxies:
- <节点>
proxy-groups:
- <节点分组>
rules:
- <规则>
- 'DOMAIN,injections.adguard.org,DIRECT'
- 'DOMAIN,local.adguard.org,DIRECT'
- 'DOMAIN-SUFFIX,local,DIRECT'
- 'IP-CIDR,127.0.0.0/8,DIRECT'
- 'IP-CIDR,172.16.0.0/12,DIRECT'
- 'IP-CIDR,192.168.0.0/16,DIRECT'
- 'IP-CIDR,10.0.0.0/8,DIRECT'
- 'IP-CIDR,17.0.0.0/8,DIRECT'
- 'IP-CIDR,100.64.0.0/10,DIRECT'
- 'IP-CIDR,224.0.0.0/4,DIRECT'
- 'IP-CIDR6,fe80::/10,DIRECT'
- 'DOMAIN-SUFFIX,cn,DIRECT'
- 'DOMAIN-KEYWORD,-cn,DIRECT'
- 'GEOIP,CN,DIRECT'
- 'MATCH,DIRECT'

frp

玩穿透的

frps

docker-compose.yml

services:
frps:
image: kimi360/frpc:latest
container_name: frps
network_mode: host
restart: always
volumes:
- ./frps.toml:/frp/frps.toml

frps.toml

bindPort = 6900 # 自定义端口
auth.token = "<自定义token>"
transport.maxPoolCount = 1 # 连接池数

frpc

docker-compose.yml

services:
frpc:
image: kimi360/frpc:latest
container_name: frpc
network_mode: host
restart: always
volumes:
- ./frpc.toml:/frp/frpc.toml

frpc.toml

serverAddr = "<服务器IP>"
serverPort = 6900 # 与服务器frps端口一致
auth.token = "<与服务器自定义token一致>"
transport.poolCount = 1 # 连接数
# 以本地 emby 穿透到公网为例
[[proxies]]
name = "emby"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8096
remotePort = 8096
transport.useEncryption = true
transport.useCompression = true
# 启用健康检查,类型为 tcp
healthCheck.type = "tcp"
# 建立连接超时时间为 3 秒
healthCheck.timeoutSeconds = 3
# 连续 3 次检查失败,此 proxy 会被摘除
healthCheck.maxFailed = 3
# 每隔 10 秒进行一次健康检查
healthCheck.intervalSeconds = 10

其他 Compose

ddns-go

动态解析域名

docker-compose.yml

services:
ddns-go:
image: 'jeessy/ddns-go:latest'
container_name: ddns-go
network_mode: host
ports:
- 9876:9876
volumes:
- './ddns-go:/root'
restart: always

caddy

caddy最大益处就是可解决你的SSL证书问题

docker-compose.yml

services:
caddy:
image: 'caddy:latest'
container_name: caddy
network_mode: host
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./data:/data
cap_add:
- NET_ADMIN
restart: always

Caddyfile

# openlist
https://inmark.dev {
encode zstd gzip
reverse_proxy 127.0.0.1:5244
}

音乐服务器 如果你是ios推荐使用LMP音乐APP

docker-compose.yml

services:
navidrome:
image: deluan/navidrome:latest
container_name: navidrome
network_mode: bridge
ports:
- "4533:4533"
volumes:
- "./data:/data"
- "<音乐所在路径>:/music"
environment:
- ND_DEFAULTLANGUAGE=zh-Hans
- ND_ENABLETRANSCODINGCONFIG=true
- ND_TRANSCODINGCACHESIZE=0
- ND_SCANSCHEDULE=1m
- ND_LOGLEVEL=info
- ND_SESSIONTIMEOUT=24h
restart: always

solara

音乐在线服务,如与navidrome一起使用推荐 <音乐所在路径><本地存储路径>一致

docker-compose.yml

services:
solara:
image: leaosunday/solara:latest
container_name: solara
network_mode: bridge
restart: always
ports:
- "3000:3000"
volumes:
- ./data:/app/data
- <本地存储路径>:/app/downloads # 改成你想要下载到nas的目录
environment:
- NODE_ENV=production
- PORT=3000
- DB_PATH=/app/data/solara.db
- NAS_DOWNLOAD_DIR=/app/downloads

cloudflared

cloudflared tunnel 穿透服务

docker-compose.yml

services:
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
restart: always
network_mode: bridge
command:
- tunnel
- --no-autoupdate
- run
- --token
- <token>

enclosed

加密一次性信息文件分享,必须使用https访问

docker-compose.yml

services:
enclosed:
image: corentinth/enclosed:latest
container_name: enclosed
network_mode: bridge
ports:
- 8787:8787
volumes:
- ./data:/app/.data
restart: always

homeassistant

智能家居服务 接入homekit

docker-compose.yml

services:
homeassistant:
image: homeassistant/home-assistant:latest
container_name: homeassistant
network_mode: host
volumes:
- ./config:/config
ports:
- 8123:8123
environment:
- TZ=Asia/Shanghai
restart: always

mariadb

Maridb 比 MySQL 更好用的数据库

docker-compose.yml

services:
mariadb:
image: mariadb:10.6
container_name: mariadb
restart: always
network_mode: bridge
environment:
MARIADB_ROOT_PASSWORD: "root"
MARIADB_DATABASE: "halo"
TZ: "Asia/Shanghai"
ports:
- "3306:3306"
volumes:
- ./data:/var/lib/mysql
- ./log:/var/log/mysql

halo

一个带有后台且插件有点丰富的博客网站

docker-compose.yml

services:
halo:
image: registry.fit2cloud.com/halo/halo
restart: on-failure:3
container_name: halo
network_mode: bridge
volumes:
- ./halo2:/root/.halo2
ports:
- "8090:8090"
environment:
# JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
- JVM_OPTS=-Xmx512m -Xms512m
command:
# 外部访问地址,请根据实际需要修改
- --halo.external-url=https://<domain>

speedtest

内网测速

docker-compose.yml

services:
speedtest:
container_name: speedtest
image: ghcr.io/librespeed/speedtest:latest
restart: always
network_mode: bridge
environment:
MODE: standalone
#TITLE: "LibreSpeed"
#TELEMETRY: "false"
#ENABLE_ID_OBFUSCATION: "false"
#REDACT_IP_ADDRESSES: "false"
#PASSWORD:
#EMAIL:
#DISABLE_IPINFO: "false"
#IPINFO_APIKEY: "your api key"
#DISTANCE: "km"
#WEBPORT: 8080
ports:
- "8080:8080" # webport mapping (host:container)

musictag

音乐内置信息补全服务

docker-compose.yml

services:
musictag:
image: xhongc/music_tag_web:latest
container_name: musictag
network_mode: bridge
ports:
- 8002:8002
volumes:
- '/vol1/1000/Tmp/music:/app/media'
- './data:/app/data'
restart: always

metatube

懂的都懂 文档地址:
https://metatube-community.github.io/README_ZH/

docker-compose.yml

services:
metatube:
image: ghcr.io/metatube-community/metatube-server:latest
container_name: metatube
network_mode: bridge
ports:
- 8989:8080
environment:
# 代理地址
- proxy_host=http://192.168.0.254:7890
- http_proxy=http://192.168.0.254:7890
- https_proxy=http://192.168.0.254:7890
volumes:
- ./config:/config
restart: always
command: -dsn /config/metatube.db

immich

开源的照片管理工具,支持 iOS 和 Android App.
首先从 immich 官网 下载配置文件:🧷docker-compose.yml🧷example.env
也可以按照下面文件编写【与官方相同,删除英文注释,修改上传照片路径,数据库路径即可】

  1. 将 🧷example.env 与 🧷docker-compose.yaml 放至相同路径文件夹下;
  2. 将 🧷example.env 重命名为 🧷.env;
  3. docker compose up -d 等待完成即可。

example.env

# 上传照片路径
UPLOAD_LOCATION=/home/immich/Photo
# 数据库路径
DB_DATA_LOCATION=/home/immich/db
# 时区 中国上海
TZ=Asia/Shanghai
# 版本
IMMICH_VERSION=release
# 数据库:用户密码数据库名
DB_PASSWORD=postgres
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

docker-compose.yml

name: immich
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- $PWD/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
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
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:eaba718fecd1196d88533de7ba49bf903ad33664a92debb24660a922ecd9cac8
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:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
POSTGRES_INITDB_ARGS: '--data-checksums'
volumes:
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
healthcheck:
test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --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: