2026-03-04 12:14:07
1. 背景与问题
在 DNS 中,CNAME 记录不能设置在 zone apex(根域名)上,例如 example.com 本身不能是 CNAME,只有子域名如 www.example.com 可以。这是 DNS 标准的限制。
CNAME Flattening 是一种技术手段,允许在根域名上实现类似 CNAME 的效果,即将根域名指向另一个域名,并动态解析出真实 IP 返回给客户端。
PowerDNS 提供了 ALIAS 记录类型来解决这个问题,但 ALIAS 类型存在一个缺陷:不支持 DNSSEC live-signing(实时签名)。
使用 LUA Records 可以同时解决 CNAME Flattening 和 DNSSEC 签名两个问题。
2. 环境要求
在开始之前,请确认以下条件:
•PowerDNS Authoritative Server 4.x 及以上版本
•编译时包含 lua-records 支持(运行 pdns_server --version 确认 Features 中包含 lua-records)
•使用 gmysql 或其他数据库后端
•DNSSEC 使用 live-signing 模式(不是预签名模式)
验证 LUA records 支持:
pdns_server --version
输出的 Features 字段中应包含 lua-records。
3. PowerDNS 配置
3.1 启用 LUA Records
编辑 PowerDNS 配置文件(通常是 /etc/powerdns/pdns.conf 或 /etc/powerdns/pdns.d/ 目录下的配置文件),添加以下配置:
enable-lua-records=yes
同时确保配置了 resolver,LUA records 解析目标域名时需要用到:
resolver=8.8.8.8:53
重启 PowerDNS 使配置生效:
systemctl restart pdns
3.2 完整配置示例
以下是一份包含 LUA records 的完整配置示例:
launch=gmysql gmysql-host=localhost gmysql-user=root gmysql-dbname=powerdns gmysql-password=yourpassword gmysql-dnssec=yes enable-lua-records=yes resolver=8.8.8.8:53 local-address=0.0.0.0 :: local-port=53
4. 创建 Zone 并添加 LUA 记录
4.1 创建 Zone
使用 pdnsutil 创建 zone(如果已存在可跳过):
pdnsutil create-zone example.com ns1.example.com
4.2 添加 LUA CNAME 记录
使用 pdnsutil 在根域名上添加 LUA 类型的 CNAME 记录:
pdnsutil add-record example.com @ LUA "CNAME \";return 'target.example.net.'\""
实际命令示例(将 example.com 指向 hicairo.com):
pdnsutil add-record example.com @ LUA "CNAME \";return 'hicairo.com.'\""
注意:LUA 记录中的域名需要用单引号包裹,作为 Lua 字符串返回。末尾的点(.)表示绝对域名,建议保留。
4.3 验证记录
查看 zone 中的所有记录:
pdnsutil list-zone example.com
预期输出应包含:
example.com 3600 IN LUA CNAME ";return 'hicairo.com.'"
5. 启用 DNSSEC
5.1 对 Zone 签名
使用 pdnsutil 对 zone 启用 DNSSEC:
pdnsutil secure-zone example.com
更新 NSEC 排序信息:
pdnsutil rectify-zone example.com
5.2 查看签名信息
查看 zone 的 DNSSEC 详情,包括 DS 记录(需要提交到上级域):
pdnsutil show-zone example.com
输出示例:
ID = 1 (CSK), flags = 257, tag = 52822, algo = 13, bits = 256 Active Published DS = example.com. IN DS 52822 13 2 99ebc97b...
注意:需要将 DS 记录提交到域名注册商,才能完成 DNSSEC 信任链的建立。
6. 测试验证
6.1 测试 CNAME 查询
直接查询权威服务器:
dig @127.0.0.1 example.com CNAME
预期返回:
example.com. 3600 IN CNAME hicairo.com.
6.2 测试 A 记录查询
查询 A 记录,递归解析器会自动跟随 CNAME 解析出 IP:
dig @8.8.8.8 example.com A
预期返回 CNAME 记录以及目标域名的 A 记录(IP 地址)。
6.3 测试 DNSSEC 签名
使用 +dnssec 参数验证签名:
dig @127.0.0.1 example.com CNAME +dnssec
预期返回中应包含 RRSIG 记录:
example.com. 3600 IN CNAME hicairo.com. example.com. 3600 IN RRSIG CNAME 13 2 3600 ...
通过公网 DNS(如 8.8.8.8)验证,响应 flags 中应包含 ad(Authenticated Data)标志,表示 DNSSEC 验证通过:
dig @8.8.8.8 example.com CNAME +dnssec ;; flags: qr rd ra ad;
7. LUA Records 语法说明
7.1 基本格式
LUA records 的存储格式为:
LUA <DNS类型> "<Lua代码>"
其中 Lua 代码需要用双引号包裹,代码本身返回一个字符串作为 DNS 记录的内容。
7.2 固定 CNAME 示例
将域名固定指向另一个域名:
LUA CNAME ";return 'target.example.net.'"
7.3 与 ALIAS 类型的区别
特性 |
ALIAS 类型 |
LUA 类型 |
CNAME Flattening |
支持 |
支持 |
DNSSEC live-signing |
不支持 |
支持 |
zone apex 使用 |
支持 |
支持 |
灵活性 |
固定指向 |
可编程,支持条件逻辑 |
PowerDNS 版本要求 |
4.x+ |
4.x+ |
8. 常见问题
8.1 查询返回 SERVFAIL
检查 LUA 代码语法是否正确,查看 PowerDNS 日志:
journalctl -fu pdns.service
日志中会显示 Lua record reported 错误信息,根据提示修正 Lua 代码。
8.2 A 记录查询只返回 CNAME 不返回 IP
这是正常行为。PowerDNS 作为权威服务器返回 CNAME,客户端的递归解析器会自动继续解析目标域名的 A 记录。使用 8.8.8.8 等公共递归解析器测试可以看到完整结果。
8.3 DNSSEC 验证失败
确认已执行以下步骤:
•pdnsutil secure-zone 对 zone 签名
•pdnsutil rectify-zone 更新 NSEC 排序
•DS 记录已提交到域名注册商
•等待 DS 记录在全球 DNS 传播(通常需要几小时到 24 小时)
9. 总结
使用 LUA Records 实现 CNAME Flattening 的优势:
•完全支持 DNSSEC live-signing,解决了 ALIAS 类型的历史遗留问题
•只需要 gmysql 单后端,无需额外的 HTTP 后端服务
•配置简单,只需一条 LUA 记录即可实现
•支持复杂的条件逻辑(如按地理位置返回不同的目标域名)
关键命令速查:
# 添加 LUA CNAME 记录 pdnsutil add-record example.com @ LUA "CNAME \";return 'target.example.net.'\"" # 启用 DNSSEC pdnsutil secure-zone example.com pdnsutil rectify-zone example.com # 验证 dig @127.0.0.1 example.com CNAME +dnssec
本文出处:HiFeng's Blog
本文链接:https://www.hicairo.com/post/83.html
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA许可协议。转载请注明出处!
2025-03-29 16:22:22
HiDNS 是一个免费的三级域名申请平台,只要你不进行滥用,原则上可以永久免费。将 HiDNS 域名托管到 Gcore ,可以使用 Gcore 的 CDN 服务,同时由于 Gcore 的 DNS 支持 CNAME Flattening,可以解决在根域设置 CNAME 记录的问题。
1、登录 HiDNS 域名的管理面板,点击“名稱伺服器”,填入 Gcore 的 NS 服务器地址后,点击“提交”按钮。
Gcore 的 NS 服务器地址为: ns1.gcorelabs.net ns2.gcdn.services

