成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[譯] 如何使用 Docker 組件開發(fā) Django 項(xiàng)目?

forsigner / 1710人閱讀

摘要:按照指示,分別安裝和,然后測(cè)試安裝結(jié)果接下來,根據(jù)以下項(xiàng)目結(jié)構(gòu)從克隆一份項(xiàng)目或自己創(chuàng)建項(xiàng)目現(xiàn)在我們準(zhǔn)備容器運(yùn)行開啟,只需運(yùn)行這個(gè)命令設(shè)置一個(gè)新的開發(fā)環(huán)境。

  

原文地址:Django Development With Docker Compose and Machine

以下為譯文


Docker 是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。自2013年發(fā)布以來,無論是從 Github 上的代碼活躍度,還是 Redhat 在 RHEL6.5 中集成對(duì) Docker 的支持, 就連 Google 的 Compute Engine 也支持 Docker 在其之上運(yùn)行?;馃岢潭瓤梢娨话?!

本篇文章詳細(xì)介紹了如何通過 Docker Machine 「系統(tǒng)配置」和 Docker Compose 「多容器應(yīng)用組裝」 提供堆棧完成 Postgres, Redis 和 Django 項(xiàng)目相結(jié)合的開發(fā)。

而在最后,該堆棧將包括如下每個(gè)服務(wù)的多帶帶的容器:

一個(gè) Web/ Django 的容器

一個(gè) Nginx 的容器

一個(gè) Postgres 的容器

一個(gè) Redis 的容器

一個(gè) Data 容器

本地設(shè)置

使用 Docker「v1.6.1」版本我們將使用到 Docker Compose?「v1.2.0」編排一個(gè)多容器組成的應(yīng)用程序,使用 Docker Machine「v0.2.0」創(chuàng)建本地和云的 Docker 主機(jī)。
按照指示,分別安裝 Docker Compose 和 Machine,然后測(cè)試安裝結(jié)果:

$ docker-machine --version 
docker-machine version 0.2.0 (8b9eaf2) 
$ docker-compose --version 
docker-compose 1.2.0

接下來,根據(jù)以下項(xiàng)目結(jié)構(gòu)從realpython/dockerizing-django克隆一份項(xiàng)目或自己創(chuàng)建項(xiàng)目:

├── docker-compose.yml 
├── nginx 
│?? ├── Dockerfile 
│?? └── sites-enabled 
│?? └── django_project 
├── production.yml 
└── web 
│   ├── Dockerfile 
│   ├── docker_django 
│   │?? ├── __init__.py 
│   │?? ├── apps 
│   │?? │?? ├── __init__.py 
│   │?? │?? └── todo 
│   │?? │?? ├── __init__.py 
│   │?? │?? ├── admin.py 
│   │?? │?? ├── models.py 
│   │?? │?? ├── templates 
│   │?? │?? │?? ├── _base.html 
│   │?? │?? │?? └── home.html 
│   │?? │?? ├── tests.py 
│   │?? │?? ├── urls.py 
│   │?? │?? └── views.py 
│   │?? ├── settings.py 
│   │?? ├── urls.py 
│?? └── wsgi.py 
│   ├── manage.py 
│   ├── requirements.txt 
│   └── static 
│   │   └── main.css

現(xiàn)在我們準(zhǔn)備容器運(yùn)行……

Docker Machine

開啟 Docker Machine,只需運(yùn)行:

$ docker-machine create -d virtualbox dev;
INFO[0000] Creating CA: /Users/michael/.docker/machine/certs/ca.pem
INFO[0000] Creating client certificate: /Users/michael/.docker/machine/certs/cert.pem
INFO[0001] Downloading boot2docker.iso to /Users/michael/.docker/machine/cache/boot2docker.iso...
INFO[0035] Creating SSH key...
INFO[0035] Creating VirtualBox VM...
INFO[0043] Starting VirtualBox VM...
INFO[0044] Waiting for VM to start...
INFO[0094] "dev" has been created and is now the active machine.
INFO[0094] To point your Docker client at it, run this in your shell: eval "$(docker-machine env dev)"

