深色模式
Docker 安装与配置
Docker 安装
Debian系统
使用官方脚本,一键安装Docker:
sh
curl -fsSL https://get.docker.com | bash -s docker
使用镜像加速安装:
sh
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
查看 Docker 版本:
sh
docker --version
# Docker version 20.10.14, build a224086
Docker 镜像加速
在 /etc/docker/daemon.json
中写入如下内容(如果文件不存在请新建该文件):
(目前,腾讯云的镜像最快)
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
重启服务后生效:
sh
systemctl daemon-reload && systemctl restart docker
查看已配置的镜像加速:
sh
docker info
# ...
# Registry Mirrors:
# https://hub-mirror.c.163.com/
# https://mirror.baidubce.com/
# ...
在输出信息中查找Registry Mirrors
部分。
Docker 服务 tcp 访问(不安全)
此方式不安全,仅作为临时测试使用,千万不能放到公网服务器上,不然很可能会被攻击。
配置步骤,简单:
先修改Docker服务的配置文件docker.service
,可以通过systemctl status docker
找到docker.service
。
找到ExecStart=/usr/bin/dockerd-current
这一行,添加参数-H
,-H
的作用是配置Docker服务接收命令的通道。
sh
/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
重启Docker
sh
systemctl daemon-reload && systemctl restart docker
远程访问
sh
docker -H tcp://remoteHost:2375 version
Docker 服务 ssl(tls) 访问(安全)
先生成 ssl 通信所需要的密钥与证书,再配置到远程的 Docker 服务端,与本地的 Docker 客户端,就可以在本地通过命令行直接访问远程的 Docker 服务了。
生成密钥与证书
通过 openssl 生成密钥与证书,常见Linux系统一般自带openssl。
要生成的目标文件,一共6个(在此之前,最好对数字证书相关知识有所了解):
- CA 密钥
ca-key.pem
- CA 证书
ca.pem
- Docker server 密钥
server-key.pem
- Docker server 证书
server-cert.pem
- Docker client 密钥
key.pem
- Docker client 证书
cert.pem
CA 密钥与 CA 证书
注意,$HOST是服务器的 DNS name
bash
# 生成 CA 密钥 ca-key.pem
$ openssl genrsa -aes256 -out ca-key.pem 4096
Generating RSA private key, 4096 bit long modulus
..............................................................................++
........++
e is 65537 (0x10001)
Enter pass phrase for ca-key.pem:
Verifying - Enter pass phrase for ca-key.pem:
# 生成 CA 证书 ca.pem,注意,在填写 Common Name 的时候,$HOST是服务器的 DNS name。
$ openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem
Enter pass phrase for ca-key.pem:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:Queensland
Locality Name (eg, city) []:Brisbane
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Docker Inc
Organizational Unit Name (eg, section) []:Sales
Common Name (e.g. server FQDN or YOUR name) []:$HOST
至此,我们生成了:
CA 密钥 ca-key.pem
CA 证书 ca.pem
Docker server 密钥与Docker server 证书
注意,$HOST是服务器的 DNS name
sh
# 生成 Docker server 密钥 server-key.pem
$ openssl genrsa -out server-key.pem 4096
Generating RSA private key, 4096 bit long modulus
.....................................................................++
.................................................................................................++
e is 65537 (0x10001)
# 生成 Docker server 证书申请文件 server.csr
$ openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
sh
# 指定 TLS 连接的 DNS name 和 IP
$ echo subjectAltName = DNS:$HOST,IP:10.10.10.20,IP:127.0.0.1 >> extfile.cnf
sh
#
$ echo extendedKeyUsage = serverAuth >> extfile.cnf
sh
# 使用 CA 签发 Docker server 证书 server-cert.pem
$ openssl x509 -req -days 3650 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out server-cert.pem -extfile extfile.cnf
至此,我们生成了:
Docker server 密钥 server-key.pem
Docker server 证书 server-cert.pem
Docker client 密钥与Docker client 证书
这里与上面类似
sh
# 生成 Docker client 密钥 key.pem
$ openssl genrsa -out key.pem 4096
sh
# 生成 Docker client 证书申请文件 client.csr
$ openssl req -subj '/CN=client' -new -key key.pem -out client.csr
sh
#
$ echo extendedKeyUsage = clientAuth > extfile-client.cnf
sh
# 使用 CA 签发 Docker client 证书 cert.pem
$ openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out cert.pem -extfile extfile-client.cnf
至此,我们生成了:
Docker client 密钥 key.pem
Docker client 证书 cert.pem
做一些清理工作
sh
# 删除不需要的文件
$ rm -v client.csr server.csr extfile.cnf extfile-client.cnf
# 修改文件权限
$ chmod -v 0400 ca-key.pem key.pem server-key.pem
$ chmod -v 0444 ca.pem server-cert.pem cert.pem
参考:Protect the Docker daemon socket
Docker server 部署 ssl 证书
tls是ssl升级版,但是ssl是习惯叫法
在/root/.docker
中,存放3个文件:
- CA 证书
ca.pem
- Docker server 密钥
server-key.pem
- Docker server 证书
server-cert.pem
在docker.service
中指定上面3个文件的位置:
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/root/.docker/ca.pem --tlscert=/root/.docker/server-cert.pem \
--tlskey=/root/.docker/server-key.pem -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock
重启服务后生效
sh
systemctl daemon-reload && systemctl restart docker
Docker client 使用 ssl 连接
这里本地客户端机器是Mac,并且已安装好Docker。如果是Windows系统,密钥存放路径,以及环境变量的配置会有一点区别。
从服务器下载证书文件到本地客户端机器,并保存在~/.docker
中:
- CA 证书
ca.pem
- Docker client 密钥
key.pem
- Docker client 证书
cert.pem
在~/.bash_profile
中设置docker相关的环境变量:
注意,$HOST是服务器的 DNS name
sh
# dcoker
export DOCKER_HOST=tcp://$HOST:2376
export DOCKER_TLS_VERIFY=1
现在可以愉快地连接远程 Docker 服务了:
sh
docker version
使用 IDEA 连接远程 Docker 服务
安装 Docker 插件
搜索Docker插件,并安装:
配置远程主机上的 Docker 服务 ssl(tls) 访问
参考上一节配置方法。
IDEA 连接远程 Docker 服务
新建配置:
选项配置的类型,这里选择 Docker-compose(如果选择 Dockerfile,配置选项也是类似的):
指定此配置的名称(名称随便取),选择要连接的Docker服务:
配置Docker连接,这里选 ssh 方式,安全性最高:
ssh连接的配置:
保存,然后点击run就可以起飞了: