参考Install Docker on Debian和镜像加速器-Docker-从入门到实践:
安装必要组件:
1
2
| sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
|
设置Docker源:
1
2
3
4
5
6
| # 腾讯云镜像源
curl -fsSL https://mirrors.cloud.tencent.com/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
# 国内网络不推荐使用官方源
# curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://mirrors.cloud.tencent.com/docker-ce/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
安装Docker:
1
2
| sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
查看Docker版本:
将某一普通用户添加到Docker用户组中:
1
| sudo usermod -aG docker UserName
|
设置Docker开机自启:
1
| sudo systemctl enable docker.service
|
参考镜像加速器-Docker-从入门到实践:
编辑文件/etc/docker/daemon.json
并添加以下内容, 如不存在就新建:
1
2
3
4
5
| {
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com"
]
}
|
重启Docker:
1
| sudo systemctl restart docker.service
|
执行docker info
, 如结果中有镜像源地址, 则说明配置成功。
1
2
| Registry Mirrors:
https://mirror.ccs.tencentyun.com/
|
编辑文件/etc/docker/daemon.json
并添加以下内容:
1
2
3
| {
"iptables":false
}
|
重启Docker后生效:
1
| sudo systemctl restart docker.service
|
但这样会使docker很多地方都会受到影响, 甚至会出现不能用的情况。
参考Nftables#Working with Docker:
一种可靠的方法是让docker在单独的网络名称空间中运行, 在那里它可以做任何它想做的事情。
编辑/etc/systemd/system/docker.service.d/netns.conf
并写入以下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| [Service]
PrivateNetwork=yes
# cleanup
ExecStartPre=-nsenter -t 1 -n -- ip link delete docker0
# add veth
ExecStartPre=nsenter -t 1 -n -- ip link add docker0 type veth peer name docker0_ns
ExecStartPre=sh -c 'nsenter -t 1 -n -- ip link set docker0_ns netns "$$BASHPID" && true'
ExecStartPre=ip link set docker0_ns name eth0
# bring host online
ExecStartPre=nsenter -t 1 -n -- ip addr add 10.0.0.1/24 dev docker0
ExecStartPre=nsenter -t 1 -n -- ip link set docker0 up
# bring ns online
ExecStartPre=ip addr add 10.0.0.100/24 dev eth0
ExecStartPre=ip link set eth0 up
ExecStartPre=ip route add default via 10.0.0.1 dev eth0
|
如果10.0.0.*
IP地址不适合你的设置, 请调整它们。
在nftables的nat表的postrouting链中添加以下规则为docker0
启用IP转发并设置NAT:
1
| iifname docker0 oifname eth0 masquerade
|
然后, 确保Enable packet forwarding。
现在, 你可以使用nftables为docker0
接口设置防火墙和端口转发, 而不会产生任何干扰。