初めてDockerイメージを構築、実行、公開、取得するための詳細な手順

初めてDockerイメージを構築、実行、公開、取得するための詳細な手順

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 は、コンテナによって公開されるポートを指し、実際のマシンのポートを指すものではありません。
要件.txt

フラスコ
レディス

アプリ.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 フレンドリーハロー

すべてのコンテナ情報を表示

$ dockerコンテナls
コンテナIDイメージコマンドが作成されました
1fa4ab2cf395 friendlyhello "python app.py" 28秒前

次に、以下に示すように、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 をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • Docker イメージを Docker Hub に公開する方法
  • IDEA2021.2 で docker を設定して、Springboot プロジェクトをイメージ化し、ワンクリックでリリースする方法
  • Springboot プロジェクトの Docker-compose イメージリリースプロセス分析
  • ローカルでビルドした Docker イメージを Dockerhub に公開する方法
  • Docker を使用してローカルイメージを Alibaba Cloud に公開する方法

<<:  MySQL は重複データを削除して最小の ID ソリューションを維持します

>>:  MySQL で戻り値ありと戻り値なしのストアド プロシージャを書く 2 つの方法

推薦する

JavaScript の矢印関数と通常の関数の違いの詳細な説明

この記事では、JavaScriptにおけるアロー関数と通常の関数の違いについて解説します。具体的な内...

Dockerは起動されていないコンテナの設定情報を変更します

私が初めてdockerを使用したときは、dockerfileやdocker-composeを使用して...

JS はシンプルな todoList (メモ帳) 効果を実装します

メモ帳プログラムは、HTML + CSS + JavaScript の 3 つの主要なフロントエンド...

MySQLでorder byを使用せずにランキングを実装する3つの方法のまとめ

ビジネスを想定: 2位の従業員の給与情報を見るデータベースを作成する emps が存在する場合はデー...

Bツリーの削除プロセスの紹介

前回の記事 https://www.jb51.net/article/154157.htm では、B...

MySQLユーザー権限テーブルについての簡単な説明

MySQL はインストール時に自動的に mysql という名前のデータベースを作成します。mysql...

MySQL 8.0.16 Win10 zip バージョンのインストールと設定のグラフィック チュートリアル

この記事では、MySQL 8.0.16 Win10 zip版のインストールと設定のグラフィックチュー...

CSS はこのように使用できますか?気まぐれなグラデーションの芸術

前回の記事「1行のCSSコードの魅力」では、たった1行のCSSコードで生成できる美しい(奇妙な感じと...

Vue2とVue3の兄弟コンポーネント通信バスの違いと使い方

目次vue2.x vue3.x tiny-emitterプラグインの使用Mittプラグインの使用vu...

レスポンシブWebデザイン学習(3) - モバイルデバイスでのWebページのパフォーマンスを向上させる方法

序文モバイル デバイスでは、帯域幅とプロセッサ速度の制限により、Web ページのパフォーマンスに対す...

WeChat アプレット wxs 日付と時刻処理の実装例

目次1. 日付までのタイムスタンプ2. UTCを北京時間に変換するWXS (WeiXin Scrip...

MySQL 8.0.18 のインストールと設定のグラフィックチュートリアル

学習目標: Windowsシステムを使用してMySQLデータベースをインストールする方法を学びます。...

Tomcat プロセスの CPU 使用率が高い場合のトラブルシューティング記録を記録する

この記事では主にTomcatプロセスを記録し、TCP接続が多すぎることによるCPU使用率の過剰のトラ...

MySQL データベースのマスター・スレーブ レプリケーションと読み取り/書き込み分離

目次1. マスタースレーブレプリケーションマスタースレーブレプリケーション3スレッドマスタースレーブ...

SpringBootはActiviti7実装コードを統合する

Activiti7 の正式リリース以降、SpringBoot2.x との統合開発を全面的にサポートし...