docker-compose 发布 spring cloud
Posted 正怒月神
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker-compose 发布 spring cloud相关的知识,希望对你有一定的参考价值。
部署流程
打开项目总pom.xml文件
找到<dockerHost>节点,把IP地址修改成要上传镜像的IP地址
如 <dockerHost>http://192.168.1.250:2375</dockerHost>
如果要指定上传的签名文件,修改签名文件路径(所有证书在doc/deploy/cert/目录下)
<dockerCertPath>d:\\kintechcerts</dockerCertPath>
找到<baseImage>这里修改成服务器上的基础镜像的名称后面跟TAG号
如<baseImage>mycentoscn:7.5.1804</baseImage>
修改配置中心数据(修改mysql数据库和Redis链接)
修改springColud.config项目下/src/man/resurces/config/config-prod.yml文件
Datasource数据的地址
Redis的地址
kintechWebAPIURL内部访问的IP地址(也如果在同一台服务器直接用服务器内部IP也可以)
recipients 系统发邮件的邮箱地址
在本机配置环境变量(如果已配置,不要再重新配置)
新建系统变量名MAVEN (请根据实际maven的安装目录)
值C:\\Program Files\\JetBrains\\IntelliJ IDEA 2017.1.3\\plugins\\maven\\lib\\maven3\\bin
新建系统变量JAVA_HOME (请根据实际java的安装目录,只要到jdk目录不要到bin目录)
值C:\\Program Files\\Java\\jdk1.8.0_60
再在系统变量Path变量后面添加%JAVA_HOME%;%MAVEN%
1停止服务(如非首次部署)
登录远程服务器,进入docker目录
cd docker
(新增)备份所有镜像为文件(运行shell文件,会删除老的镜像备份,再备份所有现在正在使用的镜像为tar文件),命令如下
./kpsimagesbak.sh
停止服务
docker-compose stop
确定服务是否停止
移除所有容器
docker rm -f $(docker ps -aq)
(查看所有容器docker ps -a)
移除所有镜象
docker rmi -f $(docker images -aq)
(删除一个镜像docker rmi -f IMAGE ID)
查看镜象是否移除
docker images
导入父镜象
docker load -i mycentoscn.tar
docker images
2 生成并上传镜像
打开项目doc/deploy目录,在资源管理器打开
重命名deploy.batsh为deploy.bat 然后双击执行 按y开始
@echo off
echo 是否开始编译并上传镜像?
echo [y]开始编译并上传镜像 [u]开始编译并自动上传所有镜像 [n]退出
set /p key=
if /i "%key%"=="n" exit
:next
setlocal
set "deploy_dir=%cd%"
echo "%deploy_dir%"
cd ..
cd ..
set "parent_dir=%cd%"
echo "%parent_dir%"
cd %deploy_dir%
echo "maven compile starting"
call mvn -f %parent_dir% clean install
echo "maven compile completed"
if /i "%key%"=="u" goto all
echo 是否开始上传镜像?
echo [a]上传所有 [b]上传除registry,config [c]上传除registry,config,zuul [1]上传registry [2]上传config [3]上传zuul [4]上传webUI [5]上传APICommon [6]上传APIPO [7]上传APISYS [8]上传APIWMS [9]上传APIEQ [10]上传APIScan [11]上传webAPIScreen
set /p n=
if /i "%n%"=="a" goto all
if /i "%n%"=="b" goto b
if /i "%n%"=="c" goto c
if /i "%n%"=="1" goto registry
if /i "%n%"=="2" goto config
if /i "%n%"=="3" goto zuul
if /i "%n%"=="4" goto webUI
if /i "%n%"=="5" goto common
if /i "%n%"=="6" goto po
if /i "%n%"=="7" goto sys
if /i "%n%"=="8" goto wms
if /i "%n%"=="9" goto eq
if /i "%n%"=="10" goto scan
if /i "%n%"=="11" goto screen
:registry
start /MIN build.bat %parent_dir%/springCloud.registry
goto end
:config
start /MIN build.bat %parent_dir%/springCloud.config
goto end
:zuul
start /MIN build.bat %parent_dir%/springCloud.zuul
goto end
:webUI
start /MIN build.bat %parent_dir%/kps.webUI
goto end
:common
start /MIN build.bat %parent_dir%/kps.webAPICommon
goto end
:po
start /MIN build.bat %parent_dir%/kps.webAPIPO
goto end
:sys
start /MIN build.bat %parent_dir%/kps.webAPISYS
goto end
:wms
start /MIN build.bat %parent_dir%/kps.webAPIWMS
goto end
:eq
start /MIN build.bat %parent_dir%/kps.webAPIEQ
goto end
:scan
start /MIN build.bat %parent_dir%/kps.appAPIScan
goto end
:screen
start /MIN build.bat %parent_dir%/kps.webAPIScreen
goto end
:all
start /MIN build.bat %parent_dir%/springCloud.registry
start /MIN build.bat %parent_dir%/springCloud.config
start /MIN build.bat %parent_dir%/springCloud.zuul
start /MIN build.bat %parent_dir%/kps.webUI
start /MIN build.bat %parent_dir%/kps.webAPICommon
start /MIN build.bat %parent_dir%/kps.webAPIPO
start /MIN build.bat %parent_dir%/kps.webAPISYS
start /MIN build.bat %parent_dir%/kps.webAPIWMS
start /MIN build.bat %parent_dir%/kps.webAPIEQ
start /MIN build.bat %parent_dir%/kps.appAPIScan
start /MIN build.bat %parent_dir%/kps.webAPIScreen
goto end
:b
start /MIN build.bat %parent_dir%/springCloud.zuul
start /MIN build.bat %parent_dir%/kps.webUI
start /MIN build.bat %parent_dir%/kps.webAPICommon
start /MIN build.bat %parent_dir%/kps.webAPIPO
start /MIN build.bat %parent_dir%/kps.webAPISYS
start /MIN build.bat %parent_dir%/kps.webAPIWMS
start /MIN build.bat %parent_dir%/kps.webAPIEQ
start /MIN build.bat %parent_dir%/kps.appAPIScan
start /MIN build.bat %parent_dir%/kps.webAPIScreen
goto end
:c
start /MIN build.bat %parent_dir%/kps.webUI
start /MIN build.bat %parent_dir%/kps.webAPICommon
start /MIN build.bat %parent_dir%/kps.webAPIPO
start /MIN build.bat %parent_dir%/kps.webAPISYS
start /MIN build.bat %parent_dir%/kps.webAPIWMS
start /MIN build.bat %parent_dir%/kps.webAPIEQ
start /MIN build.bat %parent_dir%/kps.appAPIScan
start /MIN build.bat %parent_dir%/kps.webAPIScreen
goto end
:end
echo Uploading docker image file, Press any key to exit!
pause>nul
exit
如果有报错(上传镜像时) Failed to execute goal com.spotify:docker-maven-plugin:0.4.13:build (default-cli) on project docker: Exception caught: An HTTPS URI for DOCKER_HOST must be provided to use Docker client certificates
---------报错解决开始------------
请参考这里:https://blog.csdn.net/u012930316/article/details/82997664
在服务器的/root/docker/下生成证书(所有要输入密码key的地方都全填123456)
openssl genrsa -aes256 -out ca-key.pem 4096 (输入123456)
openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem (输入123456,其他全回车为空)
openssl genrsa -out server-key.pem 4096
openssl req -sha256 -new -key server-key.pem -out server.csr (全回车为空)
openssl x509 -req -days 3650 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem (输入123456)
openssl genrsa -out key.pem 4096
openssl req -new -key key.pem -out client.csr (全为空,直接回车)
openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem (输入123456)
rm -v client.csr server.csr (按y,y)
chmod -v 0400 ca-key.pem key.pem server-key.pem
chmod -v 0444 ca.pem server-cert.pem cert.pem
修改文件 /lib/systemd/system/docker.service
在-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \\这一行后添加
--tlsverify --tlscacert=/root/docker/ca.pem --tlscert=/root/docker/server-cert.pem --tlskey=/root/docker/server-key.pem \\
systemctl daemon-reload
systemctl restart docker(重启)
修改hppt为https <dockerHost>https://192.168.1.250:2375</dockerHost>
把/root/docker/目录下的征生成的所有证书文件拷贝到部署的本地机器上,
然后修改pom.xml文件,configuration中添加dockerCertPath节点,如下
<dockerHost>${dockerHost}</dockerHost> 这里要用https <dockerCertPath>e:\\kintech\\certs</dockerCertPath>
-------报错解决结束----------------
问题解决以后重新执行以上操作(运行deploy.bat)
(上传镜像如果10个镜像一起上传预计需要15分钟,视网络情况而定)
3 修改webui项目(单独上传helka平台)
修改kps.webUI/src/man/resources/application.ym 三个地方名称,端口,ID
修改webui项目下pom.xml
4 CMD进入webui根目录,执行maven命令(也可单独发布一个站点的时候使用这个命令)
mvn clean package docker:build
5 Xshell登录远程服务器,查看镜象是否已上传
docker images
6 运行
运行所有镜像:进入docker目录运行docker-compose up -d(docker附加工具,用于编排服务顺序) (启动所有镜像可能要一段时间,3-5分钟左右,可以打开9088网页查看)
(只运行一个镜像:docker-compose up -d registry(镜像名称))
如果运行报错:ERROR: for registry Cannot start service registry: driver failed programming external connectivity on endpoint registry (5975285ae1dde916bfbbb3a3ed4b4327255004817de01cc29319719787316ef4): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9088 -j DNAT --to-destination 172.18.0.2:9088 ! -i br-0caf7a6ba8bc: iptables: No chain/target/match by that name.
请参考:https://blog.csdn.net/tengdazhang770960436/article/details/77963182
=====解决办法 命令开始=====
pkill docker
iptables -t nat -F
ifconfig docker0 down
brctl delbr docker0
docker -d
service docker restart
再重新运行
docker-compose up -d
=====解决办法 命令结束=====
7 查看运行状态:
docker-compose ps
8 查看单个服务正在启动情况docker-compose logs -f --tail 500 kps
使用命令: docker-compose logs -f --tail 500 registry
查看注册中心是否启动,显示如下说明注册中心启动成功
9 在浏览器中查看
11 还原修改
还原deploy.bat修改
还原webui修改
12 启动缓慢请重启机器(主机)
重启虚拟机( shutdown -r now )
以上是关于docker-compose 发布 spring cloud的主要内容,如果未能解决你的问题,请参考以下文章
docker-compose + spring boot + mysql + redis + nginx 发布web应用: part 1
Spring Boot + docker-compose + MySQL:连接被拒绝
docker-compose - 外部化 spring application.properties
如何为 MongoDB 和 Spring Boot 定义主机名到 docker-compose.yml