日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

如何使用的Django和PostgreSQL和Docker

 書*金 2018-12-14

https:///django-docker-postgresql/


在本教程中,我們將使用Docker和PostgreSQL創(chuàng)建一個新的Django項目。Django提供內(nèi)置的SQLite支持,但即使是本地開發(fā),最好使用像PostgreSQL這樣的“真實”數(shù)據(jù)庫,它與生產(chǎn)中的內(nèi)容相匹配。

可以在本地使用類似的工具運行PostgreSQL Postgres.app然而,許多開發(fā)者今天的優(yōu)先選擇是使用泊塢窗,創(chuàng)建獨立的操作系統(tǒng)的工具。最簡單的思考方式是作為一個包含Django項目所需內(nèi)容的大型虛擬環(huán)境:依賴項,數(shù)據(jù)庫,緩存服務(wù)以及所需的任何其他工具。

使用Docker的一個重要原因是它完全消除了本地開發(fā)設(shè)置的任何問題。您只需運行整個項目的Docker鏡像,而不必擔(dān)心在項目中安裝或運行本地數(shù)據(jù)庫的軟件包。最重要的是,這可以在小組中共享,使團隊開發(fā)更加簡單。

安裝Docker

第一步是為本地計算機安裝桌面Docker應(yīng)用程序:

Docker的初始下載可能需要一些時間才能下載。這是一個很大的檔案。此時請隨意伸展雙腿!

Docker完成安裝后,我們可以確認正在運行的版本。它至少應(yīng)該是18版。

Docker Compose是一個額外的工具,自動包含在Docker的Mac和Windows下載中。但是,如果您使用的是Linux,則需要手動添加它。您可以sudo pip install docker-compose在Docker安裝完成后運行該命令來執(zhí)行此操作。

Django項目

我們將使用留言板應(yīng)用Django的初學(xué)者它使用可在管理員中更新的SQLite為基本留言板應(yīng)用程序提供代碼。

在桌面上創(chuàng)建一個新目錄并將repo克隆到其中。

$ cd ~/Desktop
$ git clone https://github.com/wsvincent/djangoforbeginners.git
$ cd djangoforbeginners
$ cd ch4-message-board-app

然后安裝指定的軟件包Pipenv并啟動一個新shell。

$ pipenv install
$ pipenv shell

migrate在這些更改后確保我們的數(shù)據(jù)庫。

(mb) $ python manage.py migrate

如果您現(xiàn)在使用該python manage.py runserver命令,則可以在http:// localhost:8000上看到我們的應(yīng)用程序的工作版本。

Docker(再次)

希望Docker在這一點上完成安裝。要確認安裝是否成功,請退出本地服務(wù)器,Control+c然后docker run hello-world在命令行上鍵入。您應(yīng)該看到這樣的回復(fù):

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
d1725b59e92d: Pull complete
Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image whi
ch runs the executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client,
which sent it to your terminal.

To try something more ambitious, you can run an Ubuntu container
with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub./

For more examples and ideas, visit:
 https://docs./get-started/

圖像和容器

Docker中有兩個重要的概念:圖像容器。

  • 圖像:項目中所有軟件包的說明列表
  • 容器:圖像的運行時實例

換句話說,圖像描述了將要發(fā)生的事情,而容器實際運行的。

要配置Docker鏡像和容器,我們使用兩個文件:Dockerfiledocker-compose.yml

Dockerfile包含圖像的說明列表,也就是說,在容器的環(huán)境中實際發(fā)生了什么。

創(chuàng)建一個新Dockerfile文件。

(mb) $ touch Dockerfile

然后在文本編輯器中添加以下代碼。

# Pull base image
FROM python:3.7-slim

# Set environment varibles
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# Set work directory
WORKDIR /code

# Install dependencies
RUN pip install pipenv
COPY ./Pipfile /code/Pipfile
RUN pipenv install --system --skip-lock

# Copy project
COPY . /code/

在頂部,我們使用Python 3.7 官方Docker鏡像。接下來我們創(chuàng)建兩個環(huán)境變量。PYTHONUNBUFFERED確保我們的控制臺輸出看起來很熟悉,并且不被Docker緩沖,這是我們不想要的。PYTHONDONTWRITEBYTECODE意味著Python不會嘗試編寫.pyc我們也不想要的文件。

下一行設(shè)置WORKDIR/code。這意味著/code將來工作目錄位于運行任何命令,就像manage.py我們可以使用WORKDIR而不需要記住我們的代碼實際定位在Docker上的確切位置。

然后我們安裝我們的依賴項,確保我們有最新版本pip,安裝pipenv,將本地復(fù)制Pipfile到Docker,然后運行它來安裝我們的依賴項。RUN命令允許我們在Docker中運行命令,就像在命令行上一樣。

我們無法運行Docker容器,直到它有一個圖像,所以讓我們通過第一次構(gòu)建圖像??來做到這一點。

$ docker build .

如果成功,你會看到很多輸出!

接下來我們需要一個新docker-compose.yml文件。這告訴Docker 如何運行我們的Docker容器。

(mb) $ touch docker-compose.yml

然后輸入以下代碼。

version: '3.7'

services:
  db:
    image: postgres:10.1-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/
  web:
    build: .
    command: python /code/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - 8000:8000
    depends_on:
      - db

volumes:
  postgres_data:

在最上面我們使用最新版本的Compose,它是“3.6”。

db數(shù)據(jù)庫,我們要為Postgres的10.1泊塢窗圖像,并使用volumes告訴撰寫其中容器應(yīng)設(shè)在我們的碼頭工人容器。

因為web我們正在指定Web服務(wù)的運行方式。First Compose需要從當(dāng)前目錄構(gòu)建映像并啟動服務(wù)器0.0.0.0:8000。我們volumes用來告訴Compose將代碼存儲在我們的Docker容器中/code/ports配置讓我們自己的8000端口映射到端口8000的泊塢窗容器。這是默認的Django端口。最后depends_on說我們應(yīng)該db在運行我們的Web服務(wù)之前先啟動它。

最后一部分volumes是因為Compose有一條規(guī)則,您必須在頂級volumes鍵中列出命名卷。

Docker已經(jīng)完成了!

更新到PostgreSQL

我們需要更新我們的留言板應(yīng)用程序以使用PostgreSQL而不是SQLite。首先安裝psycopg2我們的數(shù)據(jù)庫綁定到PostgreSQL。

(mb) $ pipenv install psycopg2-binary

然后更新settings.py文件以指定我們將使用PostgreSQL而不是SQLite。

# settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'HOST': 'db', # set in docker-compose.yml
        'PORT': 5432 # default postgres port
    }
}

我們應(yīng)該migrate在Docker上使用我們的數(shù)據(jù)庫。

(mb) $ docker-compose run web python /code/manage.py migrate --noinput

此外,由于留言板應(yīng)用程序需要使用管理員,因此在Docker上創(chuàng)建超級用戶。運行以下命令后填寫提示。

(mb) $ docker-compose run web python /code/manage.py createsuperuser

運行Docker

我們終于準(zhǔn)備好運行Docker了!第一次執(zhí)行該命令可能需要一段時間,因為Docker必須下載所有必需的內(nèi)容。但它會緩存這些信息,因此未來的加速會更快。

鍵入以下命令:

(mb) $ docker-compose up -d --build

我們可以通過導(dǎo)航到http://127.0.0.1:8000/來確認它的工作原理,您將看到與以前相同的主頁。

現(xiàn)在轉(zhuǎn)到http://127.0.0.1:8000/admin并登錄。您可以添加新帖子,然后在主頁上顯示它們,就像Django for Beginners中所述。

完成后,不要忘記關(guān)閉Docker容器。

(mb) $ docker-compose down

快速復(fù)審

以下是我們在本文中介紹的術(shù)語和概念的簡短版本:

  • 圖像:項目的“定義”
  • 容器:您的項目實際運行的內(nèi)容(圖像的一個實例)
  • Dockerfile:定義圖像的外觀
  • docker-compose.yml:一個YAML文件,它接受Dockerfile并添加有關(guān)Docker容器在生產(chǎn)中的行為方式的其他說明

我們使用Dockerfile告訴Docker如何構(gòu)建我們的圖像然后我們在容器中運行我們的實際項目。泊塢窗,compose.yml文件為我們的碼頭工人容器應(yīng)該如何表現(xiàn)在生產(chǎn)的附加信息。

推薦資源

有關(guān)Docker本身的更多解釋,我寫了一個單獨的Docker初學(xué)者指南。如果你想深入了解Docker我自己使用的一個很棒的資源,現(xiàn)在推薦給其他人,那就是潛入Docker視頻課程。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多