1. 概要

Dockerはオープンソースのコンテナープラットフォームです。 これにより、アプリケーションをコンテナにパッケージ化し、アプリケーションのソースコードとオペレーティングシステムを組み合わせた実行可能コンポーネントを標準化できます。 これは、個々のコンテナを構築、共有、および実行するためのソフトウェア開発ツールキットです。

Dockerfile は、イメージの作成に使用できるコマンドのリストを含むテキストファイルです。 これは、画像の作成を自動化する最も簡単な方法です。

Dockerfileの利点の1つは、Linuxシェルコマンドと同等のコマンドを作成するだけでよいため、新しい構文を学ぶ必要がないことです。

Dockerfileを使用してイメージを構築しているときに、さまざまな問題が発生する可能性があります。 このチュートリアルでは、非常に一般的なDockerビルドの問題を解決する方法を学びます。

まず、「Dockerビルドには1つの引数が必要」というエラーを理解しましょう。

2. 問題を理解する

このセクションでは、まず、ll エラーを再現するためのサンプルDockerfileを作成してから、 使用する 違う アプローチ  解決 それさせて■名前の付いた新しいDockerfileを作成します Dockerfile 次の内容で:

FROM        centos:7
RUN         yum -y install wget \
            && yum -y install unzip \
            && yum install -y nc \
            && yum -y install httpd && \
            && yum clean all
EXPOSE      6379
ENTRYPOINT  ["ping"]
CMD  ["google.com"]

ここでは、ベースイメージとして「centos:7を使用するサンプルDockerfileを作成しました。 したがって、centosのすべてのコマンドをサポートします。

Dockerの他のユーティリティコマンドもDockerfileにインストールしました。

「Dockerビルドには1つの引数が必要」という問題を再現するコマンドは次のとおりです。

$ docker build
"docker build" requires exactly 1 argument.
See 'docker build --help'.
Usage:  docker build [OPTIONS] PATH | URL | -
Build an image from a Dockerfile

この問題は、Dockerビルドコマンドをさまざまなオプションで使用した場合にも発生します。

オプションの1つを調べてみましょう。

$ docker build -t test_image/centos
"docker build" requires exactly 1 argument.
See 'docker build --help'.
Usage:  docker build [OPTIONS] PATH | URL | -
Build an image from a Dockerfile

ここでは、どちらの場合も、「Dockerビルドには1つの引数が必要」という問題に直面しました。

3. Dockerイメージを構築するさまざまな方法

前に、「Dockerビルドには1つの引数が必要です」というエラーを解決するために進みます。まず、さまざまなオプションを使用したDockerビルドコマンドを理解しましょう。

DockerビルドはDockerデーモンによって実行されます。 まず、Dockerビルドはコンテキスト全体をデーモンに送信します。 理想的な状況は、空のディレクトリから開始し、Dockerfileを使用してDockerイメージを構築するために必要なファイルのみを追加することです:

$ docker build .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM        centos:7
14.04: Pulling from library/centos
2e6e20c8e2e6: Extracting [============>                                      ]  17.83MB/70.69MB
0551a797c01d: Download complete 
512123a864da: Download complete 

-f フラグを使用して、特定の場所からDockerfileをポイントすることでイメージを構築することもできます。

$ docker build -f /root/dockerImage/Dockerfile .

イメージにタグを付けるために、Dockerビルドコマンドで-tオプションを使用できます。

$ docker build -t test_image/centos .

Dockerビルドコマンドを使用してビルド引数を渡すこともできます。

$ docker build -t test_image/centos --build-arg JAVA_ENV=1.8  .

イメージのビルドをクリーンアップするには、次のコマンドで –no-cacheオプションを使用できます。

$ docker build -t test_image/centos --build-arg JAVA_ENV=1.8  --no-cache .

古いバージョンのDockerでは、 –no-cache = true を渡す必要がありましたが、新しいバージョンの場合はそうではありません。 Dockerfile のようにファイル名を付けずにDockerfileを作成することもできます。

$ docker build -f /root/dockerImage/DockerFile_JAVA .

ここでは、DockerFile_JAVAファイル名を使用してDockerイメージを作成しました。

4. 不十分な議論のため

「Dockerビルドには1つの引数が必要」エラーの最も一般的な理由は、十分な引数を指定せずにイメージをビルドしようとした場合です。ここで、引数で、ディレクトリにコマンドを指定する必要があります。

デフォルトでは、シェルの現在の作業ディレクトリをビルドコンテキストとして使用するようにDockerデーモンを指定するコマンドにdot(。)を指定しました。

$ docker build .

dot(。)は基本的に、Dockerfileを現在のディレクトリから使用する必要があることをDockerに通知します。 次のコマンドを使用して、Dockerビルドコンテキストを変更することもできます。

$ docker build /root/test

直面する可能性のあるDockerビルドに関連する別の問題:

$ docker build -f /root/test/Dockerfile2 .
unable to prepare context: unable to evaluate symlinks in Dockerfile path:
  lstat /root/test/Dockerfile2: no such file or directory

上記のコマンドでは、ファイル名「Dockerfile2」を使用してDockerイメージを構築しようとしています。このファイルが現在のディレクトリに存在しない場合、次のエラーが発生します。

unable to prepare context: unable to evaluate symlinks in Dockerfile path:
  lstat /root/test/Dockerfile2: no such file or directory

この問題を解決するには、-fオプションを使用して正しいファイル名を指定する必要があります。

5. 結論

このチュートリアルでは、Dockerビルドコマンドに関連する問題について学習しました。

最初に、Dockerイメージをビルドするさまざまな方法を検討し、次にDockerビルド引数の問題に対処し、最後に、Dockerビルドコマンドに関連するいくつかの問題を学習しました。