Docker | Docker を使用してカスタム イメージを作成し、人工知能プロジェクトと環境をカプセル化する

------------------------ Dockerシリーズ ------------------------ ---- ----------

Docker | 深層学習の Docker についてはこの記事をお読みください_Deep Learning Docker-CSDN ブログ

Docker | リモート サーバー Linux を使用して pytorch コンテナを作成し、GitHub でファイルをダウンロードし、Layout2img プロジェクトを実行します (ステップバイステップ)_linux github ファイルのダウンロード - CSDN ブログ

Docker | docker を使用して porttainer をインストールする詳細な手順-CSDN ブログ 

Docker | 独自の Docker イメージを Docker Hub にプッシュする [画像とテキストの詳細] - CSDN ブログ

Docker は、軽量のコンテナーでアプリケーションをパッケージ化し、デプロイし、実行するためのツールです。Docker の基本を学びたい場合は、上記のブログを参照してください。

1.Dockerfileの記述ルール

Dockerfile では、左側にあるものはすべて INSTRUCTION で、右側はこれらの命令の ARGUMENTです。

Dockerfile 内のすべての命令はレイヤーを構築しますが、RUN これも例外ではありません。それぞれ の動作RUN は、先ほど手動でミラーを確立するプロセスと同じです。新しいレイヤーを作成し、その上でこれらのコマンドを実行します。実行が完了すると、commit このレイヤーの変更によって新しいミラーが構成されます。

Dockerfile の命令 説明する
から コンテナー レジストリ (Docker ハブ、GCR、Quay、ECR など) からプルできるベース イメージを指定します。
走る イメージ構築プロセス中にコマンドを実行します。
環境 イメージに環境変数を設定します。これは、ビルド中だけでなく、実行中のコンテナーでも使用できます。ビルド時変数を設定したいだけの場合は、ARG ディレクティブを使用します。
コピー ローカルファイルとディレクトリをイメージにコピー
さらす Dockerコンテナ用に公開するポートを指定します。
追加 これは、COPY 命令のより機能が豊富なバージョンです。また、URL からソースとしてコピーしたり、  tar ファイルをイメージに自動的に抽出したりすることもできます。ただし、ADD の代わりに COPY コマンドを使用することをお勧めします。リモート ファイルをダウンロードする場合は、curl を使用するか、RUN を使用して取得します。
作業ディレクトリ 現在の作業ディレクトリを設定します。Dockerfile でこのディレクティブを再利用して、別の作業ディレクトリを設定できます。WORKDIR が設定されている場合は、ディレクトリ内の 、 、 、 または 命令を実行します。RUNCMDADDCOPYENTRYPOINT
音量 ボリュームを作成したり、ボリュームを Docker コンテナにマウントしたりするために使用されます。
ユーザー コンテナの実行時にユーザー名とUIDを設定します。このディレクティブを使用して、コンテナに非 root ユーザーを設定できます。
ラベル Dockerイメージを指定するために使用されるメタデータ情報
ARG キーと値を使用してビルド時の変数を設定するために使用されます。ARG 変数は、コンテナーの実行中は使用できません。実行中のコンテナ上で変数を永続化したい場合は、ENV を使用します。
シェル このディレクティブは、その後に続く RUN、CMD、および ENTRYPOINT ディレクティブのシェル オプションとデフォルトのシェルを設定します。
CMD 実行中のコンテナーでコマンドを実行するために使用されます。CMD は 1 つだけです。複数の CMD がある場合は、最後の CMD のみが適用されます。これはDocker CLI から オーバーライドできます。
エントリーポイント Dockerコンテナの起動時に実行されるコマンドを指定します。ENTRYPOINT が指定されていない場合は、デフォルトで ENTRYPOINT が使用されます。CLI を使用してflags を使用してENTRYPOINT をオーバーライドすることもできます。詳細については、  「CMD と ENTRYPOINT の比較」を参照してください。/bin/sh -c--entrypoint

   

 Docker イメージはフェデレーテッド マウントを使用して順次 (レイヤーごとに) マウントされ、イメージはコンテナー内に構築されます。

2. Dockerイメージをカスタマイズする

2.1. 方法 1: Dockerfile を使用してイメージを作成する [最も一般的に使用される]

2.1.1.Dockerfileの作成

新しい Dockerfile を作成し、環境を書き込みます

FROM nvcr.io/nvidia/pytorch:22.12-py3 

RUN apt-get update \
 && apt-get install -y espeak

WORKDIR /app

COPY MB-iSTFT-VITS2 /app/MB-iSTFT-VITS2

WORKDIR /app/MB-iSTFT-VITS2

RUN /usr/bin/python -m pip install --upgrade pip \
 && pip install -r requirements.txt 


EXPOSE 6843

ENV FLASK_APP=app.py

#CMD ["python", "/app/app.py"]
CMD ["flask", "run", "--host=0.0.0.0"]

2.2.2.イメージのビルド

Dockerfileを使用してDockerイメージを構築する

基本的な構文は次のとおりです。

docker build [OPTIONS] PATH | URL | -

 docker build --no-cache -t tts:v0.1 -f ./Dockerfile 。

  

2.3.3 ミラーの使用

ビルドイメージを表示する

  

2.3.3.1. ミラーを直接使用する

画像をカプセル化する際に flask などのネットワーク フレームワークを使用して構成すると、カスタマイズを通じてターゲット認識や音声合成などを直接実装できます この記事では人工知能アルゴリズム モデル + flask フレームワークを使用します。

 docker run -p 5000:5000 tts:v0.1 python app.py --text 

または

 docker run -p 5000:5000 tts:v0.1 python app.py --text 

エラーが発生した場合は【PS1】を参照してください。

2.3.3.2. カプセル化されたイメージを使用したコンテナの生成

 docker run -it --gpus all --ipc host --net host --name tts-test insanena414/tts_v1:latest /bin/bash

 

2.2. 方法 2: Git リポジトリを使用して作成する

 docker build -t hello-world https://github.com/docker-library/hello-world.git#master:amd64/hello-world

このコマンドは、ビルドに必要な Git リポジトリを指定し、ブランチを として、 masterビルド ディレクトリを として 指定します/amd64/hello-world/。その後、Docker はプロジェクトに移動し git clone 、指定されたブランチに切り替え、指定されたディレクトリに入ってビルドを開始します。

2.3. 方法 3: tar 圧縮パッケージを使用して作成する

docker build my.tar.gz

プロセス中に発生した問題とその解決策 [追記]

【PS1】docker: デーモンからのエラー応答: シムタスクの作成に失敗しました: OCI ランタイムの作成に失敗しました: runc create に失敗しました: コンテナプロセスを開始できません: コンテナ初期化中のエラー: フック実行中のエラー #1: フック実行中のエラー: 終了ステータス 1、 stdout: 、stderr: 「レガシー」として自動検出されたモード

  エラー分析: コンピューターの現在の cuda デバイスのバージョンが torch のバージョンと一致していない可能性があります。

参考文献

【1】Dockerfileを使ってイメージをカスタマイズする・Docker -- 入門から実践まで(docker-practice.github.io)

【2】Dockerイメージの構築方法 [初心者向け総合ガイド] (devopscube.com) 

【3】頻繁に変更されるドッカーイメージを素早く配布する(feat.イメージサイズ) 雑雑ブログ (kimeuichan.github.io)  【4】Top 20 Dockerfile best practices for security – Sysdig

おすすめ

転載: blog.csdn.net/weixin_44649780/article/details/135100119