這個(gè) create 命令設(shè)置一個(gè)新的 Machine「開發(fā)環(huán)境」。實(shí)際上,它是下載 Boot2Docker 并開始運(yùn)行 VM?,F(xiàn)在只要在開發(fā)環(huán)境下指定 Docker:

$ eval "$(docker-machine env dev)"

運(yùn)行以下命令來查看當(dāng)前正在運(yùn)行的機(jī)器:

$ docker-machine ls 
NAME  ACTIVE  DRIVER  STATE  URL 
dev * virtualbox Running tcp://192.168.99.100:2376

接下來,我們會(huì)讓 Django,Postgres 和 Redis 的容器運(yùn)行起來。

Docker Compose

讓我們看一看 docker-compose.yml 文件:

web: 
  restart: always 
  build: ./web 
  expose:
    - "8000" 
  links: 
    - postgres:postgres   
    - redis:redis 
  volumes: 
    - /usr/src/app/static
  env_file: .env
  command: /usr/local/bin/gunicorn docker_django.wsgi:application -w 2 -b :8000 

nginx:
  restart: always
  build: ./nginx/
  ports: 
    - "80:80" 
  volumes: 
    - /www/static 
  volumes_from: 
    - web
  links: 
    - web:web 

postgres: 
  restart: always
  image: postgres:latest 
  volumes_from: 
    - data
  ports: 
    - "5432:5432" 

redis: 
  restart: always
  image: redis:latest 
  ports: 
    - "6379:6379" 

data:   
  restart: always 
  image: postgres:latest 
  volumes: 
    - /var/lib/postgresql
  command: true

在這里,我們定義了五個(gè)服務(wù): Web、Nginx、Postgres、Redis 和 Data。

Web 服務(wù)通過 「Web」 目錄下的 Dockerfile 來進(jìn)行構(gòu)建,這里也設(shè)置了 Python 環(huán)境設(shè)置,Django 應(yīng)用默認(rèn)8000端口。這個(gè)端口之后轉(zhuǎn)發(fā)到主機(jī)環(huán)境的80端口上–例如,Docker Machine。Web 服務(wù)還在容器 Restore.env 文件中增加了環(huán)境變量。

Nginx 服務(wù)用于反向代理,作用于 Django 或靜態(tài)文件目錄。

Postgres 服務(wù)是從 Docker Hub 的官方 PostgreSQL鏡像 安裝,安裝 Postgres 后運(yùn)行在默認(rèn)的服務(wù)器的5432端口。

Redis 使用官方 Redis鏡像 安裝,默認(rèn) Redis 服務(wù)是運(yùn)行在6379端口。

最后,注意有一個(gè)多帶帶的容器來存儲(chǔ)數(shù)據(jù)庫(kù)數(shù)據(jù),即為 Data。這有助于確保即使 Postgres 容器完全摧毀數(shù)據(jù)仍然存在。

現(xiàn)在,運(yùn)行容器,構(gòu)建鏡像,然后開始服務(wù):

$ docker-compose build 
$ docker-compose up -d

這時(shí)可以有時(shí)間喝一杯咖啡或走走路,因?yàn)槟愕谝淮芜\(yùn)行它將需要一段時(shí)間,隨后就可以從 Docker 緩存中建立運(yùn)行更快的了。

一旦服務(wù)運(yùn)行,我們就需要?jiǎng)?chuàng)建數(shù)據(jù)庫(kù)遷移:

$ docker-compose run web /usr/local/bin/python manage.py migrate

獲得 Docker Machine 的相關(guān) IP, –?docker-machine ip?–,然后在您的瀏覽器中輸入IP:

出現(xiàn)上圖后刷新,您應(yīng)該能看到頁(yè)面更新。從本質(zhì)上講,我們使用 Redis INCR 來遞增每個(gè)處理請(qǐng)求,查看 web/docker_django/apps/todo/views.py 代碼以獲得更多信息。

同樣,這創(chuàng)造了五項(xiàng)服務(wù),都在不同的容器中運(yùn)行:

$ docker-compose ps
            Name                          Command               State           Ports
