Docker安装脚本与换源
官方脚本
1 | curl -fsSL https://get.docker.com | bash -s docker |
官方脚本+阿里云镜像
1 | curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun |
官方脚本镜像
适合连接不上get.docker.com时使用
1 | curl -fsSL https://bash.foreverlink.love/dockerinstall.sh | bash -s docker --mirror Aliyun |
清华源全镜像
1 | export DOWNLOAD_URL="https://mirrors.tuna.tsinghua.edu.cn/docker-ce" && curl -fsSL https://raw.githubusercontent.com/docker/docker-install/master/install.sh | sh |
增加权限
1 | su root |
换源
Docker 镜像加速站集合 - License server
1 | sudo tee /etc/docker/daemon.json <<EOF |
portainer安装
Home | Portainer Documentation
1 | # 如果计划使用https |
访问ip:9000页面后 设置账号 admin/adminadminadmin
如果页面提示以下信息,则按提示信息重启portainer容器即可:
1 | # Your Portainer instance timed out for security purposes. To re-enable your Portainer instance, you will need to restart Portainer. |
docker远程连接
开启docker远程连接
检查 Docker 的 systemd 配置文件(
/lib/systemd/system/docker.service
),确保ExecStart
中没有-H
参数。如果有,将其移除。1
2
3
4sudo vim /lib/systemd/system/docker.service
# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
# 改为如下
ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock编辑
/etc/docker/daemon.json
:1
2
3{
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}重新加载 systemd 配置并重启 Docker:
1
sudo systemctl daemon-reload; sudo systemctl restart docker
IDEA连接
- 在Index of win/static/stable/x86_64/中选择最新的 docker,解压到任意目录
- 进入
File > Settings > Build, Execution, Deployment > Docker
。选择docker.exe解压的位置,点击确定 - 点击
+
添加新连接,选择TCP socket
。 - 输入服务器地址和端口(如
tcp://your-server-ip:2375
)。 - 测试连接,成功后保存。
使用 TLS 加密连接
通过使用 TLS(传输层安全协议)加密连接,可以防止数据在传输过程中被窃取或篡改,同时也能对客户端和服务器进行身份验证。
创建证书目录
1
2mkdir -p ~/docker-certs
cd ~/docker-certs一台机器上生成CA 私钥和CA 证书
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 生成 CA 私钥:ca-key.pem
openssl genrsa -aes256 -out ca-key.pem 4096
# 设置一个密码来保护私钥: 123456
# 生成 CA 证书:
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
# 输入之前设置的密码。123456
# 填写 CA 的相关信息(如国家、组织等)。
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:SHANGHAI
Locality Name (eg, city) []:SHANGHAI
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Personal
Organizational Unit Name (eg, section) []:Personal Use
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:共享 CA
注意:ca-key.pem 是 CA 的私钥,必须严格保护,不能泄露。
1
2
3
4
5# 将生成的 ca.pem 和 ca-key.pem 文件安全地分发给其他 4 台机器。
scp ~/docker-certs/* sun@192.168.61.111:~/docker-certs
scp ~/docker-certs/* sun@192.168.61.112:~/docker-certs
scp ~/docker-certs/* sun@192.168.61.113:~/docker-certs
scp ~/docker-certs/* sun@192.168.61.114:~/docker-certs生成服务器证书
1
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# 生成服务器私钥:
openssl genrsa -out server-key.pem 4096
# 生成证书签名请求(CSR):将 <服务器IP或域名> 替换为服务器的实际 IP 或域名。
# openssl req -subj "/CN=<服务器IP或域名>" -sha256 -new -key server-key.pem -out server.csr
# 创建扩展配置文件(extfile.cnf):将 <服务器域名> 和 <服务器IP> 替换为实际值。
# echo subjectAltName = DNS:<服务器域名>,IP:<服务器IP>,IP:127.0.0.1 > extfile.cnf
# echo extendedKeyUsage = serverAuth >> extfile.cnf
openssl req -subj "/CN=192.168.61.110" -sha256 -new -key server-key.pem -out server.csr
echo subjectAltName = IP:192.168.61.110,IP:127.0.0.1 > extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
openssl req -subj "/CN=192.168.61.111" -sha256 -new -key server-key.pem -out server.csr
echo subjectAltName = DNS:node01,IP:192.168.61.111,IP:127.0.0.1 > extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
openssl req -subj "/CN=192.168.61.112" -sha256 -new -key server-key.pem -out server.csr
echo subjectAltName = DNS:node02,IP:192.168.61.112,IP:127.0.0.1 > extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
openssl req -subj "/CN=192.168.61.113" -sha256 -new -key server-key.pem -out server.csr
echo subjectAltName = DNS:node03,IP:192.168.61.113,IP:127.0.0.1 > extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
openssl req -subj "/CN=192.168.61.114" -sha256 -new -key server-key.pem -out server.csr
echo subjectAltName = DNS:node04,IP:192.168.61.114,IP:127.0.0.1 > extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
# 在每台机器上使用共享的 CA 签名服务器证书:
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out server-cert.pem -extfile extfile.cnf
# 输入ca密码
# 删除不必要的文件:
rm -v server.csr extfile.cnf生成客户端证书
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 生成客户端私钥:
openssl genrsa -out key.pem 4096
# 生成证书签名请求(CSR):
openssl req -subj "/CN=client" -new -key key.pem -out client.csr
# 创建扩展配置文件(extfile-client.cnf):
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
# 删除不必要的文件:
rm -v client.csr server.csr extfile.cnf extfile-client.cnf设置文件权限
1
2chmod -v 0400 ca-key.pem key.pem server-key.pem
chmod -v 0444 ca.pem server-cert.pem cert.pem
配置 Docker 使用 TLS
将生成的证书文件复制到 Docker 的配置目录:
1
2sudo cp ~/docker-certs/{ca.pem,server-cert.pem,server-key.pem} /etc/docker/
sudo chown -R root:root /etc/docker编辑 Docker 的配置文件
/etc/docker/daemon.json
,添加以下内容:1
2
3
4
5
6
7{
"tls": true,
"tlscacert": "/etc/docker/ca.pem",
"tlscert": "/etc/docker/server-cert.pem",
"tlskey": "/etc/docker/server-key.pem",
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"]
}重启 Docker 服务以应用配置:
1
sudo systemctl daemon-reload; sudo systemctl restart docker
客户端配置,将以下文件从服务器复制到客户端机器:
ca.pem
cert.pem
key.pem
生成证书和密钥脚本
hostname -I
命令返回的是服务器上所有网络接口的 IP 地址,多个网卡必须改为服务器真实域名或IP
1 | vim generate_docker_tls.sh |
赋予执行权限:在终端中执行以下命令,为脚本添加执行权限:
1
2chmod +x generate_docker_tls.sh
sudo ./generate_docker_tls.sh查看证书
1
2
3
4
5
6
7
8
9ll /etc/docker
-r-------- 1 root root 3.4K 2月 6日 03:15 ca-key.pem
-r--r--r-- 1 root root 2.2K 2月 6日 03:15 ca.pem
-rw-r--r-- 1 root root 41 2月 6日 03:16 ca.srl
-r--r--r-- 1 root root 2.0K 2月 6日 03:16 cert.pem
-rw-r--r-- 1 root root 51 2月 4日 23:47 daemon.json
-r-------- 1 root root 3.2K 2月 6日 03:16 key.pem
-r--r--r-- 1 root root 2.1K 2月 6日 03:15 server-cert.pe这些文件是 Docker TLS 认证机制正常工作所必需的:
- **
ca-key.pem
**:CA(证书颁发机构)的私钥文件,用于签署服务器和客户端证书。它使用 AES256 加密,权限设置为只有所有者可读写(-r--------
),以保证安全性。 - **
ca.pem
**:CA 的证书文件,客户端和服务器使用它来验证对方证书的有效性。 - **
server-cert.pem
**:服务器的证书文件,用于向客户端证明服务器的身份。 - **
server-key.pem
**:服务器的私钥文件,与server-cert.pem
配对使用,用于加密和解密通信数据。 - **
cert.pem
**:客户端的证书文件,用于向服务器证明客户端的身份。 - **
key.pem
**:客户端的私钥文件,与cert.pem
配对使用,用于加密和解密通信数据。
- **
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 凉月の博客!
评论