初めて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 つの方法

推薦する

Reactドラッグフックを実装するための100行以上のコード

序文ソースコードは合計で 100 行強しかありません。これを読めば、react-dnd などの成熟し...

Reactにおけるコンテキスト適用シナリオの分析

コンテキストの定義と目的コンテキストは、コンポーネント ツリーにプロパティを明示的に渡すことなく、コ...

js QRコードスキャンログインの原理についての簡単な説明

目次QRコードログインの真髄QRコードを理解するシステム認証メカニズムQRコードをスキャンしてログイ...

MySQL の左結合操作における on 条件と where 条件の違いの紹介

優先度両方のケースで同じ条件を設定すると、異なる結果セットが生成される可能性があるのは、優先順位のた...

Linux viコマンドの知識ポイントと使い方のまとめ

Linux viコマンドの詳しい説明vi エディタは、すべての Unix および Linux システ...

スワイパープラグインを使用して Vue でカルーセルを実装する例

目次vue - スワイパープラグインを使用してカルーセルを実装するカルーセルのバグを解決するには、w...

Windows での MySQL 5.7.18 のインストールと設定のチュートリアル

この記事では、WindowsでのMySQL 5.7.18のインストールと設定のチュートリアルを参考ま...

MySQLはデータ復旧を実装するためにbinlogログを使用する

MySQL binlog は MySQL ログの中で非常に重要なログであり、データベースのすべての ...

MySQL テーブル構造を Excel にエクスポートする方法

要件は次のとおりですテーブル構造、フィールドコメント情報、テーブル名などをエクスポートします。これは...

Web デザインの経験: 独善的な Web デザイナー

1. ゴミかクラシックか? Web テクノロジーは急速に更新されており、Web サイトのインターフェ...

HTMLの基礎 HTMLの構造

HTML ファイルとは何ですか? HTML は Hyper Text Markup Language...

JavaScript で localStorage を使用する方法

.NET の世界に参入したい開発者であれば、何が可能なのかを知る必要があります。 .NET Fram...

JS配列の次元削減のいくつかの方法の詳細な説明

2次元配列の次元削減配列インスタンスメソッド concat と ES6 スプレッド演算子を使用した次...

フレックスレイアウトにおけるflex-growとflex-shrinkの計算方法の詳しい説明

CSS のFlex(彈性布局)すると、Web ページのレイアウトを柔軟に制御できます。Flex Fl...

PrometheusはGrafanaディスプレイを使用してMySQLを監視します

目次Prometheusはエクスポーターを介してMySQLを監視し、Grafanaチャートで表示しま...