2

(Python) Standard Runtime Managed VM をカスタマイズしたいと考えています。理論的には、これは VM の Dockerfile にいくつかのコマンドを追加することで可能になるはずです。

Google のドキュメントには、アプリケーションが最初にデプロイされたときに VM Dockerfile が自動的に生成されると記載されています。

標準ランタイムを使用している場合、gcloud preview app deploy コマンドを初めて実行するときに、SDK によって Dockerfile が作成されます。ファイルは所定の場所に存在します。

  • Java で開発している場合、Dockerfile はコンパイルされた Web アプリケーション アーカイブ ディレクトリ (WAR) のルートに表示されます。
  • Python または Go で開発している場合、Dockerfile はアプリケーション ディレクトリのルートに表示されます。

そして、その余分なコマンドは実際に追加できます。

このファイルにさらに docker コマンドを追加しながら、標準のランタイム宣言を使用してアプリの実行とデプロイを続行できます。

ただし、実際には、デプロイが完了した直後に Dockerfile が自動的に削除されるため、カスタマイズが妨げられます。

標準ランタイムを使用してマネージド VM に Dockerfile コマンドを追加できた人はいますか? どんな助けでも感謝します。

4

2 に答える 2

2

私は同じことを試みましたが、成功しませんでした。ただし、これを行うには、私が戻った同等の方法があります。

標準ランタイムを模倣するカスタム ランタイムを作成できます。

これを行うことができるのは、Google がすべての標準ランタイムの Dockerベース イメージを提供しているためです。したがって、標準ランタイムを模倣するには、カスタム ランタイムの Dockerfile で適切なベース イメージを選択するだけです。標準の Python App Engine VM の場合、Dockerfile は次のとおりです。

FROM gcr.io/google_appengine/python-compat
ADD . /app

標準ランタイムをカスタム ランタイムとして再作成したので、Dockerfile を変更して必要なカスタマイズを行うことができます。

重要な注意点

開発サーバーはカスタム Dockerfile をサポートしていないため (--custom-entrypoint に関するエラーが発生します)、これを行う場合は、テスト環境を App Engine サーバーに移動する必要があります。これは、標準のランタイムを使用して Dockerfile をカスタマイズする場合でも、カスタム ランタイムを使用する場合でも同じだと思います。この回答を参照してください。

于 2015-12-11T18:13:47.447 に答える
0

カスタム ランタイムで動作しない開発サーバーに関する注意 - dev_appserver.pyは Docker または Dockerfiles を処理しません。ただし、回避策として、依存関係をローカルで手動で設定できます。python-compatに基づくカスタム ランタイムを使用する「 appengine-vm-fortunespeak 」を使用した例を次に示します。

$ git clone https://github.com/GoogleCloudPlatform/appengine-vm-fortunespeak-python.git 
$ cd appengine-vm-fortunespeak-python 

# Local dependencies from Dockerfile must be installed manually 
$ sudo pip install -r requirements.txt 
$ sudo apt-get update && install -y fortunes libespeak-dev 

# We also need gunicorn since its used by python-compat to serve the app 
$ sudo apt-get install gunicorn 

# This is straight from dev_appserver.py --help 
$ dev_appserver.py app.yaml --custom_entrypoint="gunicorn -b localhost:{port} main:app" 

互換性のないイメージを使用している場合は、Dockerを使用してアプリを直接実行できます。これは、従来の App Engine API をエミュレートする必要がないためですランタイム:

$ git clone https://github.com/GoogleCloudPlatform/getting-started-python.git 
$ cd 6-pubsub 

# (Configure the app according to the tutorial ...)

$ docker build . 
$ docker images # (note the IMAGE_ID) 
$ docker run -p 127.0.0.1:8080:8080 -t IMAGE_ID

-compatイメージで上記を試すと、問題が発生します。たとえば、python-compatでは、runtime/google/appengine/tools/vmboot.py に初期化エラーが表示されます。実際のマネージド VM インスタンスで実行する必要があります。

于 2015-12-13T05:20:09.173 に答える