一、Docker 服务端配置 1. 配置 Docker 远程连接端口 首先,新建或修改 /etc/systemd/system/docker.service.d/override.conf
文件,确保其内容如下:
1 2 3 4 [Service] ExecStart= ExecStart=/usr/bin/dockerd
接着,在 /etc/docker/daemon.json
文件中(如果没有则新建),添加以下内容。请使用您自己的镜像地址,不必强制使用示例中的地址:
1 2 3 4 5 6 7 { "registry-mirrors" : ["https://2v6jvius.mirror.aliyuncs.com" ], "hosts" : [ "unix:///var/run/docker.sock" , "tcp://0.0.0.0:2375" ] }
然后重启服务:
1 2 systemctl daemon-reload systemctl restart docker
通过以下命令检查端口是否成功开放:
1 netstat -anp | grep 2375
如果看到类似以下的输出,说明端口开放成功:
接下来,输入以下命令以确认 Docker 端口暴露成功:
1 docker -H 192.168.56.10 ps
若能显示 Docker 的基本信息,说明端口暴露成功。
2. Docker 安全连接 Docker 开放端口后,只要知道 IP 和端口号就可以随意管理镜像和容器,这样的安全性很差。在生成环境中,建议使用证书来安全地连接和管理 Docker。
注意: 一定需要切换到 root 用户执行以下步骤。
创建脚本
新建脚本 dockerAuth.sh
,将以下内容复制到脚本中。记得修改 IP 地址和密码(随便填写一个,不要使用中文),以及目录 dir
为 /root/docker
。
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 37 38 39 40 41 42 43 44 45 46 47 48 # !/bin/sh ip=服务器ip password=证书密码 dir=/root/docker if [ ! -d "$dir" ]; then echo "" echo "$dir 不存在,将创建" echo "" mkdir -p $dir else echo "" echo "$dir 已存在,将删除并重新创建" echo "" rm -rf $dir mkdir -p $dir fi cd $dir # 创建根证书RSA私钥 openssl genrsa -aes256 -passout pass:$password -out ca-key.pem 4096 # 创建CA证书 openssl req -new -x509 -days 365 -key ca-key.pem -passin pass:$password -sha256 -out ca.pem -subj "/C=NL/ST=./L=./O=./CN=$ip" # 创建服务端私钥 openssl genrsa -out server-key.pem 4096 # 创建服务端签名请求证书文件 openssl req -subj "/CN=$ip" -sha256 -new -key server-key.pem -out server.csr echo subjectAltName = IP:$ip,IP:0.0.0.0 >> extfile.cnf echo extendedKeyUsage = serverAuth >> extfile.cnf # 创建签名生效的服务端证书文件 openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -passin "pass:$password" -CAcreateserial -out server-cert.pem -extfile 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 echo extendedKeyUsage = clientAuth > extfile-client.cnf # 创建签名生效的客户端证书文件 openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -passin "pass:$password" -CAcreateserial -out cert.pem -extfile extfile-client.cnf # 删除多余文件 rm -f -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
赋予脚本执行权限
执行脚本
配置 Docker
修改 /etc/docker/daemon.json
文件,将以下配置添加到文件中:
1 2 3 4 5 6 7 { "tls": true, "tlsverify": true, "tlscacert": "/root/docker/ca.pem", "tlscert": "/root/docker/server-cert.pem", "tlskey": "/root/docker/server-key.pem" }
重启 Docker
1 2 systemctl daemon-reload systemctl restart docker
将证书文件复制到 Windows
将 /root/docker
目录下的证书文件夹复制到 Windows 机器上。
测试效果
1 https://192.168.56.10:2375/info
1 https://192.168.56.10:2375/info --cert /root/docker/cert.pem --key /root/docker/key.pem --cacert /root/docker/ca.pem
二、客户端连接 Docker 加密:
无加密:改为tcp://192.168.56.10:2375 即可
连接成功:
三、操作镜像和容器 1. Docker Image 方式 在 IDEA 的设置中(File -> Settings -> Docker),新建连接:
镜像拉取
注意,写 Docker 镜像地址时,需要在镜像名称后面指定版本号。如果不指定,IDEA 会默认使用 latest
:
目前大部分镜像加速已经不可用。需要去找合适的加速地址。docker在国内已经被墙了。
容器创建与运行
新的 IDEA 版本可能需要额外的参数配置:
创建成功后,可以在服务器上查看新创建的容器:
进行容器的重启、停止和删除等操作:
2. Dockerfile 方式 有关 Dockerfile 的介绍,请参考这篇文章:Dockerfile 介绍
创建一个测试项目:
创建 Dockerfile:
1 2 3 4 5 6 7 8 9 10 11 12 FROM dp-imoyt.onrender.com/docker.io/openjdk:8 ADD target/mall-tiny-1.0.0-SNAPSHOT.jar /mall-tiny-1.0.0-SNAPSHOT.jar RUN echo "Asia/Shanghai" > /etc/timezone EXPOSE 8080 ENTRYPOINT ["java" , "-jar" ,"/mall-tiny-1.0.0-SNAPSHOT.jar" ] MAINTAINER imoyt
1 clean package -U -DskipTests
在”Run Maven Goal”中输入 clean package -U -DskipTests
,表示每次构建镜像之前都会清理并重新编译构建
成功构建并部署镜像后,可以在 Docker 上运行容器:
在浏览器访问地址 http://192.168.56.10:8001/hello
3. Docker-Compose 方式 关于 Docker-Compose 的介绍,请参考这篇文章:Docker-Compose 介绍 。主要功能是:通过 docker-compose.yml 文件编排运行容器
。