前言
利用 Docker compose
可以使 Docker
布署变得简单而强大。简单讲只需创建并配置 docker-compose.yml
文件,执行 Docker compose
命令即可。本文将平时使用过的 docker-compose.yml
文件进行收集汇总,便于随时查询使用。
推荐一个在线测试 Docker 的网站,Play with Docker:https://labs.play-with-docker.com/
网站介绍:Play with Docker(PWD)由 Docker 股份有限公司赞助。PWD 是一个 Docker 游乐场,允许用户在几秒钟内运行 Docker 命令。它提供了在浏览器中拥有免费 Alpine Linux 虚拟机的体验,在这里您可以构建和运行 Docker 容器,甚至可以在 Docker Swarm 模式下创建集群。Docker 中的底层 Docker(DinD)用于提供多个 VM/PC 的效果。除了操场,PWD 还包括一个培训网站,该网站由一大套 Docker 实验室和从初学者到高级水平的测验组成,可在 training.play-with-Docker.com 上获得。
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"
Hellohao
- 工具介绍:Hellohao 图像托管程序(图床)这是一个由 JAVA 语言编写 SpringBoot 框架开发的开源图像托管程序。具备多对象存储源对接,采用前后端分离式设计的一款专门托管图像的程序,支持多种格式的图像 多功能的图床系统。该程序支持除了 web 端之外,同时支持客户端(win/mac),移动端(小程序)等常用全平台支持。程序主要使用领域:个人照片存储,团队共享图像,博客/商城等网站图片托管,图像批量云分享等。具备优秀的多用户图像上传功能和完善的图像查询管理逻辑,同时支持对接多家对象存储。
- 存储源支持:
- 开源版:本地,阿里OSS,又拍USS,七牛KODO,腾讯COS,网易NOS,FTP,AWS S3协议(百度云BOS,青云Qingstor,Ucloud US3,Minio等兼容S3协议)
- Core 版:开源版的基础上增加 Backblaze(B2) 并且可同个对象存储商家可开多个存储源(可添加至90+存储源)
- Github 地址:https://github.com/hello-hao/Tbed
- 初始用户名:
admin
初始邮箱:admin
初始密码:admin
version: "3"
services:
tbed-free:
# 具体版本号需要填写目前发行的最新版本
image: hellohao/tbed-free:2023xxxx
networks:
hellohao_network:
ports:
- "10088:10088"
- "10089:10089"
volumes:
- /HellohaoData/:/HellohaoData/
environment:
MYSQL_URL: jdbc:mysql://hellohaodb/tbed?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
# 数据库用户名(一般使用本镜像数据库无需修改,如果使用外部三方数据库自行修改自己的用户名)
MYSQL_USERNAME: root
# 自定设置一个MySQL的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致
MYSQL_PASS: tIaNGg@SHa&hIo56
# 前端域名(反代10089端口的域名)
HELLOHAO_WEB_HOST: http://pic.example.com
# 后端域名(反代10088端口的域名)
HELLOHAO_SERVER_HOST: http://server.example.com
hellohaodb:
image: hellohao/mysql-free:1.0
networks:
hellohao_network:
command:
- --default-authentication-plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --explicit_defaults_for_timestamp=true
ports:
- "3307:3306"
volumes:
- /HellohaoData/mysql:/var/lib/mysql
environment:
# MySQL的密码
MYSQL_ROOT_PASSWORD: tIaNGg@SHa&hIo56
networks:
hellohao_network:
Immich
- 工具介绍:高性能的自托管照片和视频备份方案。
- 官方网站: https://immich.app
- Github 地址:https://github.com/immich-app/immich
下载 docker-compose.yml
和 example.env
文件到同一个目录下并编辑配置文件。
docker-compose.yml
文件
wget https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
version: "3.8"
#
# WARNING: 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}
command: [ "start.sh", "immich" ]
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
ports:
- 2283:3001
depends_on:
- redis
- database
restart: always
immich-microservices:
container_name: immich_microservices
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/hardware-transcoding
# file: hwaccel.transcoding.yml
# service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
command: [ "start.sh", "microservices" ]
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
depends_on:
- redis
- database
restart: always
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
redis:
container_name: immich_redis
image: redis:6.2-alpine@sha256:afb290a0a0d0b2bd7537b62ebff1eb84d045c757c1c31ca2ca48c79536c0de82
restart: always
database:
container_name: immich_postgres
image: tensorchord/pgvecto-rs:pg14-v0.1.11@sha256:0335a1a22f8c5dd1b697f14f079934f5152eaaa216c09b61e293be285491f8ee
env_file:
- .env
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
volumes:
- pgdata:/var/lib/postgresql/data
restart: always
volumes:
pgdata:
model-cache:
将 example.env
文件重命名为 .env
文件
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.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 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
DB_PASSWORD=postgres
# The values below this line do not need to be changed
###################################################################################
DB_HOSTNAME=immich_postgres
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
REDIS_HOSTNAME=immich_redis
持续更新中……