摘要:按照指示,分別安裝和,然后測試安裝結果接下來,根據以下項目結構從克隆一份項目或自己創建項目現在我們準備容器運行開啟,只需運行這個命令設置一個新的開發環境。
原文地址:Django Development With Docker Compose and Machine
以下為譯文
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。自2013年發布以來,無論是從 Github 上的代碼活躍度,還是 Redhat 在 RHEL6.5 中集成對 Docker 的支持, 就連 Google 的 Compute Engine 也支持 Docker 在其之上運行。火熱程度可見一斑!
本篇文章詳細介紹了如何通過 Docker Machine 「系統配置」和 Docker Compose 「多容器應用組裝」 提供堆棧完成 Postgres, Redis 和 Django 項目相結合的開發。
而在最后,該堆棧將包括如下每個服務的多帶帶的容器:
一個 Web/ Django 的容器
一個 Nginx 的容器
一個 Postgres 的容器
一個 Redis 的容器
一個 Data 容器
本地設置使用 Docker「v1.6.1」版本我們將使用到 Docker Compose?「v1.2.0」編排一個多容器組成的應用程序,使用 Docker Machine「v0.2.0」創建本地和云的 Docker 主機。
按照指示,分別安裝 Docker Compose 和 Machine,然后測試安裝結果:
$ docker-machine --version docker-machine version 0.2.0 (8b9eaf2) $ docker-compose --version docker-compose 1.2.0
接下來,根據以下項目結構從realpython/dockerizing-django克隆一份項目或自己創建項目:
├── 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
現在我們準備容器運行……
Docker Machine開啟 Docker Machine,只需運行:
$ 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)"
這個 create 命令設置一個新的 Machine「開發環境」。實際上,它是下載 Boot2Docker 并開始運行 VM。現在只要在開發環境下指定 Docker:
$ eval "$(docker-machine env dev)"
運行以下命令來查看當前正在運行的機器:
$ docker-machine ls NAME ACTIVE DRIVER STATE URL dev * virtualbox Running tcp://192.168.99.100:2376
接下來,我們會讓 Django,Postgres 和 Redis 的容器運行起來。
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
在這里,我們定義了五個服務: Web、Nginx、Postgres、Redis 和 Data。
Web 服務通過 「Web」 目錄下的 Dockerfile 來進行構建,這里也設置了 Python 環境設置,Django 應用默認8000端口。這個端口之后轉發到主機環境的80端口上–例如,Docker Machine。Web 服務還在容器 Restore.env 文件中增加了環境變量。
Nginx 服務用于反向代理,作用于 Django 或靜態文件目錄。
Postgres 服務是從 Docker Hub 的官方 PostgreSQL鏡像 安裝,安裝 Postgres 后運行在默認的服務器的5432端口。
Redis 使用官方 Redis鏡像 安裝,默認 Redis 服務是運行在6379端口。
最后,注意有一個多帶帶的容器來存儲數據庫數據,即為 Data。這有助于確保即使 Postgres 容器完全摧毀數據仍然存在。
現在,運行容器,構建鏡像,然后開始服務:
$ docker-compose build $ docker-compose up -d
這時可以有時間喝一杯咖啡或走走路,因為你第一次運行它將需要一段時間,隨后就可以從 Docker 緩存中建立運行更快的了。
一旦服務運行,我們就需要創建數據庫遷移:
$ docker-compose run web /usr/local/bin/python manage.py migrate
獲得 Docker Machine 的相關 IP, –?docker-machine ip?–,然后在您的瀏覽器中輸入IP:
出現上圖后刷新,您應該能看到頁面更新。從本質上講,我們使用 Redis INCR 來遞增每個處理請求,查看 web/docker_django/apps/todo/views.py 代碼以獲得更多信息。
同樣,這創造了五項服務,都在不同的容器中運行:
$ 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
要查看哪些環境變量可用于 Web 服務,運行:
$ docker-compose run web env
要查看日志,運行:
$ docker-compose logs
您也可以進入 Postgres Shell - - 因為我們已經通過 docker-compose.yml 文件設置在數據庫中通過添加用戶/角色,端口轉發到主機環境中:
$ psql -h 192.168.99.100 -p 5432 -U postgres --password
準備部署?先停止運行 docker-compose stop,然后讓我們的應用程序在云中運行!
部署與我們在本地運行應用程序一樣,我們現在可以 push 到與 Docker Machine 環境完全相同的云托管服務提供商。現在讓我們部署到 Digital Ocean 中。
您注冊 Digital Ocean 之后,產生個人訪問令牌 「Personal Access Token」,然后運行以下命令:
$ docker-machine create -d digitalocean --digitalocean-access-token=ADD_YOUR_TOKEN_HERE Production
這將需要幾分鐘時間來提供 droplet , 并設置一個新的 Docker Machine 產品環境:
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)"
現在我們有兩臺機器運行,一是在本地,一個在 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
設置 production 為激活機器并加載 Docker 環境到 shell:
$ docker-machine active production $ eval "$(docker-machine env production)"
最后,讓我們在云上再次構建 Django 的應用程序。這時候我們就需要使用一個稍微不同的 Docker Compose 文件,不需要安裝在容器里。為什么呢?因為容器本身非常適合本地開發,這樣我們可以更新「Web」目錄的本地代碼,并且更改代碼立刻對容器產生影響。在生產中,很明顯沒有這個必要。
$ docker-compose build $ docker-compose up -d -f production.yml $ docker-compose run web /usr/local/bin/python manage.py migrate
獲取與 Digital Ocean 帳戶相關聯的 IP 地址,并在瀏覽器中查看它。如果一切順利,你應該可以看到你的應用程序在運行。
原文地址:Django Development With Docker Compose and Machine
本文系 OneAPM 工程師編譯整理。想閱讀更多技術文章,請訪問 OneAPM 官方博客。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26442.html
摘要:今天整理了一下如何在中部署項目。執行可以查看容器出錯的具體原因。若上述容器都成功運行,則在瀏覽器中輸入時,視圖會返回相應的結果。以交互方式進入容器后,進入數據庫,會看到在數據庫中生成了相應的表。 今天整理了一下如何在docker中部署django項目。 1.環境如下: python3.6 django2.0.5 nginx mysql5.7 gunicorn 2.項目結構如下:...
摘要:今天整理了一下如何在中部署項目。執行可以查看容器出錯的具體原因。若上述容器都成功運行,則在瀏覽器中輸入時,視圖會返回相應的結果。以交互方式進入容器后,進入數據庫,會看到在數據庫中生成了相應的表。 今天整理了一下如何在docker中部署django項目。 1.環境如下: python3.6 django2.0.5 nginx mysql5.7 gunicorn 2.項目結構如下:...
摘要:而大多數數據科學研究的場景下,更快的速度也意味著更早地發現問題和完成檢驗假設的閉環。通常,數據科學被認為研究成果立即應用到生產環境都是比較緩慢的一個過程。 showImg(https://segmentfault.com/img/remote/1460000005771293); 概述 在數據科學研究中,快速驗證想法是非常關鍵的一環,而如何快速開發出數據產品則可以有效推動整個數據科學項...
摘要:而大多數數據科學研究的場景下,更快的速度也意味著更早地發現問題和完成檢驗假設的閉環。通常,數據科學被認為研究成果立即應用到生產環境都是比較緩慢的一個過程。 showImg(https://segmentfault.com/img/remote/1460000005771293); 概述 在數據科學研究中,快速驗證想法是非常關鍵的一環,而如何快速開發出數據產品則可以有效推動整個數據科學項...
摘要:創建第一個應用,第一步在構建容器原文翻譯整理這篇文章將指導你如何用配置和啟動一個簡單的應用。一詞我認為翻譯為編制更恰當。在這里我們需要一個服務器,一個數據服務器。編制文件指明了我們這些服務所用的鏡像,他們如何連接,哪些卷要掛載到容器。 Mac Docker 創建第一個Django 應用, Part 1 第一步:在Mac構建Django 容器 原文:Quickstart: Compose...
閱讀 3565·2021-09-24 09:48
閱讀 1087·2021-09-10 10:51
閱讀 3268·2019-08-30 13:03
閱讀 3315·2019-08-30 12:51
閱讀 1388·2019-08-30 11:22
閱讀 1052·2019-08-29 18:38
閱讀 2035·2019-08-29 16:41
閱讀 3183·2019-08-29 15:32