2016-09-01 5 views
0

Dockerコンテナをプロダクションに展開するためのさまざまな戦略とDev Opsyのアーキテクチャがあることを認識していますが、私はDockerの基本をいくつか学んでいて、次のものを移動する最も直接的な方法を本当に探していますたとえば、AWSまたは別のリモートサイトに私はさまざまなコンテナにプロジェクトをセットアップしてリンクする方法を理解していると思いますが、既存のコードを保存またはパッケージ化して他の場所に配置する方法を理解できません。コードを実際にパッケージ化して移動するにはどうすればよいですか?

ここには、私が取り組もうとしているサンプルテンプレートがあります。

ドッカー-作曲

web: 
    restart: always 
    build: ./web 
    expose: 
    - "8000" 
    links: 
    - postgres:postgres 
    - redis:redis 
    volumes: 
    - /usr/src/app 
    - /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 
    ports: 
    - "5432:5432" 
    volumes: 
    - pgdata:/var/lib/postgresql/data/ 

redis: 
    restart: always 
    image: redis:latest 
    ports: 
    - "6379:6379" 
    volumes: 
    - redisdata:/data 

Dockerfile

FROM python:2.7 
ENV PYTHONUNBUFFERED 1 
RUN mkdir /code 
WORKDIR /code 
ADD requirements.txt /code/ 
RUN pip install -r requirements.txt 
ADD . /code/ 

このDockerfileちょうど私が実際の開発が行われると仮定した場合は 'コード' というディレクトリが作成されます。すなわち、ドッカーの作成を実行すると、コンテナが作成され、コードディレクトリで開発が開始されます。だから私が何をやっていても、上記のまったく同じテンプレートを使ってプロダクションにデプロイすると、このDockerfileはAWSに空の 'code'ディレクトリを作成しませんか?ローカルマシンのコードディレクトリから展開しようとしている作業はどうですか?実際のコードディレクトリをパッケージ化して本番環境に移行するにはどうすればよいですか?

+0

私は自分のプロジェクトから新しいイメージを作成し、その新しいイメージを新しいDockerfileで展開しますか? – Ben

答えて

1

docker buildの結果は、アプリケーションを実行するために必要なすべてのコマンド、スクリプト、コンパイル済みコード、および解釈済みコードを含むイメージにする必要があります。開発者は、コンテナ全体を常に再構築しないように変更を加えている間に、ボリュームマウントを使用してこのコードの独自のコピーを画像に挿入することができます(ドッカーのレイヤーキャッシュはビルド時間を短縮します)。

一度構築されると、あなたの画像はdocker pushまでレジストリサーバまでアップロードされます。 Docker Hubを使用するか、または独自の商用サービスに加えてレジストリイメージを持つドッカーを使用することもできます。また、AWSなどの第三者が提供するものを使用することもできます。次に、運用環境にdocker pullを配置し、このイメージを実行する必要があります。

+0

私の例では、dockerビルドでは、私の推測しているどこでも私のアプリケーションを実行しませんでした。私のdockerfileは、新しいDjangoプロジェクトを開始するための新しいディレクトリを作成するからです。私は私の既存のコードをインポートする新しいDockerfileを作成する必要があると思いますか?多分私はこれを正しく理解していないでしょう。 – Ben

関連する問題