------------------------ Dockerシリーズ ------------------------ ---- ----------
Docker | 深層学習の Docker についてはこの記事をお読みください_Deep Learning Docker-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 が設定されている場合は、ディレクトリ内の 、 、 、 または 命令を実行します。RUN CMD ADD COPY ENTRYPOINT |
音量 | ボリュームを作成したり、ボリュームを 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