把項目部署成docker鏡像


前端項目發布

   執行npm run build  把前端項目發布到dist文件夾中

   

  把前端發布后的dist中文件集成到后端項目中  一般拷貝到后端項目根目錄中的templates目錄下

 

 配置后端項目的根路由響應  修改根項目app下的urls.py

from django.urls import path, include
from django.conf.urls import url
# from utils.swaggerDocs import SwaggerSchemaView
from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi
from .proxyserver import flower,gosuv


from .views import Index


urlpatterns = [

    url(r'^monitor/', include('monitor.urls')),
    url(r'^portals/', include('portals.urls')),
    url(r'^logaudit/', include('logaudit.urls')),
    url(r'^cmdb/', include('cmdb.urls')),
    url(r'^plugins/', include('plugins.urls')),
    url(r'^filemg/', include('filemg.urls')),
    url(r'^jobmg/', include('jobmg.urls')),
    url(r'^common/', include('common.urls')),
    url(r'^sysconfig/', include('linkconfig.urls')),


]

#一定要加上以下代碼處理index響應
from django.conf.urls.static import static
import os
from django.conf import settings
media_root = os.path.join(settings.BASE_DIR, 'templates/view')
urlpatterns += url(r'^$', Index.as_view(), name='index'),
urlpatterns += static('/view', document_root=media_root)
View Code
#! /usr/local/bin/env python
# -*- coding=utf-8 -*-


from django.views.generic.base import TemplateView


class Index(TemplateView):
    template_name = 'view/index.html'
views.py

 

后端項目實現啟動自動初始化數據庫數據

   把代碼寫到根項目app目錄下的__init__.py中  實現啟動項目的時候便會自動執行

  

from __future__ import absolute_import, unicode_literals
from utils.base import dgLogger
import jobmg,logaudit
import inspect
from portals.models import User
from django.contrib.auth.hashers import make_password

# 任務信息注冊
class TaskInfo (object):
    """Widget that lets you choose between task names."""
    _choices = None

    def addSuperUser(self):
        # 初始化超級用戶
        if not User.objects.filter(username='admin').exists():
            dgLogger.info("創建超級用戶管理員")
            User.objects.create(username='admin', password=make_password('Servyouadmin'), is_superuser=True,
                                information='admin@admin.com')
        else:
            dgLogger.info("系統已經存在初始化用戶,無需重新創建")

taskinfo = TaskInfo()
taskinfo.addSuperUser()
__init__.py 初始化數據

 

把項目打包成docker鏡像

cat ~/.bash_history

docker pull docker.io/centos
docker run  -itd  -v /mnt/hgfs:/mnt --name="centos" 9f38484d220f  /usr/sbin/init

docker exec -it centos /bin/bash

進入centos7系統容器中安裝和搭建項目運行環境

在容器中的項目的根目錄下創建一個start.sh


[root@4ec0550e14fd monitor]# vi start.sh 
#! /bin/bash
/root/.pyenv/versions/3.6.5/bin/python /monitor/manage.py runserver 0.0.0.0:8000


chmod +x start.sh
#退出容器終端

docker commit centos centos_linkmonitor:1.0

docker run  -ti -d --name my-link -p 8000:8000 centos_linkmonitor:1.0 /monitor/start.sh

[root@localhost beekeeper]# docker exec -it my-link /bin/bash
[root@a30c18e09d91 /]# ps -ef | grep python
root          7      1  2 07:18 ?        00:00:01 /root/.pyenv/versions/3.6.5/bin/python /monitor/manage.py runserver 0.0.0.0:8000
root         12      7  9 07:19 ?        00:00:03 /root/.pyenv/versions/3.6.5/bin/python /monitor/manage.py runserver 0.0.0.0:8000
root        115     20  0 07:19 ?        00:00:00 grep --color=auto python

