Bagaimana cara mengatur nama gambar di Dockerfile?

299

Anda dapat menetapkan nama gambar saat membuat gambar khusus, seperti ini:

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

Apakah ada cara untuk mendefinisikan nama gambar di Dockerfile, jadi saya tidak perlu menyebutkannya dalam docker buildperintah?

gvlasov
sumber
1
Bagi siapa pun yang penasaran, menggunakan FROM ... SEBAGAI nama TIDAK berfungsi
Rufus

Jawaban:

267

Pemberian tag pada gambar tidak didukung di dalam Dockerfile. Ini perlu dilakukan dalam perintah build Anda. Sebagai solusinya, Anda bisa melakukan build dengan docker-compose.yml yang mengidentifikasi nama gambar target dan kemudian menjalankan a docker-compose build. Contoh docker-compose.yml akan terlihat seperti

version: '2'

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

Yang mengatakan, ada dorongan untuk tidak melakukan build dengan compose karena itu tidak bekerja dengan penyebaran mode swarm. Jadi Anda kembali menjalankan perintah seperti yang Anda berikan dalam pertanyaan Anda:

docker build -t dude/man:v2 .

Secara pribadi, saya cenderung membangun dengan skrip shell kecil di folder saya (build.sh) yang melewati semua argumen dan menyertakan nama gambar di sana untuk menyimpan pengetikan. Dan untuk produksi, build ditangani oleh server ci / cd yang memiliki nama gambar di dalam skrip pipa.

BMitch
sumber
303

Cara membuat gambar dengan nama khusus tanpa menggunakan file yml:

docker build -t image_name .

Cara menjalankan wadah dengan nama khusus:

docker run -d --name container_name image_name
salehinejad
sumber
78
Saya tidak akan berkomentar lebih jauh tetapi pertanyaannya adalah "Bagaimana cara mengatur nama gambar di Dockerfile?" Tidak "Bagaimana mengatur nama gambar buruh pelabuhan?" Jawaban itu ada dalam pertanyaan itu sendiri.
Novaterata
68
Saya sudah kembali ke ini beberapa kali, dan jawaban ini telah membantu, meskipun secara teknis di luar topik
gdbj
7
Jika Anda konsisten jika meletakkan Dockerfiledirektori dalam dengan nama yang sama seperti yang Anda inginkan untuk gambar Anda, Anda dapat menggunakan docker build -t $(basename $PWD) .perintah build Anda. Kemudian Anda dapat menggunakan pencarian CTRL-R dari "build" untuk menemukan dan menggunakan kembali perintah dan tidak perlu mengeditnya. Anda juga bisa menjadikannya sebagai alias jika suka.
Bruno Bronosky
Terima kasih atas jawaban ini. Saya menghabiskan beberapa jam untuk mendapatkan ini melalui internet. Saya tidak bisa mendapatkan jawaban yang tepat, orang yang memberi nama pada gambarnya tidak bisa melangkah lebih jauh tanpa ini jika dia perlu nama ke wadahnya juga.
Susaj S Nair
38

Ini adalah versi lain jika Anda harus merujuk file buruh pelabuhan tertentu:

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

Maka Anda hanya lari

docker-compose build
David Dehghan
sumber
1
Saya suka bahwa jawaban ini menunjukkan perbedaan antara nama_paket dan nama gambar: tag. Kalau saja ada sedikit penjelasan lebih lanjut tentang apa yang terjadi: "container_name" menamai wadah yang akhirnya dipintal dari gambar. "gambar" menamai dan menandai gambar yang dibuat, dari mana wadah itu dibuat. Seperti yang disebutkan orang lain, seseorang tidak dapat menentukan nama gambar dari Dockerfile, seperti yang diminta OP, jadi kami menggunakan file docker-compose.yml, dan menjalankannya dengan "docker-compose up -d --build"
Sean McCarthy
-7

Anda dapat melakukan ini menggunakan 'AS' DARI ubuntu: 16.04 AS FooImage

Richard
sumber
6
The ASsintaks menentukan nama target yang digunakan dalam multi-tahap membangun, dan nama ini juga dapat digunakan di tempat gambar untuk COPY --fromsintaks dalam yang multi-tahap membangun. Namun, itu tidak menentukan nama / tag yang dihasilkan untuk build itu sendiri.
BMitch