Intellij IDEA 集成 Docker 发布
不使用证书安全验证
1、Docker开启远程访问,注意端口不要用默认的,防止被攻击
[root@localhost ~]# vi /usr/lib/systemd/system/docker.service
2、开启远程访问
# 修改该行-注意端口不要用默认的 2375,这里用的是12375
# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:12375
开放端口
#防火墙开放端口
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=12375/tcp
[root@localhost ~]# firewall-cmd --reload
#重新加载配置文件
[root@localhost ~]# systemctl daemon-reload
#重启服务
[root@localhost ~]# systemctl restart docker.service
#查看端口是否开启
[root@localhost ~]# netstat -nlpt
#直接curl看是否生效
[root@localhost ~]# curl http://127.0.0.1:12375/info
开放安全组
idea连接docker
通过数字签名证书连接
1、创建证书
创建目录存放证书文件
mkdir -pv /home/docker-cert
cd /home/docker-cert
2、创建ca-key.pem文件,输入密码
openssl genrsa -aes256 -out ca-key.pem 4096
3、创建ca.pem,依次输入密码、国家、省、市、组织名称等(除了密码外其他的可以直接回车跳过)
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
4、生成server-key.pem
openssl genrsa -out server-key.pem 4096
5、生成server.csr,(把下面的IP换成你自己服务器外网的IP或者域名)
openssl req -subj "/CN=123.123.123.123" -sha256 -new -key server-key.pem -out server.csr
或者域名
openssl req -subj "/CN=www.example.com" -sha256 -new -key server-key.pem -out server.csr
这个后面看你是用ip还是域名连接docker服务
6、配置白名单
0.0.0.0表示所有ip都可以连接。(这里需要注意,虽然0.0.0.0可以匹配任意,但是仍需要配置你的外网ip和127.0.0.1,否则客户端会连接不上)
echo subjectAltName = IP:0.0.0.0,IP:123.123.123.123,IP:127.0.0.1 >> extfile.cnf
或者域名
echo subjectAltName = DNS:www.example.com,IP:123.123.123.123,IP:127.0.0.1 >> extfile.cnf
7、将Docker守护程序密钥的扩展使用属性设置为仅用于服务器身份验证
echo extendedKeyUsage = serverAuth >> extfile.cnf
8、输入之前设置的密码,生成签名证书
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out server-cert.pem -extfile extfile.cnf
9、生成供客户端发起远程访问时使用的key.pem
openssl genrsa -out key.pem 4096
10、生成client.csr(把下面的IP换成你自己服务器外网的IP或者域名)
openssl req -subj "/CN=123.123.123.123" -new -key key.pem -out client.csr
11、创建扩展配置文件,把密钥设置为客户端身份验证用
echo extendedKeyUsage = clientAuth > extfile-client.cnf
12、生成cert.pem,输入前面设置的密码,生成签名证书
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out cert.pem -extfile extfile-client.cnf
13、删除不需要的配置文件和两个证书的签名请求
rm -v client.csr server.csr extfile.cnf extfile-client.cnf
一律输入y,按回车就好了
14、为了防止公、私钥文件被更改以及被其他用户查看,修改其权限为所有者只读
chmod -v 0400 ca-key.pem key.pem server-key.pem
chmod -v 0444 ca.pem server-cert.pem cert.pem
15、将证书放在主机目录的指定位置,方便之后修改Docker的配置文件
cp server-*.pem /etc/docker/
cp ca.pem /etc/docker/
16、修改Docker配置
vim /lib/systemd/system/docker.service
将ExecStart=/usr/bin/dockerd修改成:
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H tcp://0.0.0.0:12375 -H unix:///var/run/docker.sock
17、重新加载daemon并重启docker
systemctl daemon-reload
systemctl restart docker
如果这里重新启动失败,检查下你的docker配置文件是否正确配置
放开12375端口
18、idea连接
下载证书到本地目录
ca.pem
ca-key.pem
cert.pem
key.pem
注意这个地方由原来的tcp://变成了https:// 记得替换,否则会报错
Spring Boot服务docker部署
pom.xml添加
<properties>
<docker.image.prefix>seeyou</docker.image.prefix>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- Docker maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory></dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- Docker maven plugin -->
</plugins>
</build>
编写dockerfile
# 基础镜像
FROM java:8
#作者信息
MAINTAINER seeyou 705221483@qq.com
#申明一个环境变量
ENV HOME_PATH /root/zongheng/server
#指定容器启动时,执行命令会在该目录下执行
WORKDIR $HOME_PATH
VOLUME /tmp
#应用构建成功后的jar复制到容器指定目录下
ADD target/ticket-message-1.0-SNAPSHOT.jar $HOME_PATH/app.jar
RUN bash -c 'touch /ticket-message-1.0-SNAPSHOT.jar'
#修改Docker时区-否则里面的时间会慢8小时
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
#指定容器内部端口
EXPOSE 8024
#容器启动时执行的命令
ENTRYPOINT ["java","-jar","app.jar"]
Environment variables 参数的值不能带“”双引号
命令解释:
Image tag:指定镜像名称和tag,镜像名称为docker-demo,tag为1.1
Bind ports:绑定宿主机端口到容器内部端口。格式为[宿主机端口]:[容器内部端口]
Bind mounts:将宿主机目录挂到到容器内部目录中。格式为[宿主机目录]:[容器内部目录]。这个Spring Boot项目会将日志打印在容器/home/developer/app/logs/目录下,将宿主机目录挂载到容器内部目录后,那么日志就会持久化容器外部的宿主机目录中。
选到这个docker运行即可,当然在运行前 需要正常的mvn clean package,或者也可在上面的配置界面的before launch
可以看到已经部署成功了
服务器里镜像也创建了
评论区