2、登录 Gcore 的管理面板,首先点击左侧菜单中的“Managed DNS”按钮,然后点击右侧面板中的“添加区域”。

3、以 example.hidns.co 为例,输入域名后点击“Create Zone”按钮。

4、点击“确认”按钮。

5、再次点击“确认”按钮。

6、出现以下界面,说明域名已经成功托管到 Gcore,您可以点击“添加”按钮,添加 A / AAAA / CNAME 记录等。

7、有关 CNAME 记录。由于 RFC 1034 & RFC 2181 规定 CNAME 不能与其他记录共存,但根域必须有 SOA(Start of Authority)和 NS(Name Server)记录,以便 DNS 解析系统正常工作,如果在根域设置 CNAME,就无法再设置 NS 和 SOA,会导致整个 DNS 解析失败。因此我们发现传统 DNS 服务提供商,均不支持在根域上设置 CNAME 记录。Gocre 采用了 CNAME Flattening 机制,很好的解决了在根域上设置 CNAME 的问题。例如我们想为 example.hidns.co 设置指向 example.github.io 的 CNAME 记录,就可以使用 Gocre 来实现。
同上一步,点击“添加”按钮后,然后将类型选择为“CNAME”,在内容文本框内填入“example.github.io”最后点击“添加”按钮即可。
注意:如果添加 CNAME 记录失败,请检查是否已经存在 A / AAAA 记录,删除即可。

