管理 docker
# 前言
本文主要介绍: 如何从零开始使用 Jpom 中的 Docker 管理
文中使用到的依赖环境版本仅供参考,实际使用中请根据业务情况来安装对应的版本
注意:本文采用一键安装同时基于 2.8.8 版本讲解,系统为 ubuntu
# 需要准备的环境
- Jpom 服务端(安装 jpom 需要 java 环境)
- 一个安装了 docker 的服务器(可以和安装 Jpom 服务端在同一个服务器)
# 安装服务端
# 提前创建好文件夹 并且切换到对应到文件夹执行命令
mkdir -p /home/jpom/server/
cd /home/jpom/server/
apt-get install -y wget && wget -O install.sh https://jpom.top/docs/install.sh && bash install.sh Server jdk
2
3
4
# 初始化服务端
# 添加超级管理账号
添加一个超级管理员账号,请妥善保管此账号同时请设置安全度较强的密码
# 开启账号 MFA
为了系统安全,强烈建议超级管理员账号开启 MFA 两步验证
# 安装 docker
# 这里使用了阿里云镜像,可以更新自己业务选择
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
2
# 状态管理
# 查看状态
systemctl status docker
# 停止
systemctl stop docker
# 启动
systemctl start docker
# 重启
systemctl daemon-reload && systemctl restart docker
2
3
4
5
6
7
8
# Docker TLS 证书 (非必须)
如果服务端所在端服务器已经安装 docker 在 2.8.15+ 版本会自动加载本地 docker 到 Jpom 中,这样就可以不用修改任何配置即可使用 jpom 管理本地 docker。即可忽略该步骤
安全提醒
如果 docker 服务全部在内网环境使用可以不配置 TLS 证书,忽略该步骤。如果端口暴露到公网很容易出现被攻击到情况请一定慎重开启端口访问限制
安全提醒
Jpom 使用 docker http 接口是实现和 docker 通讯和管理,但是默认没有开启任何认证这样使得 docker 极不安全,如果端口暴露到公网还容易出现挖矿情况
所以这里 我们强烈建议您使用 TLS 证书来连接 docker 提升安全性
这里提供一个快速生成证书到脚本示例:(使用中请一定修改脚本内的 IP 或者可能无法使用的情况奥)
#!/bin/bash
#
# -------------------------------------------------------------
# 自动创建 Docker TLS 证书
# wget https://gitee.com/dromara/Jpom/raw/master/script/docker-tls.sh
# curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# systemctl daemon-reload && systemctl restart docker
# -------------------------------------------------------------
# 以下是配置信息
# --[BEGIN]------------------------------
NOW_PATH=$(
cd "$(dirname "$0")" || exit
pwd
)"/"
echo "当前目录:${NOW_PATH} 证书文件将保存在此文件夹下"
read -p "请输入证书使用的 IP 地址或者 HOST: " HOST
#
echo "您输入的是:${HOST} 证书只能在这个 IP 或者 HOST 下使用,证书密码和输入的一致"
# --[INIT PARAMETER]------------------------------
PASSWORD="$HOST"
COUNTRY="CN"
STATE="$HOST"
CITY="$HOST"
ORGANIZATION="$HOST"
ORGANIZATIONAL_UNIT="Dev"
COMMON_NAME="$HOST"
EMAIL="$HOST@docker-tls.com"
# --[END]--
# Generate CA key
openssl genrsa -aes256 -passout "pass:$PASSWORD" -out "ca-key.pem" 4096
# Generate CA
openssl req -new -x509 -days 365 -key "ca-key.pem" -sha256 -out "ca.pem" -passin "pass:$PASSWORD" -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$COMMON_NAME/emailAddress=$EMAIL"
# Generate Server key
openssl genrsa -out "server-key.pem" 4096
# Generate Server Certs.
openssl req -subj "/CN=$COMMON_NAME" -sha256 -new -key "server-key.pem" -out server.csr
rm -f extfile.cnf
echo "subjectAltName = DNS.1:$HOST,IP.1:127.0.0.1,IP.2:$HOST" >>extfile.cnf
echo "extendedKeyUsage = serverAuth" >>extfile.cnf
openssl x509 -req -days 365 -sha256 -in server.csr -passin "pass:$PASSWORD" -CA "ca.pem" -CAkey "ca-key.pem" -CAcreateserial -out "server-cert.pem" -extfile extfile.cnf
# Generate Client Certs.
rm -f extfile.cnf
openssl genrsa -out "key.pem" 4096
openssl req -subj '/CN=client' -new -key "key.pem" -out client.csr
echo "extendedKeyUsage = clientAuth" >>extfile.cnf
openssl x509 -req -days 365 -sha256 -in client.csr -passin "pass:$PASSWORD" -CA "ca.pem" -CAkey "ca-key.pem" -CAcreateserial -out "cert.pem" -extfile extfile.cnf
rm -f client.csr server.csr ca.srl extfile.cnf
# check
if [ -f "${NOW_PATH}key.pem" -a -f "${NOW_PATH}ca.pem" -a -f "${NOW_PATH}ca-key.pem" -a -f "${NOW_PATH}server-cert.pem" -a -f "${NOW_PATH}server-key.pem" ]; then
echo "证书生成完成"
echo "客户端使用文件:key.pem ca.pem cert.pem"
echo "Docker 端使用文件:ca.pem server-cert.pem server-key.pem"
echo "Docker 推荐配置内容:-H tcp://0.0.0.0:2375 --tlsverify --tlscacert=${NOW_PATH}ca.pem --tlscert=${NOW_PATH}server-cert.pem --tlskey=${NOW_PATH}server-key.pem"
else
echo "证书生成不完成,请检查配置和根据错误日志排查"
fi
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
同时将生成到证书下载到本地 保存使用
证书示例:
# 配置 docker
# 查看 docker.service 路径
systemctl status docker
# 配置 tcp + tls (非必须)
如果服务端所在端服务器已经安装 docker 在 2.8.15+ 版本会自动加载本地 docker 到 Jpom 中,这样就可以不用修改任何配置即可使用 jpom 管理本地 docker。即可忽略该步骤
vim /lib/systemd/system/docker.service
ExecStart 需要添加内容
--tlsverify --tlscacert=/home/docker/tls-ca/ca.pem --tlscert=/home/docker/tls-ca/server-cert.pem --tlskey=/home/docker/tls-ca/server-key.pem -H tcp://0.0.0.0:2375
# 配置示例
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --tlsverify --tlscacert=/home/docker/tls-ca/ca.pem --tlscert=/home/docker/tls-ca/server-cert.pem --tlskey=/home/docker/tls-ca/server-key.pem -H tcp://0.0.0.0:2375
2
如果不开启 tls 验证配置示例:
# 配置示例
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
2
部分情况需要删除:-H fd://
# 重启 docker
配置完成后需要重启 才能生效
systemctl daemon-reload && systemctl restart docker
# 添加 docker
注意这里 host 为:tcp://127.0.0.1:2375
这里因为连接本地 docker 所有使用 127.0.0.1 实际中请更换
证书为压缩文件,压缩文件需要包含生成证书文件:key.pem
ca.pem
cert.pem
# Jpom 中使用
docker 相关更多正在努力开发中💪 敬请期待