本文最后更新于 19 天前,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
前言
利用 Docker compose
可以使 Docker
布署变得简单而强大。简单讲只需创建并配置 docker-compose.yml
文件,执行 Docker compose
命令即可。本文将平时使用过的 docker-compose.yml
文件进行收集汇总,便于随时查询使用。
Docker Compose 配置及使用
创建 docker-compose.yml 文件
在项目目录下,创建 docker-compose.yml
文件。
vim docker-compose.yml
或者
nano docker-compose.yml
或直接通过 SSH
登录服务器,通过 SFTP
像操作 Windows
一样直接创建 docker-compose.yml
文件。
运行 docker-compose 相关命令
检查端口是否被占用
配置完 docker-compose.yml
文件后,最好先检查一下端口是否被占用。
查看端口是否被占用(以 81
为例),输入:
lsof -i:81 #查看 81 端口是否被占用,如果被占用,重新自定义一个端口
如果什么都没出现,表示端口未被占用,就可以继续下面的操作了。
如果出现:
-bash: lsof: command not found
运行:
apt install lsof #安装 lsof
如果端口没有被占用(被占用了就修改一下端口,比如改成 82
,注意 docker
命令行里和防火墙都要改)
最后一定在项目当前路径下,执行 Docker compose
命令。
docker-compose up -d
查询当前服务器 IP
可以直接在命令行输入:
curl ip.sb
这样就可以输入 http://ip:81
访问了。
更新镜像
docker-compose down # 下线
docker-compose pull # 拉取 latest 镜像
docker-compose up -d # 重新上线
卸载镜像
在项目当前路径下(以 /root/data/docker_data/npm 为例),执行:
cd /root/data/docker_data/npm
docker-compose down
cp -r /root/data/docker_data/npm /root/data/docker_data/npm.archive # 卸载前先备份,以防万一
rm -rf /root/data/docker_data/npm # 完全删除映射到本地的数据
删除不再使用的 docker 对象
docker image prune # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像
Nginx Proxy Manager
- 工具介绍:Nginx proxy manager 是一个很强大的反向代理工具。
- 官网地址:https://nginxproxymanager.com/
- Github 地址:https://github.com/NginxProxyManager/nginx-proxy-manager
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # 冒号左边可以改成自己服务器未被占用的端口
- '81:81' # 冒号左边可以改成自己服务器未被占用的端口
- '443:443' # 冒号左边可以改成自己服务器未被占用的端口
volumes:
- ./data:/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中
- ./letsencrypt:/etc/letsencrypt # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 letsencrypt 文件夹中
默认访问地址及管理员信息:
登录地址: http://ip:81
Email: [email protected]
Password: changeme
qBittorrent
- 工具介绍:BT 下载
- Github 地址:https://github.com/linuxserver/docker-qbittorrent
version: "2"
services:
qbittorrent:
image: linuxserver/qbittorrent
container_name: qbittorrent
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai # 你的时区
- UMASK_SET=022
- WEBUI_PORT=8081 # 将此处修改成你欲使用的 WEB 管理平台端口
volumes:
- ~/qBittorrent/config:/config # 绝对路径请修改为自己的 config 文件夹
- ~/qBittorrent/downloads:/downloads # 绝对路径请修改为自己的 downloads 文件夹
ports:
# 要使用的映射下载端口与内部下载端口,可保持默认,安装完成后在管理页面仍然可以改成其他端口。
- 6881:6881
- 6881:6881/udp
# 此处WEB UI 目标端口与内部端口务必保证相同
- 8081:8081
restart: unless-stopped
默认访问地址及管理员信息:
登录地址: http://ip:8081
User: admin
Password: adminadmin
Tiny Tiny RSS
- 工具介绍:RSS 订阅服务
- 官网地址:https://tt-rss.org/
- Github 地址:https://github.com/HenryQW/Awesome-TTRSS
version: "3"
services:
service.rss:
image: wangqiru/ttrss:latest
container_name: ttrss
ports:
- 8002:80 # 改成自己的端口
environment:
- SELF_URL_PATH=https://rss.665188.xyz/ # 设置访问域名,注意最好提前设置好域名,注意域名地址是否带有 "/" 符号。
- DB_PASS=ttrss # use the same password defined in `database.postgres`
- PUID=1000
- PGID=1000
volumes:
- feed-icons:/var/www/feed-icons/
networks:
- public_access
- service_only
- database_only
stdin_open: true
tty: true
restart: always
service.mercury: # set Mercury Parser API endpoint to `service.mercury:3000` on TTRSS plugin setting page
image: wangqiru/mercury-parser-api:latest
container_name: mercury
networks:
- public_access
- service_only
restart: always
service.opencc: # set OpenCC API endpoint to `service.opencc:3000` on TTRSS plugin setting page
image: wangqiru/opencc-api-server:latest
container_name: opencc
environment:
- NODE_ENV=production
networks:
- service_only
restart: always
database.postgres:
image: postgres:13-alpine
container_name: postgres
environment:
- POSTGRES_PASSWORD=ttrss # feel free to change the password
volumes:
- ~/postgres/data/:/var/lib/postgresql/data # persist postgres data to ~/postgres/data/ on the host
networks:
- database_only
restart: always
# utility.watchtower
# container_name: watchtower
# image: containrrr/watchtower:latest
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock
# environment:
# - WATCHTOWER_CLEANUP=true
# - WATCHTOWER_POLL_INTERVAL=86400
# restart: always
volumes:
feed-icons:
networks:
public_access: # Provide the access for ttrss UI
service_only: # Provide the communication network between services only
internal: true
database_only: # Provide the communication between ttrss and database only
internal: true
默认访问地址及管理员信息:
登录地址: http://ip:8002
User: admin
Password: password
Hexo + 后台管理 + 评论
- 工具介绍:使用
hexo admin
运行hexo
的Docker
容器,并添加Twikoo
评论系统。 - Hexo 在线部署镜像 Github 地址:https://github.com/spurin/docker-hexo
- Butterfly 官方 GitHub 地址:https://github.com/jerryc127/hexo-theme-butterfly
- 评论系统 Twikoo 文档:https://twikoo.js.org/quick-start.html#私有部署-docker
Hexo 部署:
version: '3.3'
services:
hexo:
container_name: hexo
environment:
- HEXO_SERVER_PORT=4000 # 不建议改,如果这边的 4000 改了,下面 ports 部分,冒号右边的 4000 也需要修改
- GIT_USER=github_name # 改成自己的用户名,可以随便写一个
- [email protected] # 改成自己的邮箱,可以随便写一个
- TZ=Asia/Shanghai # 时区
volumes:
- './blog:/app' # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 blog 文件夹中
ports:
- '8080:4000' # 冒号左边可以改成自己服务器未被占用的端口
image: spurin/hexo
Hexo 后台地址:
登录地址: http://ip:8080/admin
Twikoo 评论部署:
version: "3.5"
services:
twikoo:
container_name: twikoo
image: imaegoo/twikoo
environment:
- TWIKOO_THROTTLE=1000 # IP 请求限流,当同一 IP 短时间内请求次数超过阈值将对该 IP 返回错误,默认 250,可以自己修改
ports:
- 4000:8080 # 冒号左边可以改成自己服务器未被占用的端口
volumes:
- ./data:/app/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中
restart: unless-stopped
AList
- 工具介绍:支持多种存储的目录文件列表程序
- Alist 文档地址:https://alist-doc.nn.ci/docs/intro
- Github 地址:https://github.com/alist-org/alist
version: '3.3'
services:
alist:
restart: always
volumes:
- '/etc/alist:/opt/alist/data' # 冒号左边的地址可以自己修改
ports:
- '5244:5244' # 冒号左边的端口可以自己修改
container_name: alist
image: 'xhofe/alist:latest'
默认访问地址及管理员信息:
登录地址: http://ip:5244
User: admin
Password: admin
Umami
- 工具介绍:网站流量监控
- 官网地址:https://umami.is/
- Github 地址:https://github.com/umami-software/umami
version: '3'
services:
umami:
image: docker.umami.dev/umami-software/umami:postgresql-latest
ports:
- "3000:3000"
environment:
DATABASE_URL: postgresql://umami:umami@db:5432/umami
DATABASE_TYPE: postgresql
APP_SECRET: replace-me-with-a-random-string
depends_on:
- db
restart: always
db:
image: postgres:15-alpine
environment:
POSTGRES_DB: umami
POSTGRES_USER: umami
POSTGRES_PASSWORD: umami
volumes:
- ./sql/schema.postgresql.sql:/docker-entrypoint-initdb.d/schema.postgresql.sql:ro
- ./umami-db-data:/var/lib/postgresql/data
restart: always
默认访问地址及管理员信息:
登录地址: http://ip:3000
User: admin
Password: umami
IT-Tools
- 工具介绍:为开发人员收集方便的在线工具
- 官网地址:https://it-tools.tech/
- Github 地址:https://github.com/CorentinTh/it-tools
version: '3.9'
services:
ittools:
image: 'ghcr.io/corentinth/it-tools:latest'
container_name: it-tools
restart: unless-stopped
ports:
- '30811:80'
Nextcloud All-in-One
- 工具介绍:开源网盘,功能丰富。Nextcloud AIO 代表 Nextcloud All-in-One,提供轻松的部署和维护,其中包含此 Nextcloud 实例中的大多数功能。
- 官方 Docker 镜像:https://hub.docker.com/r/nextcloud/all-in-one
- Github 地址:https://github.com/nextcloud/all-in-one
version: "3.8"
volumes:
nextcloud_aio_mastercontainer:
name: nextcloud_aio_mastercontainer
services:
nextcloud:
image: nextcloud/all-in-one:latest
restart: unless-stopped
container_name: nextcloud-aio-mastercontainer
volumes:
- nextcloud_aio_mastercontainer:/mnt/docker-aio-config
- /var/run/docker.sock:/var/run/docker.sock:ro
ports:
- 8090:8080 # change the port on the left side if it's already in use on your host system.
environment:
- APACHE_PORT=11000 # change this port number if 11000 is already in use on your host system.
- APACHE_DISABLE_REWRITE_IP=1
- NEXTCLOUD_TRUSTED_DOMAINS=pan.gugu.ovh 31.22.109.18 # Your domain name + proxy host IP
- TRUSTED_PROXIES=31.22.109.18 # proxy host IP
Koodo Reader
- 工具介绍:开源免费的电子书阅读器,支持多达15种主流电子书格式, 内置笔记、高亮、翻译功能,助力高效书籍阅读和学习。
- 官方 Docker Compose 文件:https://github.com/troyeguo/koodo-reader/blob/master/docker-compose.yml
- Github 地址:https://github.com/troyeguo/koodo-reader
version: '3.5'
services:
koodo:
container_name: koodo
build:
context: .
dockerfile: Dockerfile
ports:
- "80:80/tcp"
restart: unless-stopped
Piwigo
- 工具介绍:开源的网络照片库软件,,用于管理照片,专为组织、团队和个人设计。
- Github 地址:https://github.com/Piwigo/Piwigo
version: "3"
services:
piwigo:
image: linuxserver/piwigo
network_mode: bridge
ports:
- 8899:80
links:
- db
db:
image: mysql:5
network_mode: bridge
environment:
MYSQL_USER: "piwigo"
MYSQL_PASSWORD: "piwigo"
MYSQL_DATABASE: "piwigo"
MYSQL_RANDOM_ROOT_PASSWORD: "true"
持续更新中……