以下为非必须的操作
8、开启 DNSSEC ,解决传统 DNS 存在的安全问题。在 Gcore 的管理面板里打开“接口模式”按钮,然后打开“DNSSEC”按钮,这时弹出的菜单询问“Are you sure you want to enable DNSSEC?”,点击“Yes,enable”按钮。

9、点击 DS record 后面的“COPY”按钮,将 copy 出来的内容粘贴到一个记事本文件中。

example.hidns.co. 3600 IN DS 1036 13 2 3E6CBD9ACC39A930AA29843BBF6B7B222D2470C2937667CF519BA3B70A1009C1 1036 13 2 3E6CBD9ACC39A930AA29843BBF6B7B222D2470C2937667CF519BA3B70A1009C1
10、再次登录 HiDNS 域名的管理面板,为 example.hidns.co 新建一条 DS 记录。如下图,Type 选择“DS”,Name 输入“@”,Value输入“1036 13 2 3E6CBD9ACC39A930AA29843BBF6B7B222D2470C2937667CF519BA3B70A1009C1”,最后点击后面的“加号”。
注意:在添加DS记录时,我们去掉了上一步copy出来内容中的前段部分“example.hidns.co. 3600 IN DS ”。

11、验证 example.hidns.co 是否开启 DNSSEC 成功。
root@hcss-ecs-c37d:~# dig @8.8.8.8 example.hidns.co +dnssec ; <<>> DiG 9.18.28-0ubuntu0.22.04.1-Ubuntu <<>> @8.8.8.8 example.hidns.co +dnssec ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52677 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags: do; udp: 512 ;; QUESTION SECTION: ;example.hidns.co. IN A ;; ANSWER SECTION: example.hidns.co. 600 IN CNAME example.github.io. example.hidns.co. 600 IN RRSIG CNAME 13 3 600 20250331093148 20250329043148 37058 example.hidns.co. tzHTSQ5bXz+92T4DSJmUdYvLd6EY0FVqfjCoouQ+6ydvQc+DvVEcoCjM CRbuSRFOd6xeDo9gp3+KxI5djBFSuA== example.github.io. 3600 IN A 185.199.110.153 example.github.io. 3600 IN A 185.199.109.153 example.github.io. 3600 IN A 185.199.111.153 example.github.io. 3600 IN A 185.199.108.153 ;; Query time: 628 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) (UDP) ;; WHEN: Sat Mar 29 15:31:48 CST 2025 ;; MSG SIZE rcvd: 252
我们可以看到,dig 的返回结果中包含了 RRSIG 记录,这表明 DNSSEC 已经生效,并且返回的 CNAME 记录也经过了签名。说明 DNSSEC 已成功启用。
本文出处:HiFeng's Blog
本文链接:https://www.hicairo.com/post/82.html
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA许可协议。转载请注明出处!
2025-02-21 11:45:34
这篇教程我将带领大家在 Ubuntu 22.04 上配置 MySQL 数据库的同步,实现 MySQL 数据库一主一从复制,我们将采用 GTID 模式进行配置。
GTID(Global Transaction Identifier,全球事务标识符)模式是 MySQL 5.6 引入的一个重要特性,相比传统的基于日志位置的复制方式,GTID 模式具有以下优点:
简化复制配置:GTID 模式不需要手动记录二进制日志的文件名和位置,复制配置更加简洁。
事务一致性:每个事务都有唯一的 GTID,能够确保主从服务器之间的事务一致性。
自动故障转移:当主服务器发生故障时,可以更容易地选择新的主服务器并自动恢复复制。
避免数据丢失:GTID 模式避免了传统复制中可能出现的数据丢失问题,确保主从之间的同步更为可靠。
1. 在主从服务器上分别安装 MySQL
首先,更新系统并安装 MySQL 服务:
sudo apt update sudo apt upgrade -y sudo apt install mysql-server mysql-client
安装完毕后,你可以通过以下命令查看 MySQL 的版本:
mysql -V
2. 主服务器配置
主服务器是所有数据写入的地方,以下是配置主服务器的步骤。
2.1 编辑 MySQL 配置文件
打开 MySQL 配置文件进行修改:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
在 [mysqld] 部分添加或修改以下设置:
[mysqld] server-id=1 # 主服务器唯一 ID log-bin=mysql-bin # 启用二进制日志 gtid_mode=ON # 启用 GTID 模式 enforce-gtid-consistency=ON # 强制 GTID 一致性 log-slave-updates=ON # 允许从库更新记录到 binlog binlog-format=ROW # 使用行格式的 binlog(推荐) binlog_expire_logs_seconds=604800 # 设置 binlog 的过期时间为 7 天 innodb_buffer_pool_size=6G # 设置 InnoDB 存储引擎的缓冲池大小,建议设置为服务器总内存的 50%-70% binlog-do-db=mydatabase # 仅记录指定数据库的操作到 binlog bind-address=0.0.0.0 # 允许外部连接
2.2 重启 MySQL 服务
配置完成后,重启 MySQL 服务以使设置生效:
sudo systemctl restart mysql
2.3 创建复制用户
登录 MySQL,并创建用于复制的用户:
mysql -u root -p
在 MySQL 中执行以下命令:
CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password'; GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%'; FLUSH PRIVILEGES;
3. 从服务器配置
从服务器将从主服务器接收数据并进行同步,以下是配置从服务器的步骤。
3.1 编辑 MySQL 配置文件
打开从服务器的 MySQL 配置文件并进行修改:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
在 [mysqld] 部分添加或修改以下设置:
[mysqld] server-id=2 # 从服务器唯一 ID log-bin=mysql-bin # 启用二进制日志 gtid_mode=ON # 启用 GTID 模式 enforce-gtid-consistency=ON # 强制 GTID 一致性 log-slave-updates=ON # 允许从库更新记录到 binlog binlog-format=ROW # 使用行格式的 binlog binlog_expire_logs_seconds=604800 # 设置 binlog 的过期时间为 7 天 relay_log=relay-bin # 设置中继日志 relay_log_recovery=ON # 启用中继日志恢复 binlog-do-db=mydatabase # 仅记录指定数据库的操作到 binlog
3.2 重启 MySQL 服务
配置完成后,重启 MySQL 服务以使设置生效:
sudo systemctl restart mysql
3.3 配置复制
登录 MySQL,并配置从服务器的复制:
mysql -u root -p
停止当前的复制任务(如果有):
STOP SLAVE;
配置从服务器复制任务,使用主服务器的 IP、复制用户和密码,并启用 GTID 自动定位:
CHANGE MASTER TO MASTER_HOST='master_server_ip', MASTER_USER='slave', MASTER_PASSWORD='your_password', MASTER_AUTO_POSITION=1; # 启用 GTID 自动定位
3.4 启动复制
启动复制任务:
START SLAVE;
3.5 检查复制状态
使用以下命令检查复制状态,确保以下两项为 Yes:
SHOW SLAVE STATUS\G; ..... Slave_IO_Running: Yes Slave_SQL_Running: Yes .....
4. 数据同步验证
在主服务器上创建需要同步的数据库:
mysql -uroot -p CREATE DATABASE mydatabase;
在从服务器上验证数据库是否同步:
mysql -uroot -p SHOW DATABASES;
5. 防火墙配置(以 UFW 为例)
配置主服务器的防火墙仅允许从服务器通过 3306 端口连接到主服务器。修改主服务器的防火墙配置:
sudo ufw allow from <slave_ip> to any port 3306 proto tcp
UFW 的详细使用方法请参考:https://www.hicairo.com/post/80.html
6. 备份与恢复
6.1 在主服务器上备份数据库
使用 mysqldump 备份数据库:
mysqldump -uroot -p mydatabase --triggers --routines --events --source-data=2 --set-gtid-purged=ON > mydatabase.sql
6.2 在从服务器上恢复数据库
使用 scp 将备份的数据库下载到从服务器:
scp root@master_server_ip:/root/mydatabase.sql ./
在从服务器上恢复数据库:
mysql -uroot -p mydatabase < mydatabase.sql
检查 GTID 设置:确保目标服务器的 GTID 设置与主服务器一致,特别是在恢复后,检查 gtid_mode 和 enforce-gtid-consistency 设置:
SHOW VARIABLES LIKE 'gtid%';
6.3 重新配置从服务器
参考 3.3-3.5 配置复制
本文出处:HiFeng's Blog
本文链接:https://www.hicairo.com/post/81.html
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA许可协议。转载请注明出处!
2025-02-20 10:09:46
1. 什么是 UFW?
UFW (Uncomplicated Firewall) 是 Ubuntu 提供的一个简化的防火墙管理工具,基于 iptables,旨在让防火墙配置变得更加简单易用。
2. 安装 UFW
在大多数 Ubuntu 版本中,UFW 已经默认安装。你可以通过以下命令确认是否已安装:
sudo ufw status
如果未安装,可以通过以下命令进行安装:
sudo apt update sudo apt install ufw
3. 设置默认防火墙规则
在启用 UFW 之前,建议先设置默认规则,避免意外断开 SSH 连接:
# 默认拒绝所有传入连接 sudo ufw default deny incoming # 默认允许所有传出连接 sudo ufw default allow outgoing # 允许 SSH (22端口),避免开启防火墙后无法连接服务器 sudo ufw allow 22/tcp
4. 启用和禁用 UFW
# 启用 UFW sudo ufw enable # 禁用 UFW sudo ufw disable
⚠️ 注意:在远程服务器上启用防火墙前,务必确保已允许 SSH 端口,否则可能会被锁在服务器外面!
5. 检查 UFW 状态
sudo ufw status
6. UFW 基本命令
# 允许其他常用端口 (示例: 80 端口用于 HTTP, 443 端口用于 HTTPS) sudo ufw allow 80/tcp sudo ufw allow 443/tcp # 拒绝特定端口 sudo ufw deny 23 # 查看 UFW 详细状态 sudo ufw status verbose # 以编号形式显示所有规则 sudo ufw status numbered # 删除编号为 3 的规则 sudo ufw delete 3 # 删除规则(非编号方式) sudo ufw delete allow 80 # 重置 UFW 所有规则 sudo ufw reset
7. UFW 复杂规则示例
# 仅允许特定 IP 通过 TCP 协议访问指定端口 (例如 MySQL 3306 端口) sudo ufw allow from 192.168.1.100 to any port 3306 proto tcp # 允许特定 IP 通过 UDP 协议访问指定端口 (例如 1194 端口,用于 OpenVPN) sudo ufw allow from 192.168.1.100 to any port 1194 proto udp # 开放一个端口范围 (例如 10000 到 20000 端口,用于 VoIP 或游戏服务器) sudo ufw allow 10000:20000/tcp # 限制 SSH (防止暴力破解) sudo ufw limit ssh # 细化限制:每 IP 每 30 秒最多 6 次连接,超过则拒绝 (默认规则) sudo ufw limit 22/tcp # 你也可以为其他服务设置类似的连接限制,例如 HTTP 服务 sudo ufw limit 80/tcp
8. 防火墙日志
# 启用日志(建议在排查问题时使用) sudo ufw logging on # 查看 UFW 日志 sudo tail -f /var/log/ufw.log
本文出处:HiFeng's Blog
本文链接:https://www.hicairo.com/post/80.html
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA许可协议。转载请注明出处!
2024-11-22 10:54:14
本文将指导如何在 Debian 12 和 Ubuntu 24.04 下安装 Docker 以及 Docker Compose。
PS:本文同时适用于 Debian 11 以及 Ubuntu 20.04, Ubuntu 22.04。
一、什么是 Docker?
Docker 是一种容器化技术,可以在服务器上快速搭建容器并在不污染宿主机的情况下运行软件,而不再需要安装配置各种环境。开源 Docker 社区致力于改进这类技术,并免费提供给所有用户,使之获益。
二、什么是 Docker Compose?
传统模式下运维人员需要运行 docker run 来启动各种容器,一旦容器过多,就无法一次性记住所有的运行参数和命令,这时候我们可以使用 Docker Compose 来解决这个问题。
Docker Compose 是一个用于在单个主机上定义和运行多个 Docker 容器的工具。它使用 YAML 文件来配置应用程序的服务,然后使用一个命令就可以创建并启动所有服务。使用 Docker Compose 可以大大简化 Docker 容器的管理和部署,特别是对于具有多个互相依赖的容器的复杂应用。
三、使用官方源安装 Docker
以下操作需要在 root 用户下完成,请使用 sudo -i 或 su root 切换到 root 用户进行操作。
首先,安装一些必要的软件包:
apt update apt upgrade -y apt install curl vim wget gnupg dpkg apt-transport-https lsb-release ca-certificates
然后加入 Docker 的 GPG 公钥和 apt 源:
# Debian curl -sSL https://download.docker.com/linux/debian/gpg | gpg --dearmor > /usr/share/keyrings/docker-ce.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://download.docker.com/linux/debian $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list # Ubuntu curl -sSL https://download.docker.com/linux/debian/gpg | gpg --dearmor > /usr/share/keyrings/docker-ce.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list
国内机器可以用清华 TUNA 的国内源:
# Debian curl -sS https://download.docker.com/linux/debian/gpg | gpg --dearmor > /usr/share/keyrings/docker-ce.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list # Ubuntu curl -sS https://download.docker.com/linux/debian/gpg | gpg --dearmor > /usr/share/keyrings/docker-ce.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list
然后更新系统后即可安装 Docker CE 和 Docker Compose 插件:
apt update apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
此时可以使用 docker version 命令检查是否安装成功:
root@debian ~ # docker version Client: Docker Engine - Community Version: 26.1.4 API version: 1.45 Go version: go1.21.11 Git commit: 5650f9b Built: Wed Jun 5 11:29:22 2024 OS/Arch: linux/amd64 Context: default Server: Docker Engine - Community Engine: Version: 26.1.4 API version: 1.45 (minimum version 1.24) Go version: go1.21.11 Git commit: de5c9cf Built: Wed Jun 5 11:29:22 2024 OS/Arch: linux/amd64 Experimental: true containerd: Version: 1.6.33 GitCommit: d2d58213f83a351ca8f528a95fbd145f5654e957 runc: Version: 1.1.12 GitCommit: v1.1.12-0-g51d5e94 docker-init: Version: 0.19.0 GitCommit: de40ad0
如果需要某个特定用户可以用 Docker rootless 模式运行 Docker,那么可以把这个用户也加入 docker 组,比如我们把 www-data 用户加进去:
apt install docker-ce-rootless-extras sudo usermod -aG docker www-data
四、安装 Docker Compose
因为我们已经安装了 docker-compose-plugin,所以 Docker 目前已经自带 docker compose 命令,基本上可以替代 docker-compose:
root@debian ~ # docker compose version Docker Compose version v2.27.1
如果某些镜像或命令不兼容,则我们还可以单独安装 Docker Compose,
我们可以使用 Docker 官方发布的 Github 直接安装最新版本:
curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-Linux-x86_64 > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
此时可以使用 docker-compose version 命令检查是否安装成功:
root@debian ~ # docker-compose version Docker Compose version v2.27.1
五、修改 Docker 配置
以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘 (泪的教训):
cat > /etc/docker/daemon.json << EOF
{
"log-driver": "json-file",
"log-opts": {
"max-size": "20m",
"max-file": "3"
},
"ipv6": true,
"fixed-cidr-v6": "fd00:dead:beef:c0::/80",
"experimental":true,
"ip6tables":true
}
EOF
然后重启 Docker 服务:
systemctl restart docker
好了,我们已经安装好了 Docker 和 Docker Compose,然后就可以开始愉快的安装各种软件,限于篇幅,我们不再赘述,今后慢慢介绍安装各种 Docker 软件的方法。
来源:烧饼博客
链接:https://u.sb/debian-install-docker/