----------------------------------------------------------------------------------------------
dockerizingdjango_data_1       /docker-entrypoint.sh true       Up      5432/tcp
dockerizingdjango_nginx_1      /usr/sbin/nginx                  Up      0.0.0.0:80->80/tcp
dockerizingdjango_postgres_1   /docker-entrypoint.sh postgres   Up      0.0.0.0:5432->5432/tcp
dockerizingdjango_redis_1      /entrypoint.sh redis-server      Up      0.0.0.0:6379->6379/tcp
dockerizingdjango_web_1        /usr/local/bin/gunicorn do ...   Up      8000/tcp

要查看哪些環(huán)境變量可用于 Web 服務(wù),運(yùn)行:

$ docker-compose run web env

要查看日志,運(yùn)行:

$ docker-compose logs

您也可以進(jìn)入 Postgres Shell - - 因?yàn)槲覀円呀?jīng)通過 docker-compose.yml 文件設(shè)置在數(shù)據(jù)庫(kù)中通過添加用戶/角色,端口轉(zhuǎn)發(fā)到主機(jī)環(huán)境中:

$ psql -h 192.168.99.100 -p 5432 -U postgres --password

準(zhǔn)備部署?先停止運(yùn)行 docker-compose stop,然后讓我們的應(yīng)用程序在云中運(yùn)行!

部署

與我們?cè)诒镜剡\(yùn)行應(yīng)用程序一樣,我們現(xiàn)在可以 push 到與 Docker Machine 環(huán)境完全相同的云托管服務(wù)提供商?,F(xiàn)在讓我們部署到 Digital Ocean 中。

您注冊(cè) Digital Ocean 之后,產(chǎn)生個(gè)人訪問令牌 「Personal Access Token」,然后運(yùn)行以下命令:

$ docker-machine create  
-d digitalocean  
--digitalocean-access-token=ADD_YOUR_TOKEN_HERE 
Production 

這將需要幾分鐘時(shí)間來提供 droplet , 并設(shè)置一個(gè)新的 Docker Machine 產(chǎn)品環(huán)境:

INFO[0000] Creating SSH key... 
INFO[0001] Creating Digital Ocean droplet... 
INFO[0133] "production" has been created and is now the active machine. 
INFO[0133] To point your Docker client at it, run this in your shell: eval "$(docker-machine env production)"

現(xiàn)在我們有兩臺(tái)機(jī)器運(yùn)行,一是在本地,一個(gè)在 Digital Ocean:

$ docker-machine ls
NAME         ACTIVE   DRIVER         STATE     URL
dev          *        virtualbox     Running   tcp://192.168.99.100:2376
production            digitalocean   Running   tcp://104.131.107.8:2376

設(shè)置 production 為激活機(jī)器并加載 Docker 環(huán)境到 shell:

$ docker-machine active production 
$ eval "$(docker-machine env production)"

最后,讓我們?cè)谠粕显俅螛?gòu)建 Django 的應(yīng)用程序。這時(shí)候我們就需要使用一個(gè)稍微不同的 Docker Compose 文件,不需要安裝在容器里。為什么呢?因?yàn)槿萜鞅旧矸浅_m合本地開發(fā),這樣我們可以更新「Web」目錄的本地代碼,并且更改代碼立刻對(duì)容器產(chǎn)生影響。在生產(chǎn)中,很明顯沒有這個(gè)必要。

$ docker-compose build 
$ docker-compose up -d -f production.yml 
$ docker-compose run web /usr/local/bin/python manage.py migrate

獲取與 Digital Ocean 帳戶相關(guān)聯(lián)的 IP 地址,并在瀏覽器中查看它。如果一切順利,你應(yīng)該可以看到你的應(yīng)用程序在運(yùn)行。

原文地址:Django Development With Docker Compose and Machine

本文系 OneAPM 工程師編譯整理。想閱讀更多技術(shù)文章,請(qǐng)?jiān)L問 OneAPM 官方博客。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/26442.html

