简介
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
这是比较官方化说法,用通俗一点的话来讲docker就相当于虚拟机,但是剔除了很多不必要的功能,只保留最基本的运行查询所需要的环境,用来解决那种“程序在你电脑上可以运行,在我电脑就运行不了”的尴尬情况。在这种情况下,docker相当于直接把人家电脑拿过来给你用,但是其他功能全部删掉,只保留了运行程序所需要的软件和环境,只能特定运行这一个程序
安装教程
参考文档
在Debian11.1上安装Docker可以参考以下步骤
照例安装前先进行升级
sudo apt-get update
一键安装基础工具
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
安装docker的gpg key:
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
安装docker源
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
换源,这里我们用的是阿里云的镜像加速器(阿里云的容器镜像加速服务和其他不同,需要自己注册阿里云账号,开通镜像服务。镜像工具中有镜像加速服务,其中就有你的专属加速地址),你也可以用别的
sudo vim /etc/docker/daemon.json
然后把官方给出的json格式链接粘贴进去
{
"registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
}
重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
使用docker info
就可以再最后看到我们添加的镜像加速器地址了
💡其他源介绍
中科大
https://docker.mirrors.ustc.edu.cn
网易
七牛云
Docker中国区官方镜像
至此安装完成。
在debian系的Linux发行版上,docker会开机启动启动。
如果平时使用非root账户,又不想每次执行docker命令之前都加上sudo,可以添加docker
组(有的情况会默认已经帮我们创建好了docker组,有的话可以跳过第一条指令),并将非root账户加入到该组中。执行完成之后重新登陆
生效:
sudo groupadd docker
sudo usermod -aG docker $USER
常用指令
查看所有镜像
docker images
通过 ID 彻底删除镜像(id通过上一步指令查看)
docker rmi xxxxxxx
以下指令都要进入项目文件夹下操作,最好是不同项目单独创建一个文件夹,然后里面放一个docker-compose.yml
文件
形如以下格式
启动
docker compose up -d
停止
docker compose stop
查看正在运行的程序
docker ps
项目部署
Umami
简介
Umami 是一款简单、易用、美观、轻量、快速、隐私、安全的开源免费网站统计工具,从部署到使用,都是简单、快速,体验也很满意。
官方文档介绍了多种部署方式,包括使用自己服务器,或者第三方平台,例如 Netlify、Verce、Railway 等等,这里我们采用docker一键部署的方式
第一个项目我们讲的详细一些(其实很简单)
首先创建项目文件夹umami,然后进入其中,并创建docker-compose.yml文件,输入内容。
这一系列操作合起来就是这样一行代码
mkdir umami && cd umami && vim docker-compose.yml
docker-compose.yml文件如下,不需要任何改动。其中端口可以自定义,具体操作为:把ports
中冒号前的 3000 改为你想要的端口
---
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
TRACKER_SCRIPT_NAME: random-string.js
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
volumes:
umami-db-data:
顺便说一下,image: docker.umami.dev/umami-software/umami:postgresql-latest
这一行指出了镜像的地址(网站被重定向到Github),所以不需要我们手动docker pull
拉取镜像。当然也有些文件是没有指出具体地址的,后面会进行介绍。
这里部署是采用的postgresql数据库服务,如果你想要使用mysql可以参考官方文档,手动拉取一下镜像。
接下来启动docker服务(-d表示在后台运行)
docker compose up -d
接下来就是等待过程,有的下载特别慢,比如umami就是…我去找了一下镜像的地址,发现是托管在github上面的,如果不是dockerhub的话没办法用镜像,再加上文件体积本身就很大,所以时间要特别长时间才能下好
总用时一个小时,这个时长说实话还是蛮炸裂的😅
完成以后我们就可以在3000端口(记得打开防火墙)看到我们的网页了!
然后在nginx配置端口转发,这里给出模板。location中的内容是重点,少了这几行就没法统计地区信息
server {
listen 443 ssl; # 开启HTTPS
server_name umami.lovir.cn; # 域名
location ~ / {
proxy_pass http://127.0.0.1:3000; # 源端口
proxy_set_header Host $proxy_host; # 修改转发请求头,让目标端口的应用可以受到真实的请求
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
优化部分可以参考🔗Umami Docker 部署及优化
网易云音乐
简介
本项目使用的是YesPlayMusic,这是一款高颜值的第三方网易云播放器,它完全可以作为网易云官方应用的替代品。而且还拥有一些网易云官方应用没有的功能,比如可以自动签到,支持PWA可以直接一键安装,界面简洁美观,没有多余的社交功能,没有广告等特点。
引用一下官方的宣传图,截的很好看😊
这是实际部署出来的样子,颜值确实很在线!
官方给出的docker-compose.yml文件如下,我把端口改成了800,防止首次运行和nginx冲突
services:
YesPlayMusic:
build:
context: .
image: yesplaymusic
container_name: YesPlayMusic
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
ports:
- 800:80
restart: always
这里面只给出了镜像的名称,而没有给出镜像地址,所以在此之前我们需要先手动pull一下
先创建好文件夹
mkdir YesPlayMusic && cd YesPlayMusic && vim docker-compose.yml
拉取docker镜像,这个是放在了dockerhub上面的
💡这里说一下,官方给出的构建镜像的办法是根据Dockfile以及本地文件来构建镜像,但是我不知道是不是没装node导致一直失败,所以直接拿构建好的镜像😇
docker pull fogforest/yesplaymusic:latest
同样也是很慢,完成以后直接docker compose up -d
运行就可以了~
Bitwarden
简介
参考文档-《保护自己的密码安全,自托管或免费部署 Bitwarden》
你是否考虑过你的的密码强度如何?测试你的密码需要多久能破解
Bitwarden是一款支持自部署的跨平台密码管理器,通过自部署可以免费使用所有VIP功能,相比之下是性价比较高的一个选择
docker-compose.yml文件如下,同样也是创建好文件夹和yml文件后一键部署,但是相比前两个这个速度很快🥲感动极了
version: '3'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
environment:
- WEBSOCKET_ENABLED=true
- SIGNUPS_ALLOWED=false
volumes:
- /data/docker/bitwarden/data:/data
ports:
- 7006:80 # Needed for the ACME HTTP-01 challenge.
- 7007:443
- 3012:3012
完成后在7006端口打开,显示如下界面
环境变量中 - SIGNUPS_ALLOWED=false
表示不允许其他用户注册,毕竟是我们自托管的服务,别人进来插一脚也不好。
值得一提的是,网站需要开启https才能登录进去,在此之前我们需要设置好反向代理和ssl证书。
nginx配置文件
server
{
client_max_body_size 128M;
location / {
proxy_pass http://127.0.0.1:7006;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /notifications/hub {
proxy_pass http://127.0.0.1:3012;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /notifications/hub/negotiate {
proxy_pass http://127.0.0.1:7006;
}
}
部署完成以后定期 docker pull vaultwarden/server:latest
来更新最新的服务端!防止有什么bug,毕竟自己的密码安全还是很重要的!
Waline
目前博客正在使用的评论系统!感觉还是很不错的,界面简洁管理方便,没有服务器也可以通过vercel部署。 首先拉取镜像(这个下载速度很快)
docker pull lizheming/waline
SQLite版 docker-compose.yml 文件如下:
version: '3'
services:
waline:
container_name: waline
image: lizheming/waline:latest
restart: always
ports:
- 127.0.0.1:8360:8360
volumes:
- ${PWD}/data:/app/data
environment:
TZ: 'Asia/Shanghai'
SQLITE_PATH: '/app/data'
JWT_TOKEN: '123456'
使用 SQLite 时需要下载 waline.sqlite 文件至合适的位置,注意文件存放位置
.
├── data
│ └── waline.sqlite
└── docker-compose.yml
Leancloud版 docker-compose.yml 文件如下:
version: '3'
services:
waline:
container_name: waline
image: lizheming/waline:latest
restart: always
ports:
- 127.0.0.1:8360:8360
volumes:
- ${PWD}/data:/app/data
environment:
TZ: 'Asia/Shanghai'
LEAN_ID: 'xxxxxxxxxxxxxxx'
LEAN_KEY: 'xxxxxxxxxxxxxx'
LEAN_MASTER_KEY: 'xxxxxxxxxxxxxx'
LEAN_SERVER: 'https://waline.lovir.cn'
使用Leancloud数据库要自己绑定以下api域名,要不然好像会报403,请求不到数据。
其他数据库的环境变量配置参考上面格式修改一下就差不多了,参考🔗官方文档
Twikoo
Twikoo也是一款简洁大方的静态网站评论系统,这是我在折腾vitepress的时候发现的,使用下来发现,不管是界面、响应速度、颜值都都很在线!说实话如果不是因为先入为主,我真的会更偏向于Twikoo,不过waline在Stack主题的上的表现也还可以,颜值也略胜一筹,不过速度倒是一般,所以就把Twikoo当作是一个备选方案吧
docker-compose.yml 文件如下:
version: '3'
services:
twikoo:
image: imaegoo/twikoo
container_name: twikoo
restart: unless-stopped
ports:
- 8080:8080
environment:
TWIKOO_THROTTLE: 1000
volumes:
- ./data:/app/data
运行好之后并不是直接打开网站就能出现评论框,这是云函数用来传输数据的,数据存放在同目录下的data
文件夹,为json
格式,所以是不需要数据库的,后期直接备份data文件夹就行。同时需要在nginx配置反向代理,参考前文中umami的配置。
Stack主题的配置文件中已经给出了相关配置,我们只需要把云函数地址填进envId
就行了
Alist
Alist一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,通俗来讲,就是可以把各种云存储拉到网页端或者挂载到本地,方便管理文件。
docker-compose.yml 文件如下:
version: '3.3'
services:
alist:
restart: always
volumes:
- '/etc/alist:/opt/alist/data'
ports:
- '5244:5244'
- '5245:5245'
environment:
- PUID=0
- PGID=0
- UMASK=022
- TZ=UTC
container_name: alist
image: 'xhofe/alist:latest'
同时需要在nginx配置反向代理,参考前文中umami的配置。
部署完成后使用以下命令生成密码 123456
docker exec -it alist ./alist admin set 123456
此时我们可以使用 admin
+ 123456
登录,然后修改密码,添加存储等操作
Squoosh
Squoosh 是谷歌的一款黑科技在线图片压缩工具,几乎是目前压缩效率顶级的工具,支持多种压缩算法,压缩后的图片质量几乎无损,而且免费安全,支持自部署。相比于官方的在线版本,自部署的版本可以复制 npm 代码,不知道为啥官方的没有这个功能。但是无法使用类似于“调整图片大小至 25%”的预设,对我来说很致命,因为批量调整的话每个图片尺寸是不一样的。
docker-compose.yml 文件如下:
version: '3'
services:
squoosh:
image: dko0/squoosh:latest
container_name: squoosh
restart: unless-stopped
ports:
- 7701:8080