Dockerfileでイメージ名を設定する方法


299

次のように、カスタムイメージを構築するときにイメージ名を設定できます。

docker build -t dude/man:v2 . # Will be named dude/man:v2

Dockerfileでイメージの名前を定義する方法はあるので、docker buildコマンドでそれを言及する必要はありませんか?


1
知りたい人は、FROM ... AS名を使用しても機能しません
Rufus

回答:


267

画像のタグ付けは、Dockerfile内ではサポートされていません。これは、ビルドコマンドで行う必要があります。回避策として、ターゲットイメージ名を識別するdocker-compose.ymlを使用してビルドを実行し、次にを実行できdocker-compose buildます。サンプルのdocker-compose.ymlは次のようになります

version: '2'

services:
  man:
    build: .
    image: dude/man:v2

とは言っても、スウォームモードのデプロイでは機能しないため、composeを使用してビルドを行うことはできません。これで、質問で指定したとおりのコマンドの実行に戻ります。

docker build -t dude/man:v2 .

個人的には、自分のフォルダー(build.sh)に小さなシェルスクリプトを使用してビルドする傾向があり、argsを渡し、入力を保存するためにそこにイメージの名前を含めます。また、本番環境では、ビルドはパイプラインスクリプト内にイメージ名を持つci / cdサーバーによって処理されます。


303

ymlファイルを使用せずにカスタム名でイメージを作成する方法:

docker build -t image_name .

カスタム名でコンテナを実行する方法:

docker run -d --name container_name image_name

78
これ以上コメントするつもりはありませんが、質問は「Dockerfileでイメージ名を設定する方法は?」でした。「Dockerイメージ名の設定方法」ではありません。その答えは問題そのものでした。
Novaterata 2017年

68
私はこれに何度か戻ってきましたが、技術的にトピックから外れていますが、この回答は
役に立ちました

7
Dockerfileイメージに使用するのと同じ名前のディレクトリにを配置しても一貫性がある場合docker build -t $(basename $PWD) .は、ビルドコマンドとして使用できます。次に、「ビルド」からCTRL-R検索を使用して、コマンドを見つけて再利用でき、編集する必要はありません。必要に応じて、エイリアスにすることもできます。
Bruno Bronosky

とにかくこの答えをありがとう。私はこれをインターネット経由で取得するために数時間費やしていました。私は適切な答えを得ることができませんでした。彼のコンテナーに名前も必要な場合、彼の画像に名前を付ける人はこれなしではこれ以上先に進むことができません。
Susaj S Nair

38

特定のDockerファイルを参照する必要がある場合の別のバージョンを次に示します。

version: "3"
services:
  nginx:
    container_name: nginx
    build:
      context: ../..
      dockerfile: ./docker/nginx/Dockerfile
    image: my_nginx:latest

その後、あなたはただ走る

docker-compose build

1
この答えがcontainer_nameとイメージname:tagの違いを示しているのが好きです。何が起こっているかについてもう少し説明があった場合のみ: "container_name"は、最終的にイメージからスピンアップされるコンテナーを指定します。「image」は、コンテナーが作成される作成されたイメージに名前とタグを付けます。他の人が述べたように、OPが尋ねたように、Dockerfileからイメージ名を指定できないため、代わりにdocker-compose.ymlファイルを使用して、「docker-compose up -d --build」で実行します
Sean McCarthy

-7

'AS' FROM ubuntu:16.04 AS FooImageを使用してこれを行うことができます


6
AS構文は、多段階のビルドに使用されるターゲット名を指定し、この名ものために、画像の代わりに使用することができるCOPY --fromという多段ビルド内の構文。ただし、ビルド自体の結果の名前/タグは指定しません。
BMitch
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.