1. はじめに 以前は、Python アプリケーションの作成を開始したい場合、最初のステップはマシンに Python ランタイム環境をインストールすることでしたが、インストールされた環境はオンラインの環境と一致している必要があり、非常に面倒でした。 Docker を使用すると、インストールせずに、公式の Docker レジストリまたはその他のリポジトリからポータブルな Python ランタイム環境イメージを取得できます。このイメージに基づいてアプリケーションを開発すると、アプリケーション、依存関係、ランタイムがすべて一緒に実行されるようになります。 2. Pythonイメージを構築する 2.1. 独自のイメージを構築するには、まず Dockerfile というファイルを作成し、イメージを作成してコンテナを実行するために必要な手順を定義する必要があります。 Dockerfile 内の各命令はイメージ内にレイヤーを作成します。 Dockerfile を変更してイメージを再構築すると、変更されたレイヤーのみが再構築されます。これが、他の仮想化テクノロジーと比較して、イメージが軽量、小型、高速になる理由の 1 つです。 空のディレクトリを作成し、Dockerfile というファイルを作成し、次の内容をコピーしてファイルに貼り付け、保存します。 # 公式のPythonランタイムを親イメージとして使用する python:2.7-slimより # 作業ディレクトリを /app に設定する ワークディレクトリ /app # 現在のディレクトリの内容を /app のコンテナにコピーします ./app を追加する # requirements.txt で指定された必要なパッケージをインストールします pip install --trusted-host pypi.python.org -r requirements.txt を実行します。 # ポート80をコンテナ外からアクセスできるようにする エクスポーズ80 # 環境変数を定義する ENV NAME ワールド # コンテナが起動したらapp.pyを実行します コマンド ["python", "app.py"] 2.2 Dockerfile ファイルと同じディレクトリに requirements.txt ファイルと app.py ファイルを作成します。 Dockerfile ファイル内の ADD コマンドにより、上記 2 つのファイルが最終イメージに追加されます。EXPOSE コマンドにより、コンテナのポート 80 にアクセスすることで app.py の内容にアクセスできます。注: ここでのポート 80 は、コンテナによって公開されるポートを指し、実際のマシンのポートを指すものではありません。
アプリ.py FlaskからFlaskをインポート RedisからRedisをインポートすると、RedisError インポートOS インポートソケット # Redisに接続する redis = Redis(ホスト = "redis"、db = 0、socket_connect_timeout = 2、socket_timeout = 2) アプリ = Flask(__name__) @app.route("/") デフハロー(): 試す: 訪問数 = redis.incr("counter") RedisErrorを除く: visits = "<i>Redis に接続できません。カウンターが無効です</i>" html = "<h3>こんにちは {name}!</h3>" \ "<b>ホスト名:</b> {ホスト名} <br/>" \ 「<b>訪問数:</b> {訪問数}」 html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits) を返します。 __name__ == "__main__" の場合: app.run(ホスト='0.0.0.0'、ポート=80) 2.3 アプリケーションをミラーにパッケージ化し、DockerFile ディレクトリで実行します。これにより、Docker イメージが作成され、イメージにわかりやすい名前が付けられるように -t でタグ付けされます。 docker ビルド -t フレンドリーハロー 3. イメージを実行する -p を使用してアプリケーションを実行し、マシン上のポート 4000 をコンテナーによって公開されているポート 80 にマップします。 docker run -p 4000:80 フレンドリーハロー シェルで curl コマンドを使用して同じ内容を表示することもできます。 $ カール http://localhost:4000 <h3>Hello World!</h3><b>ホスト名:</b> 8fc990912a14<br/><b>訪問数:</b> <i>Redis に接続できません。カウンターが無効です</i> アプリケーションを終了するにはCtrl+Cを押してください 次に、アプリケーションをバックグラウンドで実行します。 docker run -d -p 4000:80 フレンドリーハロー すべてのコンテナ情報を表示
次に、以下に示すように、CONTAINER ID を使用して docker container stop を実行し、プロセスを終了します。 docker コンテナ停止 1fa4ab2cf395 4. イメージを解放する 4.1. Alibaba Cloud の Docker レジストリを使用していますが、こちらの方が高速だと思います。まず、Alibaba Cloud アカウントが必要です。次に、ログインして新しいウェアハウスを作成し、名前空間やその他の情報を設定します。 4.2 Alibaba Cloud の Docker レジストリにログインします。以降の操作を実行するにはログインが必要です。 sudo docker ログイン --username=admin registry.cn-hangzhou.aliyuncs.com 4.3 イメージにタグを付けます。タグはオプションです。タグを付けない場合、デフォルトは最新です。 形式: docker タグ image_name registry_url/namespace/repository_name:[タグ] 例えば docker タグ friendlyhello registry.cn-hangzhou.aliyuncs.com/shuzhou/demo1:latest ローカルミラーリストを表示する dockerイメージls 4.4 イメージをリリースする docker push registry.cn-hangzhou.aliyuncs.com/shuzhou/demo1:latest 4.5 これで、任意のマシンで次のコマンドを実行してイメージを実行できます。 docker run -p 4000:80 registry.cn-hangzhou.aliyuncs.com/shuzhou/demo1:latest 4.6 イメージをプルする docker pull registry.cn-hangzhou.aliyuncs.com/shuzhou/demo1:latest 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。 以下もご興味があるかもしれません:
|
<<: MySQL は重複データを削除して最小の ID ソリューションを維持します
>>: MySQL で戻り値ありと戻り値なしのストアド プロシージャを書く 2 つの方法
この記事では、JavaScriptにおけるアロー関数と通常の関数の違いについて解説します。具体的な内...
私が初めてdockerを使用したときは、dockerfileやdocker-composeを使用して...
メモ帳プログラムは、HTML + CSS + JavaScript の 3 つの主要なフロントエンド...
ビジネスを想定: 2位の従業員の給与情報を見るデータベースを作成する emps が存在する場合はデー...
前回の記事 https://www.jb51.net/article/154157.htm では、B...
MySQL はインストール時に自動的に mysql という名前のデータベースを作成します。mysql...
この記事では、MySQL 8.0.16 Win10 zip版のインストールと設定のグラフィックチュー...
前回の記事「1行のCSSコードの魅力」では、たった1行のCSSコードで生成できる美しい(奇妙な感じと...
目次vue2.x vue3.x tiny-emitterプラグインの使用Mittプラグインの使用vu...
序文モバイル デバイスでは、帯域幅とプロセッサ速度の制限により、Web ページのパフォーマンスに対す...
目次1. 日付までのタイムスタンプ2. UTCを北京時間に変換するWXS (WeiXin Scrip...
学習目標: Windowsシステムを使用してMySQLデータベースをインストールする方法を学びます。...
この記事では主にTomcatプロセスを記録し、TCP接続が多すぎることによるCPU使用率の過剰のトラ...
目次1. マスタースレーブレプリケーションマスタースレーブレプリケーション3スレッドマスタースレーブ...
Activiti7 の正式リリース以降、SpringBoot2.x との統合開発を全面的にサポートし...