相關(guān)文章

  • django開發(fā)-在Docker中部署django項(xiàng)目

    摘要:今天整理了一下如何在中部署項(xiàng)目。執(zhí)行可以查看容器出錯(cuò)的具體原因。若上述容器都成功運(yùn)行,則在瀏覽器中輸入時(shí),視圖會(huì)返回相應(yīng)的結(jié)果。以交互方式進(jìn)入容器后,進(jìn)入數(shù)據(jù)庫(kù),會(huì)看到在數(shù)據(jù)庫(kù)中生成了相應(yīng)的表。 今天整理了一下如何在docker中部署django項(xiàng)目。 1.環(huán)境如下: python3.6 django2.0.5 nginx mysql5.7 gunicorn 2.項(xiàng)目結(jié)構(gòu)如下:...

    galois 評(píng)論0 收藏0
  • django開發(fā)-在Docker中部署django項(xiàng)目

    摘要:今天整理了一下如何在中部署項(xiàng)目。執(zhí)行可以查看容器出錯(cuò)的具體原因。若上述容器都成功運(yùn)行,則在瀏覽器中輸入時(shí),視圖會(huì)返回相應(yīng)的結(jié)果。以交互方式進(jìn)入容器后,進(jìn)入數(shù)據(jù)庫(kù),會(huì)看到在數(shù)據(jù)庫(kù)中生成了相應(yīng)的表。 今天整理了一下如何在docker中部署django項(xiàng)目。 1.環(huán)境如下: python3.6 django2.0.5 nginx mysql5.7 gunicorn 2.項(xiàng)目結(jié)構(gòu)如下:...

    MonoLog 評(píng)論0 收藏0
  • [原]打造數(shù)據(jù)產(chǎn)品的快速原型:DjangoDocker之旅

    摘要:而大多數(shù)數(shù)據(jù)科學(xué)研究的場(chǎng)景下,更快的速度也意味著更早地發(fā)現(xiàn)問題和完成檢驗(yàn)假設(shè)的閉環(huán)。通常,數(shù)據(jù)科學(xué)被認(rèn)為研究成果立即應(yīng)用到生產(chǎn)環(huán)境都是比較緩慢的一個(gè)過程。 showImg(https://segmentfault.com/img/remote/1460000005771293); 概述 在數(shù)據(jù)科學(xué)研究中,快速驗(yàn)證想法是非常關(guān)鍵的一環(huán),而如何快速開發(fā)出數(shù)據(jù)產(chǎn)品則可以有效推動(dòng)整個(gè)數(shù)據(jù)科學(xué)項(xiàng)...

    zhoutao 評(píng)論0 收藏0
  • [原]打造數(shù)據(jù)產(chǎn)品的快速原型:DjangoDocker之旅

    摘要:而大多數(shù)數(shù)據(jù)科學(xué)研究的場(chǎng)景下,更快的速度也意味著更早地發(fā)現(xiàn)問題和完成檢驗(yàn)假設(shè)的閉環(huán)。通常,數(shù)據(jù)科學(xué)被認(rèn)為研究成果立即應(yīng)用到生產(chǎn)環(huán)境都是比較緩慢的一個(gè)過程。 showImg(https://segmentfault.com/img/remote/1460000005771293); 概述 在數(shù)據(jù)科學(xué)研究中,快速驗(yàn)證想法是非常關(guān)鍵的一環(huán),而如何快速開發(fā)出數(shù)據(jù)產(chǎn)品則可以有效推動(dòng)整個(gè)數(shù)據(jù)科學(xué)項(xiàng)...

    zhangqh 評(píng)論0 收藏0
  • Mac Docker 創(chuàng)建第一個(gè)Django 應(yīng)用,Part 1

    摘要:創(chuàng)建第一個(gè)應(yīng)用,第一步在構(gòu)建容器原文翻譯整理這篇文章將指導(dǎo)你如何用配置和啟動(dòng)一個(gè)簡(jiǎn)單的應(yīng)用。一詞我認(rèn)為翻譯為編制更恰當(dāng)。在這里我們需要一個(gè)服務(wù)器,一個(gè)數(shù)據(jù)服務(wù)器。編制文件指明了我們這些服務(wù)所用的鏡像,他們?nèi)绾芜B接,哪些卷要掛載到容器。 Mac Docker 創(chuàng)建第一個(gè)Django 應(yīng)用, Part 1 第一步:在Mac構(gòu)建Django 容器 原文:Quickstart: Compose...

    sydMobile 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<