婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 使用Docker-compose離線部署Django應用的方法

使用Docker-compose離線部署Django應用的方法

熱門標簽:申請400電話號碼多少錢 如何在各種地圖標注自己的地址 營銷電銷機器人招商 百應電銷機器人靠譜嗎 菏澤crm外呼系統價格 遼寧電銷平臺外呼系統軟件 信陽銷售外呼系統招商 coreldraw地圖標注 物超所值的400電話申請

我們所在的內網環境需要部署一個類似CMS的應用,就是一些表格的CRUD,數據導出,人員權限管理等功能。想到Django做這方面的工作挺擅長的,而且開發量不大,于是選擇Django作為開發基礎。開發功能比較簡單,差不多就是使用xadmin等插件實現以上功能。但有一個問題我們是不好繞過去的,那就是部署到一個內網環境,在內網pip等工具是不能使用的,但好在內網有一個yum服務器可以使用,所以我們決定在內網服務器上安裝Docker,然后把開發環境的容器復制到生產環境實現部署。以下是主要的步驟:

  1. 安裝開發環境的 Docker-ce
  2. 安裝開發環境的 Docker-compose
  3. 配置開發環境
  4. 保存容器
  5. 安裝生產環境的 Docker-ce 和 docker-compose
  6. 發送容器文件并運行

注意:我這里的開發環境是Ubuntu18.04,生產環境是Centos7.2。如果你是其他環境請自己檢查差異,使用適合自己系統的命令。

安裝開發環境的 Docker-ce

Docker 和 Docker-compose是我們這次部署需要重點演示的內容,Django 的應用部分我會盡量縮減的。Docker 負責容器虛擬化的底層部分,Docker-compose 是一個容器編排工具,有了它咱們就不用手寫 shell 實現容器之間的連接了。我們先安裝 Docker-ce,這里主要是參考 Docker 的官方文檔,如果我寫的不夠詳細或者已經過時,各位看官可到官方查看更權威更新的文檔。

卸載舊版本

在安裝之前需要卸載舊版本的 docker,如果你是新系統,可以忽略這一步。

$ sudo apt remove docker docker-engine docker.io containerd runc

安裝用用到的 apt 倉庫

更新apt包索引

$ sudo apt update

允許apt通過https訪問倉庫

$ sudo apt install \

  apt-transport-https \

  ca-certificates \

  curl \

  gnupg-agent \

  software-properties-common

增加Docker的官方GPG key

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

增加Docker的倉庫

$ sudo add-apt-repository \

  "deb [arch=amd64] https://download.docker.com/linux/ubuntu \

  $(lsb_release -cs) \

  stable"

安裝 Docker-ce

做好以上的準備后安裝Docker-ce就簡單了,熟悉Ubuntu的話,很快就能裝好。

$ sudo apt update
$ sudo apt install -y docker-ce

安裝完成后,啟動 docker 服務并使其能夠在每次系統引導時啟動。

$ sudo systemctl start docker
$ sudo systemctl enable docker

安裝開發環境的Docker-compose

Docker-ce安裝完成后,Docker-compose就好辦了。如果你是在Linux等平臺上直接下載Docker-compose的編譯好的二進制文件即可使用。

復制代碼 代碼如下:
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

下載完成后修改權限加上可執行

$ sudo chmod +x /usr/local/bin/docker-compose

最后可執行一下查看Docker-compose的版本號驗證一下是否成功安裝

$ docker-compose --version
docker-compose version 1.24.0-rc1, build 0f3d4dda

配置開發環境

這里的開發環境是Django的環境,演示的項目為了方便演示我盡量使用一個新建的Django項目。

新建Django項目

新建一個Django項目,先創建一個上層文件夾來把項目文件放到這個文件夾中。目錄結構大致如下:

--project
 --Dockerfile
 --docker-compose.yml
 --mysite
  --manage.py
  --requirements.txt

先創建project文件夾

$ mkdir project

然后新建Django項目,或者你也可以把已有的項目拷貝過來。

$ django-admin.py startproject mysite

生成requirements.txt文件

上一步已經有了一個叫mysite的Django項目,假設我們把requirements.txt放到這個文件夾下,內容大致如下:

$ cat requirements.txt

