亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

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

2024-09-01 13:56:46
字體:
來源:轉載
供稿:網友

我們所在的內網環境需要部署一個類似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 --versiondocker-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.0diff-match-patch==20181111Django==2.1.7django-crispy-forms==1.7.2django-formtools==2.1django-import-export==1.2.0django-reversion==3.0.3et-xmlfile==1.0.1future==0.15.2httplib2==0.9.2jdcal==1.4odfpy==1.4.0openpyxl==2.6.0pytz==2018.9PyYAML==3.13six==1.10.0tablib==0.12.1unicodecsv==0.14.1xadmin==0.6.1xlrd==1.2.0xlwt==1.3.0mysqlclient==1.4.2

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

新建Dockerfile

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

$ cat Dockerfile
FROM python:3.6.8ENV PYTHONUNBUFFERED 1RUN mkdir /configADD /mysite/requirements.txt /config/RUN pip install -r /config/requirements.txtRUN mkdir /srcWORKDIR /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 osSECRET_KEY = os.environ['DJANGO_SECRET_KEY']

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

RUN mkdir /configRUN mkdir /srcRUN 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/tcpmysite_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 MBmysite_web  mysite_web  latest  3989acbcc3c9  938 MB

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

$ docker-compose startStarting db ... doneStarting web ... done
$ docker-compose stopStopping mysite_web ... doneStopping 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       SIZEmysite_web     latest       3989acbcc3c9    2 days ago     983MBmysql        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

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


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩在线免费视频| 日韩精品极品在线观看| 精品久久香蕉国产线看观看gif| 亚洲精品久久7777777| 亚洲黄色www| 欧美性猛交xxxx免费看| 日韩欧美在线字幕| 姬川优奈aav一区二区| 欧美日韩国产成人在线观看| 亚洲成人久久电影| 中文字幕精品网| 国产成人91久久精品| 国产成人精品电影久久久| 中文字幕亚洲一区| 欧美激情按摩在线| 亚洲国产欧美一区二区三区久久| 欧美激情一区二区三区成人| 亚洲图中文字幕| 精品久久久999| 一本一本久久a久久精品牛牛影视| 国产在线视频欧美| 久久中文字幕在线| 久久久之久亚州精品露出| 久久免费国产精品1| 精品欧美一区二区三区| 欧美激情xxxxx| 亚洲美女在线观看| 欧美性色xo影院| 国产精品视频久久久久| 欧美日韩国产精品一区| wwwwwwww亚洲| 色老头一区二区三区| 中文字幕日韩电影| 色777狠狠综合秋免鲁丝| 亚洲美女中文字幕| 日韩国产精品亚洲а∨天堂免| 日韩在线观看免费高清完整版| 日韩精品在线免费观看视频| 成人免费高清完整版在线观看| 欧美成人亚洲成人| www国产亚洲精品久久网站| 国产精品久久久久久久天堂| 伊人伊人伊人久久| 欧美亚洲国产视频| 日韩的一区二区| 国产精品入口免费视频一| 超碰97人人做人人爱少妇| 欧美午夜性色大片在线观看| 亚洲男人的天堂网站| 日韩av不卡在线| 国产精品网站视频| 久久久亚洲网站| 亚洲精品小视频| 亚洲精品电影在线观看| 中文字幕欧美视频在线| 日韩视频免费在线| 日韩成人久久久| 日韩大片在线观看视频| 68精品国产免费久久久久久婷婷| 久久久久久有精品国产| 亚洲成年人在线| 久久综合久中文字幕青草| 97精品久久久中文字幕免费| 欧美日韩亚洲视频一区| 成人国产精品免费视频| 中文字幕视频在线免费欧美日韩综合在线看| 久久精品国产69国产精品亚洲| 欧美激情精品久久久久久大尺度| 国产精品高潮呻吟久久av野狼| 最新亚洲国产精品| 国产69精品99久久久久久宅男| 精品露脸国产偷人在视频| 欧美香蕉大胸在线视频观看| 亚洲精品免费在线视频| 亚洲专区中文字幕| 欧美午夜www高清视频| 91国产在线精品| 亚洲片国产一区一级在线观看| 欧美在线一级va免费观看| 日产精品99久久久久久| 亚洲激情中文字幕| 日韩在线观看精品| 岛国av一区二区三区| 国产中文字幕亚洲| 国产91精品高潮白浆喷水| 国产精品日韩欧美综合| 国产日韩中文字幕在线| 91深夜福利视频| 日韩高清免费在线| 在线看福利67194| 国产精品视频999| 国产欧美日韩精品在线观看| 亚洲色图第三页| 国产精品久久久久久亚洲调教| 欧美中文字幕在线观看| 亚洲网站视频福利| 久久视频在线直播| 国产精品jizz在线观看麻豆| 亚洲女成人图区| 欧美大片大片在线播放| 俺去亚洲欧洲欧美日韩| 亚洲一区二区久久| 麻豆国产精品va在线观看不卡| 久久99热这里只有精品国产| 性亚洲最疯狂xxxx高清| 国产精品视频自拍| 亚洲欧美日韩中文视频| 亚洲精品国产精品国自产观看浪潮| 激情懂色av一区av二区av| 日韩大陆欧美高清视频区| 亚洲无亚洲人成网站77777| 亚洲精品福利资源站| 亚洲japanese制服美女| 亚洲一区第一页| 久久av在线看| 91夜夜揉人人捏人人添红杏| 美女精品视频一区| 国产精品久久久久久亚洲影视| 亚洲男女性事视频| 欧美大片在线影院| 中文字幕日韩精品在线观看| 亚洲人成啪啪网站| 国产精品人成电影在线观看| 久久91亚洲精品中文字幕奶水| 久久这里有精品视频| 亚洲自拍欧美色图| 97成人在线视频| 欧美日韩亚洲一区二区| 91免费精品视频| 成人福利网站在线观看11| 日韩av在线资源| 欧美激情在线狂野欧美精品| 九九精品在线观看| 国产成人一区二区| 亚洲天堂网在线观看| 97香蕉超级碰碰久久免费软件| 欧美久久精品一级黑人c片| 日韩一区在线视频| 欧美性xxxxx极品| 亚洲aaaaaa| 欧美性视频精品| 91亚洲国产成人久久精品网站| 欧美不卡视频一区发布| 亚洲第一福利在线观看| 亚洲黄色成人网| 中文字幕久久久av一区| 欧美日韩一区二区免费视频| 色综合久久88色综合天天看泰| 成人97在线观看视频| 欧美性黄网官网| 亚洲国产另类 国产精品国产免费| 超薄丝袜一区二区| 国产精品高潮呻吟久久av黑人| 国产亚洲精品久久久优势| 国产99视频精品免视看7| 亚洲国产成人久久综合| www欧美xxxx| 久久久女人电视剧免费播放下载| 欧美成人免费视频| 日韩美女免费观看| 国产日韩中文字幕在线| 欧美黑人xxxx| 国产精品av在线播放| 2019中文字幕全在线观看|