【docker远程响应】
一、实验目的:
1、熟练掌握docker的安装和使用
2、熟练掌握docker的文件配置
二、实验内容:
需求:
使用centos完成docekr的远程响应
完成
1、docker加速器配置
2、修改默认存储配置
3、docker远程响应
三、实验结果
添加加速器
vi /etc/docker/daemon.json
添加以下内容
{
"registry-mirrors": [
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"
]
}
重置配置和docker服务
systemctl daemon-reload 更新源
systemctl docker
如果启动有错误可以去日志查看
journalctl -u docker.service -f
修改默认存储位置
安装docker之后,默认的镜像及容器存储路径为/var/lib/docker,可以使用命令docker info查看。
docker info
这是系统默认位置
配置docker远程响应
编辑 /etc/docker/daemon.json
添加hosts参数以启用 TCP 监听,同时保留本地 UNIX 套接字:
重启
systemctl daemon-reload
systemctl restart docker
处理 systemd 冲突
若系统使用systemd(如 Rocky Linux/CentOS),需创建覆盖文件
mkdir -p /etc/systemd/system/docker.service.
vim /etc/systemd/system/docker.service.d/override.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
重启服务:
systemctl daemon-reload && systemctl restart docker
docker -H tcp://10.1.1.123:2375 info
生成 TLS 证书
mkdir -p /etc/docker/certs && cd /etc/docker/certs
生成CA根证书
# 生成加密的 CA 私钥(4096位,AES-256加密)
openssl genrsa -aes256 -out ca-key.pem 4096 #注意需要输入至少4个字符,不然报错
# 生成 CA 根证书(有效期10年)
openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem
1.2生成服务端证书
# 生成服务端私钥(不加密,便于自动加载)
openssl genrsa -out server-key.pem 4096
# 创建证书签名请求(CSR)
openssl req -subj "/CN=10.1.1.123" -sha256 -new -key server-key.pem -out server.csr
# 设置扩展属性(仅用于服务端认证)
echo subjectAltName = IP:10.1.1.123 > extfile.cnf
# 签发服务端证书
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out server-cert.pem -extfile extfile.cnf
1.3 生成客户端证书
# 生成客户端私钥
openssl genrsa -out client-key.pem 4096
# 创建客户端 CSR
openssl req -subj "/CN=client" -new -key client-key.pem -out client.csr
# 设置扩展属性(客户端认证)
echo extendedKeyUsage = clientAuth > extfile-client.cnf
# 签发客户端证书
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out client-cert.pem -extfile extfile-client.cnf
1.4 设置证书的权限
chmod 0400 ca-key.pem server-key.pem client-key.pem
chmod 0444 ca.pem server-cert.pem client-cert.pem
docker服务端配置 TLS 监听
修改 daemon.json :
{
"tls": true,
"tlscacert": "/path/to/ca.pem",
"tlscert": "/path/to/server-cert.pem",
"tlskey": "/path/to/server-key.pem",
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"] #注意:加密和不加密用的端口不一样
}
3.3、防火墙配置
开放 TCP 端口根据是否加密选择):若防火墙未开,省掉该步
# 非加密端口(仅限内网)
firewall-cmd --permanent --add-port=2375/tcp
# 加密端口(推荐公网)
firewall-cmd --permanent --add-port=2376/tcp
firewall-cmd –reload
重启 Docker 服务
systemctl restart docker
journalctl -u docker.service -f
发现前面的文件写错了(前面图片是已经更正完的)
远程客户端测试连接
传输证书到客户端
将 ca.pem 、client-cert.pem 、client-key.pem 复制到客户端 ~/.docker/ 目录。
scp ca.pem client-cert.pem client-key.pem root@10.1.1.123:~/.docker/
docker -H tcp://10.1.1.123:2376 --tlsverify ps
然后这里出现了错误
从日志中可以看到,Docker 服务已经成功启动,并且监听在 /var/run/docker.sock 和 [::]:2376 端口。然而,客户端尝试连接时有错误,这表明客户端在尝试通过 TLS 连接到 Docker 守护进程时,未能提供有效的客户端证书。
docker -H tcp://10.1.1.123:2376 --tlsverify --tlscacert=ca.pem --tlscert=client-cert.pem --tlskey=client-key.pem info