docker--django

6977 ワード

Docker Develop Django Project原文アドレス:Django Development With Docker Component and Machine
以下に、Dockerはオープンソースのアプリケーションコンテナエンジンであり、開発者がアプリケーションをパッケージ化し、移植可能なコンテナに依存してパッケージ化し、流行のLinuxマシンに公開したり、仮想化したりすることができます.2013年にリリースされて以来、Githubからのコードの活躍度もRHEL 6でのRedhatも5にはDockerのサポートが統合されており、GoogleのCompute EngineでもDockerの実行がサポートされています.熱さは一斑を見ることができる!この記事では、Docker Machineの「システム構成」とDocker Componentの「マルチコンテナアプリケーション組立」でスタックを提供することで、Postgres、Redis、Djangoプロジェクトを組み合わせた開発を完了する方法について詳しく説明します.最後に、スタックは、Web/Djangoのコンテナ1つNginxのコンテナ1つPostgresのコンテナ1つRedisのコンテナ1つDataのコンテナ1つのサービスごとに個別のコンテナを含む.
ローカル設定はDocker「v 1.6.1」バージョンを使用します.Docker Component「v 1.2.0」に複数のコンテナからなるアプリケーションを編成し、Docker Machine「v 0.2.0」を使用してローカルとクラウドのDockerホストを作成します.指示に従って、Docker ComponentとMachineをそれぞれインストールし、インストール結果をテストします:$docker-machine--version docker-machine version 0.2.0(8 b 9 eaf 2)$docker-compose--version docker-compose 1.2.0
次に、realpython/dockerizing-djangoからプロジェクトをクローンするか、独自にプロジェクトを作成します.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.pemINFO[0000] 
Creating client certificate: /Users/michael/.docker/machine/certs/cert.pemINFO[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「開発環境」を設定します.実際には、Boot 2 Dockerをダウンロードして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の5つのサービスを定義します.Webサービスは「Web」ディレクトリ下のDockerfileで構築されており、ここでもPython環境設定が設定されており、Djangoアプリケーションではデフォルト8000ポートが設定されています.このポートは、ホスト環境の80ポートに転送されます.たとえば、Docker Machineです.Webサービスはまだコンテナにある.Envファイルに環境変数が追加されました.Nginxサービスは、Djangoまたは静的ファイルディレクトリとして機能する逆プロキシに使用されます.Postgresサービスは、Docker Hubの公式PostgreSQLミラーからインストールされ、Postgresをインストールした後、デフォルトのサーバの5432ポートで実行されます.Redisは公式Redisミラーを使用してインストールされ、デフォルトのRedisサービスは6379ポートで実行されます.最後に、データベースデータ、すなわちDataを格納する別のコンテナがあることに注意してください.これは、Postgresコンテナがデータを完全に破壊しても存在することを保証するのに役立ちます.
コンテナを実行し、ミラーを構築してサービスを開始します.
$ docker-compose build 
$ docker-compose up -d

このとき、コーヒーを1杯飲んだり歩いたりする時間があります.初めて実行するのに時間がかかるので、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コードを参照してください.同様に、5つのサービスが作成され、異なるコンテナで実行されます.
$ docker-compose ps 
Name Command State Ports----------------------------------------------------------------------------------------------
dockerizingdjango_data_1 /docker-entrypoint.sh true Up 5432/tcpdockerizingdjango_nginx_1 /usr/sbin/nginx Up 0.0.0.0:80->80/tcpdockerizingdjango_postgres_1 /docker-entrypoint.sh postgres Up 0.0.0.0:5432->5432/tcpdockerizingdjango_redis_1 /entrypoint.sh redis-server Up 0.0.0.0:6379->6379/tcpdockerizingdjango_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の実行を停止し、アプリケーションをクラウドで実行します.アプリケーションをローカルで実行するのと同様に、Docker Machine環境と全く同じクラウド管理サービスプロバイダにpushを導入できます.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)"
現在、2台のマシンが稼働しています.1つはローカルで、1つはDigital Oceanです.
$ docker-machine lsNAME ACTIVE DRIVER STATE URLdev * virtualbox Running tcp://192.168.99.100:2376production digitalocean Running tcp://104.131.107.8:2376

マシンをアクティブにしてDocker環境をshellにロードするにはproductionを設定します.
$ docker-machine active production $ eval "$(docker-machine env production)"

最後に、クラウド上でDjangoのアプリケーションを再構築しましょう.この場合、コンテナにインストールする必要がなく、少し異なるDocker Componentファイルを使用する必要があります.どうしてですか.コンテナ自体がローカル開発に適しているため、「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アドレスを取得し、ブラウザで表示します.すべてがうまくいけば、アプリケーションが実行されているのが見えます.