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 つの方法
序文ソースコードは合計で 100 行強しかありません。これを読めば、react-dnd などの成熟し...
コンテキストの定義と目的コンテキストは、コンポーネント ツリーにプロパティを明示的に渡すことなく、コ...
目次QRコードログインの真髄QRコードを理解するシステム認証メカニズムQRコードをスキャンしてログイ...
優先度両方のケースで同じ条件を設定すると、異なる結果セットが生成される可能性があるのは、優先順位のた...
Linux viコマンドの詳しい説明vi エディタは、すべての Unix および Linux システ...
目次vue - スワイパープラグインを使用してカルーセルを実装するカルーセルのバグを解決するには、w...
この記事では、WindowsでのMySQL 5.7.18のインストールと設定のチュートリアルを参考ま...
MySQL binlog は MySQL ログの中で非常に重要なログであり、データベースのすべての ...
要件は次のとおりですテーブル構造、フィールドコメント情報、テーブル名などをエクスポートします。これは...
1. ゴミかクラシックか? Web テクノロジーは急速に更新されており、Web サイトのインターフェ...
HTML ファイルとは何ですか? HTML は Hyper Text Markup Language...
.NET の世界に参入したい開発者であれば、何が可能なのかを知る必要があります。 .NET Fram...
2次元配列の次元削減配列インスタンスメソッド concat と ES6 スプレッド演算子を使用した次...
CSS のFlex(彈性布局)すると、Web ページのレイアウトを柔軟に制御できます。Flex Fl...
目次Prometheusはエクスポーターを介してMySQLを監視し、Grafanaチャートで表示しま...