Docker-compose實戰——Django+PostgreSQL

來源:互聯網
上載者:User

標籤:zed   bin   engine   連接埠   許可權   starting   調用   date   entry   

今天我們來用docker-compose 快速安裝一個Django+PostgreSQL的開發環境。

 

Compose簡介

Compose 定位是“defining and running complex applications with Docker”,前身是 Fig,相容 Fig 的模板檔案。

Dockerfile 可以讓使用者管理一個單獨的應用程式容器;而 Compose 則允許使用者在一個模板(YAML 格式)中定義一組相相關 App容器(被稱為一個 project,即項目),例如一個 Web 服務容器再加上後端的資料庫服務容器等。

該項目由 Python 編寫,實際上調用了 Docker 提供的 API 來實現。

安裝docker-compose請戳這裡,安裝好後就讓我們一起開始吧!

 

一、定義項目組件1.1 建立一個空的項目目錄
[[email protected] sparks]# mkdir django_test

  

1.2 在你的項目目錄下建立一個名為Dockerfile檔案

Docker 可以通過 Dockerfile 的內容來自動構建鏡像。Dockerfile 是一個包含建立鏡像所有命令的文字檔,通過docker build命令可以根據 Dockerfile 的內容構建鏡像,在介紹如何構建之前先介紹下 Dockerfile 的基本文法結構。

想要瞭解更多 官方文檔

 

1.3 添加如下的內容到Dockerfile
 FROM python:3   ENV PYTHONUNBUFFERED 1 RUN mkdir /code WORKDIR /code ADD requirements.txt /code/ RUN pip install -r requirements.txt ADD . /code/

  這個dockerfile檔案開始於python3基礎鏡像,建立並移動工作目錄至code目錄,將requirements.txt添加到code目錄中,並用pip命令安裝該檔案中的依賴包。

 

1.4 在你的項目目錄下建立並添加如下內容至requirements.txt
 Django>=1.8,<2.0 psycopg2

  

1.5 在你的項目目錄下建立並添加如下內容至docker-compose.yml
version: ‘3‘services:  db:    image: postgres  web:    build: .    command: python3 manage.py runserver 0.0.0.0:8000    volumes:      - .:/code    ports:      - "8000:8000"    depends_on:      - db

  這個檔案定義了兩個服務,資料庫(db)服務和web服務, 想要瞭解更多請點擊這裡

 

二、建立Django項目

在這一步,用之前步驟建立的檔案製作鏡像並用這個鏡像來建立Django項目

2.1  轉至項目根目錄,運行如下命令來建立Django項目
sudo docker-compose run web django-admin.py startproject composeexample .

  這裡django-admin.py startproject composeexample需要使用web服務的鏡像和配置,但是web鏡像目前並不存在,所以compose自動在目前的目錄下尋找和建立該服務,

  具體可以參見docker-compose.yml中 build: . 這一行。

  一旦web服務鏡像被建立,就在該容器中運行django-admin.py startproject 來建立Django項目

 

2.2 在上面的命令執行完後,查看你的項目目錄檔案
 $ ls -l drwxr-xr-x 2 root   root   composeexample -rw-rw-r-- 1 user   user   docker-compose.yml -rw-rw-r-- 1 user   user   Dockerfile -rwxr-xr-x 1 root   root   manage.py -rw-rw-r-- 1 user   user   requirements.txt

  如果你是在linux上運行docker,manage.py檔案屬於root建立,因為在容器內運行都是用root使用者,可以通過如下命令改變許可權

sudo chown -R $USER:$USER .

  

三、串連資料庫

在這一部分,我們將建立資料庫並串連Django

3.1 在你的項目目錄下,編輯composeexample/settings.py檔案3.2 將檔案中DATABASES = ...替換為如下內容
DATABASES = {    ‘default‘: {        ‘ENGINE‘: ‘django.db.backends.postgresql‘,        ‘NAME‘: ‘postgres‘,        ‘USER‘: ‘postgres‘,        ‘HOST‘: ‘db‘,        ‘PORT‘: 5432,    }}

 

3.3 運行命令在你的項目根目錄下
$ docker-compose updjangosample_db_1 is up-to-dateCreating djangosample_web_1 ...Creating djangosample_web_1 ... doneAttaching to djangosample_db_1, djangosample_web_1db_1   | The files belonging to this database system will be owned by user "postgres".db_1   | This user must also own the server process.db_1   |db_1   | The database cluster will be initialized with locale "en_US.utf8".db_1   | The default database encoding has accordingly been set to "UTF8".db_1   | The default text search configuration will be set to "english".. . .web_1  | May 30, 2017 - 21:44:49web_1  | Django version 1.11.1, using settings ‘composeexample.settings‘web_1  | Starting development server at http://0.0.0.0:8000/web_1  | Quit the server with CONTROL-C.

  到了這裡,你的Django應用已經運行在docker主機的8000連接埠上啦,使用瀏覽器輸入http://localhost:8000就可以看到Django的歡迎介面啦

 

3.4 查看正在啟動並執行容器

  在另一個終端上,你可以通過 docker ps 命令查看正在啟動並執行容器

$ docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMESdef85eff5f51        django_web          "python3 manage.py..."   10 minutes ago      Up 9 minutes        0.0.0.0:8000->8000/tcp   django_web_1678ce61c79cc        postgres            "docker-entrypoint..."   20 minutes ago      Up 9 minutes        5432/tcp                 django_db_1

  一個web容器,一個postgre容器都在後台運行中,至此我們已經大功告成啦!

  

Docker-compose實戰——Django+PostgreSQL

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.