defusedxml==0.5.0
diff-match-patch==20181111
Django==2.1.7
django-crispy-forms==1.7.2
django-formtools==2.1
django-import-export==1.2.0
django-reversion==3.0.3
et-xmlfile==1.0.1
future==0.15.2
httplib2==0.9.2
jdcal==1.4
odfpy==1.4.0
openpyxl==2.6.0
pytz==2018.9
PyYAML==3.13
six==1.10.0
tablib==0.12.1
unicodecsv==0.14.1
xadmin==0.6.1
xlrd==1.2.0
xlwt==1.3.0
mysqlclient==1.4.2

當然這是我的項目需要的依賴,你的依賴可能和我的不一樣。

新建Dockerfile

項目有了,項目的依賴文件也有了,下一步就是創建我們的Django項目的運行環境的docker鏡像了,先建一個Dockerfile來構建docker鏡像。 在project文件夾新建Dockerfile,內容如下:

$ cat Dockerfile
FROM python:3.6.8
ENV PYTHONUNBUFFERED 1

RUN mkdir /config
ADD /mysite/requirements.txt /config/
RUN pip install -r /config/requirements.txt
RUN mkdir /src
WORKDIR /src/mysite

我簡單解釋一下這個文件

FROM python:3.6.8

這里我使用的基礎鏡像是python:3.6.8,它的基礎鏡像是Ubuntu我比較熟悉,如果你對alpine比較熟悉的話也可以使用alpine,那個鏡像要小的多。

ENV PYTHONUNBUFFERED 1

你可以使用 Env 關鍵字創建任意的操作系統的環境變量

ENV PYTHONUNBUFFERED 1

例如,如果你使用它來存儲你的 Django 密鑰,你可以這樣寫:

ENV DJANGO_SECRET_KEY l!fafmjcqyn+j+zz1@2@wt$o8w8k(_dhgub%41l#k3zi2m-b%m

在你的代碼里這樣使用:

import os
SECRET_KEY = os.environ['DJANGO_SECRET_KEY']

RUN顧名思義,RUN就是在容器里面運行命令,這里RUN命令創建了兩個文件夾/config和/src,以及安裝Python的依賴環境。

RUN mkdir /config
RUN mkdir /src
RUN pip install -r /config/requirements.txt

ADD

ADD /mysite/requirements.txt /config/

增加本地的文件到容器中 WORKDIR

WORKDIR /src/mysite

是指定后面所有在容器里運行命令的默認路徑,要運行的命令在稍后的docker-compose文件這種可以看到。

新建docker-compose腳本

docker-compose可以用來管理多個容器,以前手動加海量參數運行容器并連接容器的活都可以讓docker-compose來做了。我的docker-compose.yml內容大致如下:

$ cat docker-compose.yml
version: '3'
services:
  db:
   image: mysql:5.7
   container_name: mysite_db
   ports:
    - "3306:3306"
   environment:
    MYSQL_ROOT_PASSWORD: mysite
    MYSQL_DATABASE: mysite
    LANG: C.UTF-8
  web:
   build: .
   container_name: mysite_web
   command: bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
   depends_on:
    - db
   volumes:
    - ./mysite:/src
   restart: always
   ports:
    - "8002:8000"

再簡單解釋一下這個docker-compose文件吧。

version: '3'

指的是docker-compose的版本,不同版本支持的配置項目稍有不同。 services 管理的服務,我們的例子中是兩個服務:db和web。兩個服務中的配置項目我分開解釋一下 db:

image 直接使用docker hub或者本地的已有鏡像,這個使用的是MySQL5.7 container_name 指定容器的名稱 ports 指定容器對宿主機的端口映射,前面的是宿主機端口,后面的是容器端口 environment 指定當前服務運行時候的環境,環境的細節參考當前鏡像的說明,那上面說支持哪些,我們就可以配置哪些。這個案例中我們指定了MySQL的root密碼、默認數據庫和數據庫的字符集。 web: build 編譯鏡像,這里是使用當前文件夾下的Dockerfile command 容器啟動后執行的命令 depends_on 當前容器要依賴的服務,也就是說必須依賴中的服務成功啟動當前服務才能啟動 volumes 當前容器要掛載的卷,前面指的是宿主機的目錄,后面是容器目錄 restart 指定容器的重啟策略,當前案例是如果出錯就一直重啟。 這里把容器的8000端口映射到宿主機的8002端口,web服務就是從8002端口訪問。

配置Django項目

現在針對當前的容器環境修改一下mysite項目的settings.py文件。

$ vim mysite/mysite/settings.py

找到文件中的ALLOW_HOSTS部分,添加“web”到其中,內容如下:

ALLOW_HOSTS = [
  ...
  'web'
]

然后修改settings.py中的DATABASES部分,把參數改為MySQL服務db的參數,內容大致如下:

DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'mysite',
    'USER': 'root',
    'PASSWORD': 'mysite',
    'HOST': 'db'
  }
}

