5.6
配置docker远程服务
我们使用docker命令进行操作的时候,默认情况下是操作本地的docker服务,也可以通过配置,让docker监听一个tcp端口,以便让其它主机通过网络来进行操作。
5.6.1
通过tcp:2375端口实现docker远程服务
在/etc/default/docker这个文件中,加入一个参数DOCKER_OPTS1=”-H tcp://0.0.0.0:2375”
修改docker.service
vim /usr/lib/systemd/system/docker.service
增加红框内的参数。
在防火墙中放通2375端口
firewall-cmd –add-port=2375/tcp
firewall-cmd –add-port=2375/tcp –permanent
重载daemon参数,并重启docker服务
systemctl daemon-reload
systemctl restart docker
查看
docker
状态
systemctl status docker
红框内的这个参数,就是我们刚刚配置的参数。
查看监听端口
系统会监听
2375
端口
netstat –tupn
在时候在另一台主机上,就可以使用
docker
命令来管理此主机了。
已经可以管理了。
提示:这种配置法是极其危险的,因为远程管理不需要任何的身份验证,所以只用作实验环境,生产环境绝对不可使用。
5.6.2
通过TCP:2376端口+TLS方式实现docker远程服务
上一小节中,我们演示了,通过2375端口实现docker远程服务,但是这种方式风险较大,不建议使用。
这一小节中,我们介绍TCP:2376+TLS方式来实验安全地docker远程服务。
实验环境:
Server端:192.168.0.197
Client端:192.168.0.198
step 1
修改/etc/default/docker
文件
vim /etc/default/docker
在文件里输入以下内容:
DOCKER_OPTS=”-H 0.0.0.0:2376 –tlsverify –tlscacert=/etc/docker/ca.pem –tlscert=/etc/docker/server-cert.pem –tlskey=/etc/docker/server-key.pem”
Step 2
修改/usr/lib/systemd/system/docker.service
vim /usr/lib/systemd/system/docker.service
增加红框中的内容:
第一个红框是指定环境变量文件为/etc/default/docker(就是我们在上一步中修改的文件)
第二个红框是引用上一步中定义的那个OPTS
Step 3
重载服务配置,
并重新启动docker
服务
systemctl daemon-reload
systemctl restart docker
step 4
查看docker
服务状态和监听端口
systemctl status docker
红框内就是我们在第一步那个文件中定义的内容
netstat–tupln
这边我们发现端口2376已经起来了
Step 5
放通防火墙
firewall-cmd –add-port=2376/tcp –permanent
firewall-cmd –add-port=2376/tcp
step 6
生成TLS
相关证书和密钥:
此时虽然2376端口已经起来,但我们在client端,是无法访问docker的.
我们先要生存TLS的相关证书和密钥:
进入/etc/docker目录
cd /etc/docker
openssl genrsa -aes256 -out ca-key.pem 4096
#创建CA私钥
第一个红框内需要我们输入一个密码.
这个命令执行完以后会生成一个ca-key.pem文件,就是CA私钥
openssl req -new -x509 -days 1000 -key ca-key.pem -sha256 -subj “/CN=*” -out ca.pem
#用CA私钥创建一个CA证书
第一个红框处需要输入CA的密码(就是我们上一步中输入的那个密码)
这里会生成一个ca.pem文件 ,就是CA证书.
openssl genrsa -out server-key.pem 4096
#生成server证书私钥
openssl req -subj “/CN=*” -sha256 -new -key server-key.pem -out server.csr
#用server证书私钥生成一个证书请求.
openssl x509 -req -days 1000 -sha256 -in server.csr -CA ca.pem
-CAkey ca-key.pem
-CAcreateserial -out server-cert.pem
#用CA密钥、CA证书、server证书请求生成server自签证书
第一个红框处需要输入CA密钥的密码。
openssl genrsa -out key.pem 4096
#生成client端证书私钥
openssl req -subj “/CN=client” -new -key key.pem -out client.csr
#生成client端证书请求
echo extendedKeyUsage=clientAuth > extfile.cnf
#创建配置文件,告知服务端,服务器要开TLS验证,为了产生客户端自签证书’
openssl x509
–
req
–
days
1000-
sha256
–
in client
.
csr
–
CA ca
.
pem
–
CAkey ca
–
key
.
pem
–
CAcreateserial
–
out cert
.
pem
–
extfile extfile
.
cnf
#生成客户端自签证书
第一个红框处需要输入CA密钥的密码。
这些命令执行完以后,会在/etc/docker这个目录下生成几个CA文件
cert.pem:client自签证书
key.pem:client证书私钥
server-cert.pem:server自签证书
server-key.pem:server证书私钥
ca.pem:CA证书
ca-key.pem:CA私钥
以下是各个CA文件的依赖关系:
Step 7
重载服务配置,
并重新启动docker
服务
systemctl daemon-reload
systemctl restart docker
Step8:
配置client
端
在client
端主机的/root
下面创建一个名为“.docker
”的目录
mkdir /root/.docker
#
注意:目录名的第一个字段是一个” .”
将server
端刚刚生成的的,ca.pem,cert.pem,key.pem
这三个文件,拷贝到client
端的/root/.docker
下。
scp
root@192.168.0.197:/etc/docker/xxxx
/root/.docker
Step 9 在client端测试连接
docker -H 192.168.0.197:2376 –tls ps –a
#
执行
192.168.0.197
这个主机上的
docker ps –a
命令
执行成功,说明配置成功。