引言

在现代软件开发和部署过程中,容器化技术已经变得越来越重要。Docker是一个领先的容器化平台,它可以帮助开发人员和运维团队轻松创建、分发和运行应用程序及其依赖环境。通过将应用程序和其依赖项打包成一个独立的容器,Docker提供了一种一致、可靠和可移植的软件交付方式。

本博文将介绍Linux环境下Docker的安装和使用方法,以及如何使用Docker Compose来管理多个容器的组合。我们还会介绍一些常用的Docker命令,帮助您快速上手并利用Docker来加速开发、测试和部署流程。

本文以美西vps为例,系统为Ubuntu 22.04。同时也会介绍一些我正在用的Docker容器及其安装配置方法。

Docker和Docker Compose的安装与卸载

Docker的安装

  1. 命令行输入以下命令,自动下载安装脚本并开始安装
1
curl -fsSL get.docker.com -o get-docker.sh && sh get-docker.sh
  1. 查看Docker版本,如果出现版本号证明安装成功
1
docker -v
  1. 设置开机自启动
1
systemctl enable docker

Docker Compose的安装

docker compose官方GitHub仓库:

Docker Compose是用于定义和运行多容器Docker应用程序的工具。下面是安装Docker Compose的步骤:

  1. 下载 Docker Compose 的二进制文件并将其保存到/usr/local/bin/docker-compose
1
sudo curl -L "https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose	# 可以替换更新的版本号
  1. 添加可执行权限
1
sudo chmod +x /usr/local/bin/docker-compose
  1. 查看版本号,如能显示,安装成功
1
docker-compose --version

Docker和Docker Compose的卸载

  1. 卸载Docker Engine:具体的卸载方法取决于您使用的操作系统。您可以参考Docker官方文档中的卸载指南,按照适用于您的操作系统的步骤进行操作。

  2. 卸载Docker Compose:如果您要卸载Docker Compose,只需删除之前下载的Docker Compose二进制文件即可。

1
sudo rm /usr/local/bin/docker-compose

Docker常用命令介绍

Docker提供了丰富的命令行工具,用于管理和操作容器、镜像、网络和数据卷等。下面是一些常用的Docker命令,帮助您开始使用Docker:

  • 镜像(Images)管理:
    • docker pull <image>:从Docker镜像仓库中拉取指定的镜像。
    • docker images:列出本地已安装的镜像。
    • docker build -t <image>:<tag> <path>:根据Dockerfile构建自定义镜像。
  • 容器(Containers)管理:
    • docker run <image>:基于指定的镜像创建并运行一个新容器。
    • docker start <container>:启动停止的容器。
    • docker stop <container>:停止正在运行的容器。
    • docker exec -it <container> <command>:在正在运行的容器中执行命令。
    • docker rm <container>:删除指定的容器。
  • 网络(Networks)管理:
    • docker network ls:列出已创建的Docker网络。
    • docker network create <network>:创建自定义网络。
    • docker network connect <network> <container>:将容器连接到指定的网络。
  • 数据卷(Volumes)管理:
    • docker volume create <volume>:创建一个新的数据卷。
    • docker volume ls:列出已创建的数据卷。
    • docker run -v <volume>:<path>:将数据卷挂载到容器中的指定路径。

以上只是一些常见的Docker命令示例,还有更多命令和选项可供探索。您可以参考Docker官方文档中的命令参考部分,以获取更详细的命令说明和示例。

Docker项目

Alist

官方Demo网站

官方文档和教程

GitHub仓库:

安装

1
docker run -d --restart=always -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="alist" xhofe/alist:latest

参数释义:

  • docker run:docker命令,用于创建并运行一个docker容器
  • -d:该选项使容器在后台以守护进程(daemon)方式运行,即保持后台运行
  • --restart=always: 这个选项指定容器在停止后总是自动重启
  • -v /etc/alist:/opt/alist/data: 这个选项将主机的 /etc/alist 目录挂载到容器中的 /opt/alist/data 目录,实现主机和容器之间的文件共享。
  • -p 5244:5244: 这个选项将容器的 5244 端口映射到主机的 5244 端口,使得可以通过主机的 5244 端口访问容器中的服务
  • -e PUID=0: 这个选项设置环境变量 PUID 的值为 0
  • -e PGID=0: 这个选项设置环境变量 PGID 的值为 0
  • -e UMASK=022: 这个选项设置环境变量 UMASK 的值为 022
  • --name="alist": 这个选项指定容器的名称为 alist
  • xhofe/alist:main: 这个参数指定要使用的 Docker 镜像,其中 xhofe/alist 是镜像的名称,latest 是标签(tag)或版本号,即安装最新版本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
version: '3.3'
services:
alist:
restart: always
volumes:
- '/etc/alist:/opt/alist/data'
ports:
- '5244:5244'
environment:
- PUID=0
- PGID=0
- UMASK=022
container_name: alist
image: 'xhofe/alist:latest'

访问Alist

  • 局域网内通过局域网ip+端口号访问。比如192.168.1.1:5244
  • 如果安装在有公网ip的服务器上,通过公网ip+端口号访问。比如102.54.45.67:5244
  • 如果配置了内网穿透或者Nginx反向代理,通过域名访问。比如https://alist.example.com

