1. 程式人生 > >docker-compose, docker registry2,Python 指令碼 自動化 部署 spring boot 進銷存系統

docker-compose, docker registry2,Python 指令碼 自動化 部署 spring boot 進銷存系統

準備環境

虛擬機器兩臺

centos 7.2 192.168.255.128

centos 7.2 192.168.255.129

maven 3.0.5

java 1.8.0_181

git version 1.8.3.1

Python 2.7.5

docker registry2

 

專案地址:https://gitee.com/shenduedu/JXC.git 要在自行配好資料庫環境

 

centos 192.168.255.128 裝上 maven,java,git

centos 192.168.255.129 裝上 java

此處不在累贅

 

注意:

1 因為要遠端執行,所以要在兩臺虛擬機器上配置ssh key

ssh-keygen -t rsa

一路按回車,然後將生成的公鑰複製到 129機器上

ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

2 要在碼雲好配置好公鑰

因為要用git 拉程式碼

 

部署流程大概是

1 git 將程式碼 下載到指定目錄

2 maven 將程式碼打包

3 將maven打包後的war包複製 到 dockerfile所在目錄

4 docker build 指定版本的映象檔案

5 push 到 私有倉庫

6 將準備好的docker-compose.yml檔案 scp到執行服務的機器

7 遠端執行 docker-compose up .

 

 

本次 執行 的 sql,dockfiler , docker-compose.yml都在 :https://gitee.com/shenduedu/JXC.git 專案中

 

 

 

注意,在向 docker 私有倉庫 pull 映象時 可能會遇到

Get https://192.168.255.128:5000/v1/_ping: http: server gave HTTP response to HTTPS client 錯誤

解決辦法是

echo '{ "insecure-registries":["192.168.255.128:5000"] }' > /etc/docker/daemon.json

然後重啟docker

systemctl restart docker

 

 

為可方便演示,我程式碼都是採用硬編碼的方式,請讀者們諒解

 

部署 docker registry2

搭建私有倉庫
docker run -d -p 5000:5000 --restart=always --name registry2 registry:2

curl -X GET http://localhost:5000/v2/_catalog  檢視私有倉庫 所用映象

列出指定映象的所有標籤
curl -X GET http://localhost:5000/v2/jxc/tags/list

 

dockerfile 程式碼

FROM java:8
VOLUME /tmp
ADD JXC-0.0.1-SNAPSHOT.war /app.war
EXPOSE 80
ENTRYPOINT ["java","-jar","/app.war"]

 

docker-compose.yml

version: '2'
services:
  jxc:
    image: 192.168.255.128:5000/jxc:0.0.3
    ports:
      - "8080:80"

 

python程式碼

# -*- coding: UTF-8 -*-

import os
import sys

if os.path.exists('/usr/local/deployer.lock'):
    print '程式正在執行.................'
    sys.exit(1)

file = open('/usr/local/' + 'deployer' + '.lock','w')
file.close()


res = os.system('rm -rf /usr/local/gitsource/*')
if res != 0:
    print 'delete gitsource files fail'
    res =os.remove('/usr/local/deployer.lock')
    sys.exit(1)

res = os.system('cd /usr/local/gitsource/ &&  git clone https://gitee.com/shenduedu/JXC.git')
if res != 0:
    print 'https://gitee.com/shenduedu/JXC.git fail'
    res =os.remove('/usr/local/deployer.lock')
    sys.exit(1)

res = os.system('cd /usr/local/gitsource/JXC/ &&  mvn clean package')
if res != 0:
    print 'mvn package fail'
    res =os.remove('/usr/local/deployer.lock')
    sys.exit(1)

# 複製專案到 dockerfile 當前目錄
res = os.system('/bin/cp /usr/local/gitsource/JXC/target/JXC-0.0.1-SNAPSHOT.war /usr/local/dockerfile/')

# docker build 生成映象
res = os.system('cd /usr/local/dockerfile/ && docker build -t jxc:0.0.3 .')

# 給生成的 映象 打 tag
res = os.system('docker tag jxc:0.0.3 localhost:5000/jxc:0.0.3')

# 把生成的映象 push 到 私有倉庫
res = os.system('docker push localhost:5000/jxc:0.0.3')

# 將當前目錄的 docker-compose.yml 複製到遠端機器
res = os.system('cd /usr/local/dockerfile/ && scp docker-compose.yml 192.168.255.129:/opt/jxc/')
# 從私有倉庫中拉取映象
res = os.system('ssh [email protected] "docker pull 192.168.255.128:5000/jxc:0.0.3"')
# 執行 docker-compose.yml
res = os.system('ssh [email protected] "cd /opt/jxc && docker-compose up"')


res =os.remove('/usr/local/deployer.lock')

 

 

 

此時 執行http://192.168.255.129/

 

 

歡迎加入 微服務交流群 222700500