Idea中docker插件使用
# 直连docker后台
centos7下,docker 启动文件归于systemd管理,修改配置文件/usr/lib/systemd/system/docker.service
, 在ExecStart末尾添加如下内容,允许客户端
远程连接docker的2375端口。
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
重启docker
systemctl daemon-reload
systemctl restart docker
2
使用docker客户端远程连接docker
docker -H tcp://192.168.1.128:2375 info
# 通过tls方式连接docker
我们知道,直连方式非常不安全,任何人知道ip都可以连接到docker daemon,所以我们需要通过 tls 保护 docker daemon socket
执行下面脚本生成证书
# 服务端配置
生成docker tls 证书脚本
cat > docker-tls-generate.sh <<'EOF'
#!/bin/bash
HOST=$(hostname)
hosts="DNS:$HOST,IP:192.168.1.128,IP:127.0.0.1"
# 创建 ca 私钥
openssl genrsa -out ca-key.pem 4096
# 创建 ca 自签名证书
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem -subj "/C=Cn/ST=GD/L=SZ/O=Ltd/OU=development/CN=CA for Docker"
# 创建 server 私钥
openssl genrsa -out server-key.pem 4096
# 创建 server 证书请求文件
openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
# x509v3 扩展配置, 声明该证书用于服务端认证和服务端证书绑定的域名或IP,在非指定域名或IP服务器上安装该证书无效,会认证失败
echo subjectAltName = $hosts >> extfile-server.cnf
echo extendedKeyUsage = serverAuth >> extfile-server.cnf
# 创建 server 证书, 用 ca 证书对该证书签名
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile-server.cnf
# 创建docker 客户端私钥
openssl genrsa -out key.pem 4096
# 创建docker 客户端 证书请求文件
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
# x509v3 扩展配置, 申明创建该证书用于客户端认证
echo extendedKeyUsage = clientAuth > extfile-client.cnf
# 生成客户端证书
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf
EOF
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
chmod +x docker-tls-generate.sh
./docker-tls-generate.sh
2
3
docker官方文档推荐使用 $HOST 主机名作为 服务端证书的CN (Common Name
), 实测下来不用服务器名做 CN 也是可以的。
修改docker启动文件,指定 docker 启动时开始 tls 连接, 并且需要指定服务端证书文件,包括 ca.pem、server-cert.pem、server-key.pem
;
centos7下,启动文件归于systemd管理,修改配置文件/usr/lib/systemd/system/docker.service
, 将ExecStart修改为如下内容:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock \
--tlsverify --tlscacert=/root/docker-tls/ca.pem --tlscert=/root/docker-tls/server-cert.pem \
--tlskey=/root/docker-tls/server-key.pem -H tcp://192.168.1.128:2376
2
3
/root/docker-tls/ 修改为证书存在的目录下
重启 docker
systemctl daemon-reload
systemctl restart docker
2
使用 客户端命令测试 tls 是否配置成功
docker --tlsverify \
--tlscacert=/root/docker-tls/ca.pem \
--tlscert=/root/docker-tls/cert.pem \
--tlskey=/root/docker-tls/key.pem \
-H=192.168.1.128:2376 version
2
3
4
5
如果输出正常,则说明服务端配置成功了
docker 默认端口监听在 2375上, docker tls 默认监听在 2376上。
docker 默认是不开放对外监听的,只能通过本地 sock 监听
cat创建文件小插曲
运行下面命令创建 newfile 文件
cat > newfile <<EOF
this is newfile
my name is $name
EOF
2
3
4
cat 查看 发现 $name 变量消失不见了
原因是我们没有对变量赋值,然后参数被扩展了,解决办法是用单引号把EOF文件结束符引起来,就可以抑制变量扩展。
cat > newfile <<'EOF'
this is newfile
my name is $name
EOF
2
3
4
# docker 客户端配置
拷贝 ca.pem、key.pem、cert.pem
三个文件, 用于客户端连接, 将其存放在指定目录下。
idea 插件中指定证书目录中必须存在这三个文件,并且必须同名,否则docker插件识别不到
在idea的插件市场中安装docker插件
在idea打开插件编辑配置界面
配置插件
- 添加docker配置项
- 指定从dockerfile中构建镜像文件
- 指定docker host 远程连接配置
- 配置dockerfile文件所在位置,构建上下文和构建镜像的名称和标签
其中 dockerfile 远程连接配置如下
- 指定远程连接地址,此处使用 https
- 指定证书存放目录,docker插件会自动读取证书
最后,只需像启动idea项目一样启动插件集合自动编译构建镜像到服务后台了。