這里的MySQL連接參數都是docker-compose.yml文件中db部分的environment中定義的。值得指出的是參數HOST值為db,docker-compose啟動容器后,會連接這些容器,容器之間可以使用服務名稱互相ping通,就像使用域名那樣,所以這里的“HOST”可直接填寫“db”。

使用Docker-compose構建項目

經過以上的努力,基本準備齊備了,我們可以構造我們的鏡像了,這里有兩個服務,db只需要在運行的時候下載或者使用本地鏡像就行,web還需要使用Dockerfile構建一下。

$ docker-compose build

經過一陣兒下載或者構建,就能看到成功構建鏡像的信息了。

運行項目并測試一下

構建完成后,就有了web服務的鏡像了,我們現在使用docker-compose來啟動服務。

$ docker-compose up -d

這個過程可能也需要執行一陣兒,取決于你的網速,它會下載MySQL的鏡像,并且根據db和web的鏡像構造容器,并運行容器。完成后可以使用docker-compose ps和docker-compose images來查看我們生成的容器和鏡像

$ docker-compose ps
Name         Command        State         Ports       
---------------------------------------------------------------------------------------
mysite_db  docker-entrypoint.sh mysqld   Up   0.0.0.0:3306->3306/tcp, 33060/tcp
mysite_web  bash -c python manage.py m ...  Up   0.0.0.0:8002->8000/tcp  
$ docker-compose images
Container  Repository  Tag    Image Id   Size
--------------------------------------------------------
mysite_db  mysql    5.7   e47e309f72c8  355 MB
mysite_web  mysite_web  latest  3989acbcc3c9  938 MB

也可使用docker-compose來停止和開始服務,其他更具體的使用方法,請參考官方文檔吧。

$ docker-compose start
Starting db ... done
Starting web ... done
$ docker-compose stop
Stopping mysite_web ... done
Stopping mysite_db ... done

你看這里的服務停止和啟動的順序都是有規律的啟動的時候被依賴的服務先啟動然后啟動依賴它的服務,挺值服務的時候剛好相反。待服務正常運行后,可以訪問瀏覽器測試一下服務是否正常啟動。

保存容器

如果服務一切正常,我們就要把當前的容器保存起來,為部署到新平臺上做準備。 注意:  這里要使用save保存鏡像,使用save是包括容器之間的連接狀態等信息的,如果用export導出鏡像到生產環境是不能使用docker-compose恢復服務的。

$ docker save -o mysql.tar mysql:5.7
$ docker save -o mysite.tar mysite_web:latest

當以上命令執行成功后會在當前目錄生成兩個tar文件,再加上project目錄的Dockerfile和docker-compose.yml文件放在一起準備遷移到生產機器上。

安裝生產環境的 Docker-ce 和 docker-compose

由于生產環境是CentOS,可以直接使用yum安裝

$ sudo yum install docker-ce

安裝成功后,參考開發環境把docker-compose部署到生產服務器上。

發送容器文件并運行

使用scp或者其他工具把mysql.tar、mysite.tar、Docker-compose.yml以及項目文件夾發送到生產服務器,并找一個合適的文件夾存放這些文件,保持原來的目錄結構。 我們先把兩個鏡像恢復到生產服務器上

$ docker load -i mysql.tar
$ docker load -i mysite_web.tar

等待一小會兒執行完成,可以看到當前服務器已經有這兩個鏡像了。

REPOSITORY     TAG         IMAGE ID      CREATED       SIZE
mysite_web     latest       3989acbcc3c9    2 days ago     983MB
mysql        5.7         e47e309f72c8    3 weeks ago     372MB

