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

推薦する

Docker Composeを使用してDOCleverをインストールする詳細なプロセスを説明します

目次1. Docker Composeとは何か、インストールして使用する方法2. DOCleverと...

Windows Server 2016 に MySQL 5.7.19 の解凍バージョンをインストールするための詳細なチュートリアル

MySQL 5.7.19 winx64 解凍版のインストールチュートリアルを収録しています。具体的な...

HTML のボタン タグをクリックしてページにジャンプする 3 つの方法

方法1: onclickイベントを使用する <input type="button&...

nginxで複数のサーバーを簡単に構成する方法

1: nginx のインストール方法については詳しく説明しません。Baidu で検索してください。 ...

Vue でコミュニケーションを実装する 8 つの方法

目次1. コンポーネント通信1. Props 親コンポーネント ---> 子コンポーネント通信...

Vue フロントエンドで PDF を生成してダウンロードする方法

目次1. インストールと導入2. PDFファイルをパッケージ化してエクスポートする方法構成の詳細PD...

Oracle の開閉の 4 つのモード

>1 データベースを起動するcmd コマンド ウィンドウで、「sqlplus」を直接入力して ...

Nginx SSL証明書設定エラーの解決策

1. はじめにWeb プロジェクトを Linux サーバーで公開する場合、SSL 証明書を構成する必...

mysql はフィールドコンテンツの一部を置き換え、mysql は関数 replace() を置き換えます。

[mysql] replace の使用方法 (フィールドの内容の一部を置き換える) [mysql]...

Mac OS に MySQL 5.7.20 をインストールするための詳細なグラフィックとテキストの説明

Mac OS X で TAR.GZ から MySQL 5.7 をインストールする MySQL 5.6...

MySQL のロングトランザクション例の詳細な説明

序文: 「MySQL 入門」シリーズの記事は終了しました。今後も引き続き MySQL に焦点を当て、...

Vue3 を使用してポップアップ コンポーネントをカプセル化するのは簡単ですか?

目次最初に要約: 🌲🌲 序文: 🍬🍬公開🍬🍬 🍬🍬グローバル🍬🍬 🍬🍬ボールボックス🍬🍬 🎉🎉🎉結論...

mysql5.6 の無効な utf8 設定の問題を解決する

mysql5.6 のグリーン バージョンを解凍すると、my-default.ini ファイルが作成さ...

MySQL でコミットされていないトランザクション情報を見つける方法

少し前に、「ORACLE でコミットされていないトランザクションの SQL ステートメントを見つける...

MySQL 8のパスワードを忘れた場合のベストな対処法の簡単な分析

序文MySQL に精通している読者は、MySQL が非常に迅速に更新されることに気付くかもしれません...