初めて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

クリックして画像を切り替えることは、日常生活で非常によく行われることです。今日の練習は、画像を切り替...

ReactでCSSをエレガントに書く方法

目次1. インラインスタイル2. インポート方法を使用する3.cssモジュールのエクスポート4. ス...

ネイティブ js カスタム右クリック メニュー

この記事の例では、参考のためにjsカスタム右クリックメニューの具体的なコードを共有しています。具体的...

nginx 503 サービスが一時的に利用できない問題を解決する方法

最近、ウェブサイトを更新すると、503 Service Temporarily Unavailabl...

HTML の基本 - CSS スタイルシート、スタイル属性、フォーマット、レイアウトの詳細

1.位置:固定一部の Web サイトの右下隅にあるポップアップ ウィンドウなどの、ブラウザーを基準と...

Windows 2019 アクティベーション チュートリアル (Office2019)

数日前、Server2019の正式版がリリースされたことを知り、面白半分でインストールしてみることに...

dockerネットワーク双方向接続の詳細な説明

Dockerネットワークを見るdocker ネットワーク ls [root@master ~]# d...

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

圧縮パッケージのインストールは、mysql-5.7 以降、大幅に変更されました。この記事では、mys...

HTML iframe で親ページと子ページ間の双方向メッセージングを実装する例

ある日、リーダーはメイン ページに iframe を埋め込み、親ページと子ページ間で双方向にメッセー...

Linux で AutoFs マウント サービスをインストールするチュートリアル

Samba サービスでも NFS サービスでも、サーバーの起動時にリモート共有リソースが自動的にマ...

Linux システムにおける時間設定の概要

1. 時間の種類は次のように分けられます。 1. ネットワーク時間(タイムゾーンの設定、ntpサーバ...

Linux での vi (vim) の新しい使い方のまとめ

私は数年間 vi エディタを使ってきましたが、実用的な用途で使ったことはありませんでした。今日 Py...

Docker構成 Alibaba Cloud Container Serviceの操作

Alibaba Cloud Dockerコンテナサービスの設定Alibaba Cloud Image...

MySQL スレーブ ライブラリ Seconds_Behind_Master 遅延の概要

目次MySQL スレーブ ライブラリ Seconds_Behind_Master 遅延の概要1. 遅...

フォント宝庫 50 種類の素晴らしい無料英語フォントリソース パート 2

デザイナーは独自のフォント ライブラリを持っているため、プロジェクトの設計時にすぐに使用できます。今...