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 つの方法
クリックして画像を切り替えることは、日常生活で非常によく行われることです。今日の練習は、画像を切り替...
目次1. インラインスタイル2. インポート方法を使用する3.cssモジュールのエクスポート4. ス...
この記事の例では、参考のためにjsカスタム右クリックメニューの具体的なコードを共有しています。具体的...
最近、ウェブサイトを更新すると、503 Service Temporarily Unavailabl...
1.位置:固定一部の Web サイトの右下隅にあるポップアップ ウィンドウなどの、ブラウザーを基準と...
数日前、Server2019の正式版がリリースされたことを知り、面白半分でインストールしてみることに...
Dockerネットワークを見るdocker ネットワーク ls [root@master ~]# d...
圧縮パッケージのインストールは、mysql-5.7 以降、大幅に変更されました。この記事では、mys...
ある日、リーダーはメイン ページに iframe を埋め込み、親ページと子ページ間で双方向にメッセー...
Samba サービスでも NFS サービスでも、サーバーの起動時にリモート共有リソースが自動的にマ...
1. 時間の種類は次のように分けられます。 1. ネットワーク時間(タイムゾーンの設定、ntpサーバ...
私は数年間 vi エディタを使ってきましたが、実用的な用途で使ったことはありませんでした。今日 Py...
Alibaba Cloud Dockerコンテナサービスの設定Alibaba Cloud Image...
目次MySQL スレーブ ライブラリ Seconds_Behind_Master 遅延の概要1. 遅...
デザイナーは独自のフォント ライブラリを持っているため、プロジェクトの設計時にすぐに使用できます。今...