在執行構建容器以前我們還要對docker-compose.yml做個簡單的修改。你也注意到,生產服務器沒有互聯網,所以不能再build鏡像了,而且我們還把開發環境的鏡像原樣照搬了過來,所以這次web服務改為從鏡像運行就行了,內容大致如下:

version: '3'
services:
  db:
   ...
  web:
   image: mysite_web:latest
   ...

只要更改web中的build項刪除,并加上一個image項,內容就是我們拷貝過來的那個鏡像。稍后我們就可以構建容器并啟動服務了。

$ docker-compose up -d

結果

Name         Command        State         Ports       
----------------------------------------------------------------------------------------
mysite_web  bash -c python manage.py m ...  Up   0.0.0.0:8002->8000/tcp      
mysite_db   docker-entrypoint.sh mysqld   Up   0.0.0.0:3306->3306/tcp, 33060/tcp

再打開瀏覽器看看,是否正常啟動了。

后記

docker-compose 還有更多的用法,我會在以后的項目中做些其他方向的更深入的介紹。謝謝大家賞光看我的作品,希望你幫到你一點。

參考文檔

Get Docker CE for Ubuntu
Install Docker Compose

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:江門 泰安 湖北 廈門 玉樹 瀘州 江西 內江

巨人網絡通訊聲明:本文標題《使用Docker-compose離線部署Django應用的方法》,本文關鍵詞  使用,Docker-compose,離線,部署,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《使用Docker-compose離線部署Django應用的方法》相關的同類信息!
  • 本頁收集關于使用Docker-compose離線部署Django應用的方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    成人毛片在线观看| 精品日本一线二线三线不卡| 蜜桃视频在线观看一区二区| 亚洲一区二区在线视频| 免费成人美女在线观看.| 国产成人午夜视频| 在线精品视频一区二区| 国产欧美精品一区二区色综合朱莉| 国产精品久久久久久久久图文区 | 91精品国产综合久久久久久久久久| 日韩一区二区免费电影| 国产在线视视频有精品| 欧美在线免费播放| 亚洲视频狠狠干| 91丨九色丨尤物| 一区二区三区在线观看欧美| 成人一级视频在线观看| 国产精品另类一区| 91亚洲大成网污www| 中文字幕一区二区三区av| 国产aⅴ精品一区二区三区色成熟| 日韩精品在线网站| 丰满少妇久久久久久久| 最新中文字幕一区二区三区| 欧美撒尿777hd撒尿| 蜜臀91精品一区二区三区| 成人欧美一区二区三区1314 | 日韩福利视频网| 久久一区二区三区四区| 欧美午夜不卡在线观看免费| 日本网站在线观看一区二区三区| 久久嫩草精品久久久精品一| av成人免费在线| 免费人成精品欧美精品| 国产精品成人免费| 欧美一卡二卡三卡四卡| 北条麻妃国产九九精品视频| 午夜不卡av免费| 国产农村妇女毛片精品久久麻豆| 欧美中文字幕久久| av毛片久久久久**hd| 国产又黄又大久久| 日韩一区欧美二区| 依依成人精品视频| 亚洲精品视频在线看| 亚洲欧美一区二区在线观看| 精品久久国产97色综合| 日韩欧美一二三| 在线国产亚洲欧美| 亚洲色图视频网| 综合久久综合久久| 精品国产一区二区国模嫣然| 欧美精品tushy高清| 91丨九色丨蝌蚪富婆spa| 91香蕉国产在线观看软件| 成人免费毛片a| 欧美日韩国产高清一区二区三区| 91成人免费电影| 欧美三级资源在线| 精品999在线播放| 欧美国产成人精品| 一区二区三区四区亚洲| 亚洲精品国产一区二区精华液| 亚洲精品免费播放| 久久精品国产77777蜜臀| 国产一区二区不卡在线| 欧美又粗又大又爽| 日本一区二区免费在线观看视频 | 日本女优在线视频一区二区| 精品一区二区日韩| 久久久久久一级片| 久久精品一区八戒影视| 欧美日韩亚洲不卡| 一本大道久久a久久综合| 国产乱国产乱300精品| 26uuu国产在线精品一区二区| 国产欧美日韩精品一区| 麻豆免费看一区二区三区| 国产精品美女www爽爽爽| 国产精品综合网| 亚洲视频一二三| 自拍偷拍欧美激情| 日韩国产在线一| 蜜桃精品在线观看| 91亚洲精品一区二区乱码| 99久久综合精品| www国产成人免费观看视频 深夜成人网 | 另类中文字幕网| 精品国产伦一区二区三区观看方式| 中文字幕一区二区日韩精品绯色| 国产麻豆精品视频| 欧美一区二区网站| 国产精品区一区二区三区| 日韩国产精品91| 99v久久综合狠狠综合久久| 欧美日韩一区在线观看| 亚洲视频一二三| www.一区二区| 亚洲一区视频在线| 色美美综合视频| 国产精品美女久久久久久2018| 成人黄页在线观看| 色播五月激情综合网| 亚洲精品亚洲人成人网在线播放| 亚洲一区在线视频观看| 日韩精品一级中文字幕精品视频免费观看| 日韩av不卡在线观看| 国产日产欧美一区二区视频| 成人黄色片在线观看| 日韩电影免费一区| 精品国产一区二区三区忘忧草| 亚洲国产一二三| 成人免费视频网站在线观看| 欧美mv和日韩mv国产网站| 美女尤物国产一区| 中文字幕欧美日韩一区| 国产一区二区在线免费观看| 欧美精品一区二区久久久| 不卡的av网站| 国产自产高清不卡| 久久99热国产| 激情综合色综合久久| 樱花影视一区二区| 精品黑人一区二区三区久久| 日韩不卡一二三区| 中文字幕在线不卡国产视频| 欧美在线高清视频| 国产黄色成人av| 国产电影精品久久禁18| 天堂午夜影视日韩欧美一区二区| 欧美激情一区二区三区在线| 国产区在线观看成人精品| 精品少妇一区二区三区在线视频| 美女mm1313爽爽久久久蜜臀| 亚洲宅男天堂在线观看无病毒 | 91美女福利视频| 六月婷婷色综合| 亚洲大片在线观看| 亚洲国产乱码最新视频| 午夜电影一区二区三区| 免费高清在线一区| 蜜桃精品在线观看| www.日韩在线| 精品国产乱码久久久久久老虎 | 国产午夜精品一区二区三区四区 | 亚洲精选视频在线| 日日骚欧美日韩| 99麻豆久久久国产精品免费优播| 国产麻豆成人精品| 国产精品一区二区果冻传媒| 国产精品18久久久久| 国产一区二区三区精品视频| 成人黄色网址在线观看| 欧美肥妇毛茸茸| 欧美精品一区二区三区四区 | 中文字幕av一区二区三区| 亚洲成人精品一区| 国产在线播放一区三区四| 欧美日韩三级在线| 欧美韩日一区二区三区| 久久这里都是精品| 一区二区三区国产精华| 成人一区二区三区在线观看| 欧美精品777| 亚洲视频中文字幕| 波多野结衣亚洲| 亚洲国产高清在线观看视频| 午夜一区二区三区视频| 日韩va欧美va亚洲va久久| 91免费国产视频网站| 国产精品乱人伦| 国产成人av在线影院| 亚洲精品在线免费播放| 国产电影一区在线| 国产色产综合色产在线视频| 波多野结衣中文字幕一区 | 麻豆专区一区二区三区四区五区| jiyouzz国产精品久久| 日本一区免费视频| 国产91精品在线观看| 欧美哺乳videos| 91色九色蝌蚪| 国产综合色视频| 亚洲蜜臀av乱码久久精品| 在线精品亚洲一区二区不卡| 国产精品成人网| 欧美一卡2卡三卡4卡5免费| 日韩不卡一二三区| 国产精品久久久久婷婷| 欧美日免费三级在线| 国产成人av资源| 国产一区在线不卡| 国产精品久久精品日日| 91麻豆蜜桃一区二区三区| 一区二区免费在线播放| 精品少妇一区二区三区视频免付费 | 91久久线看在观草草青青| 中文字幕一区二区三区在线不卡| 色综合久久久久综合| 亚洲成人一区二区在线观看|