Nginx反向代理

在Nginx配置文件的 server 字段中添加内容:

1
2
3
4
5
6
7
8
9
10
11
12
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_redirect off;
proxy_pass http://127.0.0.1:5244;
# the max size of file to upload
client_max_body_size 20000m;
}

Vaultwarden

Vaultwarden是一款跨平台的密码管理工具,可以帮助用户安全地存储和管理其各种帐户的凭据信息。Vaultwarden提供了一个完整的密码管理系统,包括用户身份验证、加密存储和安全访问API等功能。

Vaultwarden必须使用https访问,所以必须配置SSL证书。

VaultwardenBitwarden的第三方实现。两者差别如下:

  • 除不支持官方企业版的部分功能(如目录同步、SSO、群组、自定义角色以及基于企业组织层面的 Duo Security 两步登录)外,其他大部分功能均免费支持。并跟随官方版本保持及时更新。
  • Vaultwarden 比官方版更轻量。官方版使用 .Net 开发,使用 MSSQL 数据库,要求至少 2GB 内存;Vaultwarden 使用 Rust 编写,改用 SQLite 数据库(现在也支持 MySQL 和 PostgreSQL),运行时只需要 10M 内存,可以说对硬件基本没有要求。

Vaultwarden中文文档

GitHub仓库:

安装

1
2
docker pull vaultwarden/server:latest	# (可省略)
docker run -d --name vaultwarden -v /vw-data/:/data/ -p 8880:80 vaultwarden/server:latest

可选的环境变量见方式二

  1. 创建一个新的目录,然后切换到该目录下。接下来,创建如下的 docker-compose.yml 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: '3'

services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
ports:
- 8880:80
environment:
- TZ=Asia/Shanghai
- SIGNUPS_ALLOWED=false
- INVITATIONS_ALLOWED=false
- ADMIN_TOKEN=some_long_long_random_token
- LOG_FILE=/data/vaultwarden.log
- LOG_LEVEL=warn
- SHOW_PASSWORD_HINT=false
- DOMAIN=https://vw.domain.tld
volumes:
- ./vw-data:/data

可选环境变量释义:

  • TZ:时区
  • SIGNUPS_ALLOWED:是否允许注册新用户
  • INVITATIONS_ALLOWED:是否可以邀请用户,即使设置了禁止注册/邀请用户,在 admin 页面仍然可以邀请用户
  • ADMIN_TOKEN:开启 admin 管理页面,推荐使用。
  • LOG_FILE:输出日志,默认使用 stdout 输出日志,可以通过设置该参数输出到文件
  • SHOW_PASSWORD_HINT:是否开启密码提示
  • DOMAIN:域名

其他可选的环境变量及其解释

  1. 在创建的docker-compose.yml文件的路径下运行以下命令
1
docker-compose up -d

这将会读取并解析 docker-compose.yml 文件,并根据配置创建并启动容器。如果镜像不存在,Docker 将自动下载所需的镜像。您将能够在命令行中看到容器的输出日志。-d表示后台运行容器(守护进程模式)。

访问Vaultwarden

  • 局域网内通过局域网ip+端口号访问。比如192.168.1.1:8880
  • 如果安装在有公网ip的服务器上,通过公网ip+端口号访问。比如102.54.45.67:8880
  • 如果配置了内网穿透或者Nginx反向代理,通过域名访问。比如vault.example.com。博主本人就是通过这种方式访问Vaultwarden。

必须配置SSL才能正常访问。具体实现见下一节的Nginx反代。

Nginx反代

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

server_name xx.xxxxx.xxx; # 域名
ssl_certificate xxxxxxxx; # SSL证书路径
ssl_certificate_key xxxxxxxxx; # SSL证书密钥路径

location / {
proxy_pass http://127.0.0.1:8880;
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;
}
}

Memos

Memos是一个轻量级的自我托管备忘录中心和碎片化知识卡片管理工具。可以看作是Flomo的第三方开源实现。

  • 📅 方便记录每日 / 周计划
  • 💡 方便记录一些奇思妙想
  • 📕 可以随手写写读后感
  • 🏗️ 有时候可以代替在微信上经常使用的“文件传输助手”、手机的备忘录
  • 📒 可以打造一个属于自己的轻量化“卡片”笔记簿

支持Web端,桌面端,移动端和微信小程序。

各平台的客户端可在官方GitHub仓库中下载:

安装

1
docker run -d --name memos -p 5230:5230 -v ~/.memos/:/var/opt/memos ghcr.io/usememos/memos:latest

Nginx反代

是否通过https访问是可选项。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
listen 80;
listen [::]:80;
listen 443 ssl http2; # 可选
listen [::]:443 ssl http2; # 可选

server_name xxxx.xxx.xxx;
ssl_certificate xxxxxxxxxx; # 可选
ssl_certificate_key xxxxxxxxxxxx; # 可选

location / {
proxy_pass http://127.0.0.1:5230;
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;
}
}