#docker導出鏡像壓縮包
[root@localhost beekeeper]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
centos_linkmonitor   1.0                 934073c77e8e        7 minutes ago       880 MB
docker.io/centos     latest              9f38484d220f        4 months ago        202 MB
[root@localhost beekeeper]# docker save 934073c77e8e > linkmonitor.tar

在另外一個docker節點上
[root@node2 ~]# ls
anaconda-ks.cfg                                       
docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm          linkmonitor.tar                 PDO_MYSQL-1.0.2.tgz
[root@node2 ~]# docker load -i linkmonitor.tar 
[root@node2 ~]# docker tag 934073c77e8e  centos_linkmonitor:0.1
[root@node2 ~]# docker image ls | grep centos
centos_linkmonitor                                               0.1                  934073c77e8e        8 hours ago         880 MB
[root@node2 ~]# docker run  -ti -d --name my-link -p 8000:8000 934073c77e8e  /monitor/start.sh
View Code

 

docker鏡像優化升級打包

      把數據庫文件和源碼文件集成到鏡像中使用起來雖然很方便但是會有一些問題

         1.重啟容器后數據庫會還原成初始狀態

         2.每次修改源碼都必須重新打鏡像

       解決方式: 把數據庫和源碼包保存到宿主機的特定目錄里通過 -v選項掛載到容器中 這樣大大提高升級程序的效率

     1.歸檔代碼

       源代碼中的一些帶.的無關文件在歸檔的時候一定要刪除掉  否則會影響容器的主程序的正常啟動

     

   2.上傳到服務器

      必須要在宿主機上給容器啟動腳本添加執行權限  否則啟動容器的時候會提示異常

    

  3.啟動容器  

    docker run -tid -v /root/monitor/beekeeper:/monitor/beekeeper -v /root/monitor/test:/monitor/test -p 8080:8000 --name="my-link" 934073c77e8e /monitor/beekeeper/start.sh
    fcc2d8e138c3db578d95cafe125ca54647ea5bc4c58336b30096bdb325fc585c

   

   

 3.容器程序執行測試腳本獲取數據

[root@node2 monitor]# docker exec -ti my-link /bin/bash
[root@fcc2d8e138c3 /]# cd /monitor/test
[root@fcc2d8e138c3 test]# ls
testes.py
[root@fcc2d8e138c3 test]# python testes.py 
app list.....
sscx-svc
sbzx-web
nsrzx-svc
fpzxsvc
yhs-svc
dzgzpt-wsys
nsrzxsvc
hgzx-svc
wszx-svc
hostname list.....
hostname                                        wasttime           reqscount                errcount
hz-dzswj-nb-199-136-52                    26354217.0ms                329148           5220
xj-dzswj-zjgf-199-137-14                    39541107.0ms                48513       903
xj-dzswj-zjgf-199-137-16                    3026568.0ms                2967       3
interface list.....
interface                                        wastetime           reqscount                errcount
gov.etax.dzswj.nsrzx.service.dj.INsrxxService                    2227446.0ms               36552                        6
gov.etax.dzswj.yhzx.service.auth.IBlackCompanyVerifyService                    1042842.0ms       17397                        189
gov.etax.dzswj.nsrzx.service.gt3.INsrxydjService                    190086.0ms           16218                        0
gov.etax.dzswj.nsrzx.service.rd.INsrzgxxService                    142833.0ms               6063                        0
gov.etax.dzswj.nsrzx.service.rd.INsrLxService                    547002.0ms               5577                        3
gov.etax.dzswj.fpzx.service.smrz.ISmrzService                    121788.0ms               4488                        9
gov.etax.dzswj.sbzx.service.sb.IQcxxcxService                    4525608.0ms               4374                        441
gov.etax.dzswj.yhzx.service.smrz.IXxSmrzQueryService                    121290.0ms           3801                        0
gov.etax.dzswj.yhzx.service.auth.ICompanyInfoQuery                    704337.0ms           3369                        0
gov.etax.dzswj.fpzx.service.fpdk.IFpdkxxCxService                    1472061.0ms           3270                        138
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM