Django開発者向けのDockerコンテナの簡単な紹介





キャッシュバックサービスなどのプロジェクトの開発には、開発者のラップトップであっても、通常のラップトップでは一般的ではないさまざまなサービスの使用が含まれます。 Postgresql、Redis、Celeryなど。 快適な開発およびテスト環境を作成したいという願望から、何らかの仮想化/分離システムを使用する必要が生じました。 あるいは、Vagrantはしばらく使用されてきましたが、それはまだovrerheadであり、最善の方法の検索は現在、Dockerにつながっています。



Dockerは、隔離されたコンテナーでアプリケーションを起動するためのプラットフォームです。 Linuxでコンテナを使用すると、基盤となるシステムからソフトウェアを分離できます。 Virtualboxとは異なり、機器の仮想化に必要なシステムオーバーヘッドは除外されます。 Dockerは、Webアプリケーションとサービスの開発と展開に役立ちます。 これがどのように起こるか見てみましょう。



なぜドッカーが必要なのですか?

Dockerはさまざまな方法で使用できます。 特定のバージョンのPostgreSQLなど、バックグラウンドでサービスを提供できます。 ドッキングアプリケーションはドッカーに配置できるため、同様のコンテナーのイメージを使用して、実稼働環境にアプリケーションを展開できます。



Python開発者にとって、Dockerはあらゆるアプリケーションのvirtualenvとして説明できます。 Pythonインタープリターまたはサーバーのいずれかです。 これは、新しいバージョンをテストする場合、またはサーバーで古いアプリケーションを実行する場合に非常に便利です。



Dockerをインストールする

Dockerは、さまざまなLinuxディストリビューションのリポジトリで利用できます。 OSXおよびMS Windowsユーザーは、Dockerを実行するためにLinuxシステムがインストールされているVirtualBoxを使用できます。



最新バージョンをインストールするには、Ubuntu用のPPAを使用します。 Dockerをインストールしたら、将来sudoを使用する必要がないように、自分をdockerグループに追加できます。



最初のコンテナ

Dockerの準備ができたら、 registry.hub.docker.comから多くのコンテナー(Pythonなど)を起動できます 。 このコンテナを実行するには、次のようにします。

docker run -it --rm python:3.4
      
      







まず、Dockerを実行するといくつかのファイルがダウンロードされます。 プロセスが完了すると、Pythonインタープリターのデフォルトコンソールが取得されます。 -itコマンドは、コンテナーを対話式に起動し、対話のためにコンソールにバインドします。 --rmは、終了後に現在のコンテナを削除します。 「Python」は、コンテナのソースの名前です。 「:」の後、通常バージョンを示すタグが表示されます。この場合、コンテナ内のPythonのバージョンです。



独自のスクリプトを実行するなど、コンテナの標準的な動作を変更することもできます。 コマンドラインからコマンドを使用するには、次を追加します。

 docker run -it --rm python:3.4 ls
      
      







コンテナが起動すると、「ls」コマンドがコンテナ内で起動され、メインディレクトリ内のすべてのファイルとフィルターが表示されます。



Dockerfile

Dockerfileには、コンテナの「レシピ」が含まれています。 Pythonでスクリプトを実行する場合、次のように記述します。

 FROM python:3.4 ADD ./test.py / RUN ls -al CMD python test.py
      
      







FROMはベースコンテナ、この場合はPython 3.4イメージを指します。 さらに、 ADD 、RUN、ENVコマンドを使用してコンテナを構成できます。 RUNチームは、コンテナの構築時にタスクを実行します。 CMDコマンドは、コンテナーの起動の開始時に実行されます。 イメージ構築操作はキャッシュされ、次のバージョンはスキップされます(例のRUNコマンドは最初のビルドの構築を開始しますが、2番目のビルドは開始しません)。



ターミナルでは、次のように記述できます。

 docker build --tag=foo . docker run -it --rm foo
      
      







DjangoのDockerfile

django-ckeditorには、 manage.pyおよびrunserverから起動できるデモアプリケーションが含まれています。 このアプリケーションのイメージを作成するDockfileを作成してみましょう。

 FROM python:3.4 MAINTAINER Piotr Maliński <riklaunim@gmail.com> ADD . /ckeditor ENV DJANGO_SETTINGS_MODULE ckeditor_demo.settings RUN pip install -r /ckeditor/ckeditor_demo_requirements.txt RUN pip install /ckeditor RUN python /ckeditor/manage.py validate RUN python /ckeditor/manage.py collectstatic --noinput CMD python /ckeditor/manage.py runserver 0.0.0.0:8080
      
      







ここではPython 3.4を使用しています。 リポジトリからのすべてのコードは、コンテナの「ckeditor」フォルダに追加されます。 DJANGO_SETTINGS_MODULE環境変数も設定し、依存関係とエディター自体を追加します。 さらなる検証、静的データの収集、CMDの終わりにサーバーを起動します。 サーバーをコンテナの外部からアクセスできるようにすることも便利です。このため、0.0.0.0 IPで実行します

 dockebuild --tag=django-ckeditor . dockerun -it --rm --publish=192.168.0.110:8080:8080 django-ckeditor
      
      







--publishオプションを使用すると、パブリックIP /ポートアドレスを実行中のローカルコンテナーからローカルコンテナーにマッピングできます。 この例では、192.168.0.110がホストポートです。 パブリックポートには、localhostから8080を介してアクセスできます。 公開オプションを使用しない場合、サーバーにはコンテナの実行中のIPアドレスからのみアクセスできます。

私が示したDockerfile構成は完全ではなく、SQLiteデータベースでのみ機能します。 Dockerでは、さまざまなコンテナでさまざまなサービスを実行できます。 たとえば、2番目のコンテナでPostgreSQLデータベースを使用してみましょう。

PostgreSQLインスタンスを実行しましょう:

 docker run -d postgres:9.4
      
      







コンテナはバックグラウンドで起動し、 docker psコマンドでステータスと名前を確認できます。 デフォルト名はランダムです。たとえば、「clever_ptolemy」です。 これで、このサーバーにデータベースが作成されましたが、最初にIPアドレスが必要です。 docker inspect INSTANCE_NAMEから取得できます。これにより、IPアドレスを含む、コンテナー内の変数のリストが表示されます。 さらに、データベースを作成できます。

 createdb -h IP_ADDRESS DATABASE_NAME -U postgres
      
      







データベースが作成され、アプリケーションコンテナで構成できるようになりました。 Dockerでは、環境変数を使用してこれを行うことができます。 Djangoの場合、 dj_database_urlを使用できます。

OSインポート環境から

 import dj_database_url DATABASES = {'default': dj_database_url.parse(environ.get('DATABASE', 'postgres:///'))}
      
      







次に、コンテナを動作させるために、envにデータベース名の変数をコンテナに渡す必要があります。 次のようにすることができます。

 docker run -it --rm --link=POSTGRES_INSTANCE_NAME:OUR_NAME -e DATABASE=postgres://postgres@OUR_NAME/DATABASE_NAME --publish=192.168.0.110:8080:8080 django-ckeditor
      
      







コンソールで「docker ps」コマンドを実行すると、データベースインスタンスの名前を取得できます。 「OUR_NAME」は、後で-e値で使用できるショートカットです。 私の場合、次のようになりました。

 docker run -it --rm --link=clever_ptolemy:db -e DATABASE=postgres://postgres@db/ckeditor --publish=192.168.0.110:8080:8080 django-ckeditor python /ckeditor/manage.py syncdb docker run -it --rm --link=clever_ptolemy:db -e DATABASE=postgres://postgres@db/ckeditor --publish=192.168.0.110:8080:8080 django-ckeditor
      
      







syncdbコマンドが最初に実行され、データベースにテーブルが作成されます。 次に、開発サーバーが起動します。



図ツール

上記の簡単な例では、多くの名前とリンクが必要です。 プロセスを容易にするために、図のようないくつかのツールがあります。 YAML(fig.yml)ファイルでは、必要なすべてのステップとリンクを指定できます。

 ckeditor: build: . command: python /ckeditor/manage.py runserver 0.0.0.0:8080 links: - db ports: - "8080:8080" db: image: postgres:9.4
      
      







次に、 fig buildコマンドでビルドし、c fig upを実行して、アプリケーションの動作を表示します。 いくつかのラベルがあり、syncdbを実行し、 fig run NAME COMMANDを使用して支援することができます。ここで、Nameはfig.ymlのインスタンス名です。 figが起動したら、「docker ps」コマンドでコンテナのリストを確認できます



アプリのページでfig.yml構文の詳細を読むことができます。 Postgresを設定する別の方法を提供するDjangoチュートリアルもあります。



All Articles