จะตั้งชื่อภาพใน Dockerfile ได้อย่างไร?


299

คุณสามารถตั้งชื่อภาพเมื่อสร้างภาพที่กำหนดเองเช่นนี้:

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

มีวิธีการกำหนดชื่อของภาพใน Dockerfile ดังนั้นฉันไม่ต้องพูดถึงมันในdocker buildคำสั่งหรือไม่?


1
สำหรับใครที่อยากรู้อยากเห็นการใช้จาก ... ชื่อ ASไม่ทำงาน
รูฟัส

คำตอบ:


266

ไม่สนับสนุนการแท็กของภาพภายใน Dockerfile สิ่งนี้จะต้องทำในคำสั่งการสร้างของคุณ เป็นวิธีแก้ปัญหาที่คุณสามารถทำสร้างกับนักเทียบท่า-compose.yml docker-compose buildที่ระบุชื่อภาพเป้าหมายและเรียกใช้ ตัวอย่างนักเทียบท่า-compose.yml จะดูเหมือน

version: '2'

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

ที่กล่าวว่ามีการผลักดันกับการสร้างด้วยการเขียนเพราะไม่ได้ทำงานกับโหมด swarm ปรับใช้ ดังนั้นคุณจะกลับไปใช้คำสั่งตามที่คุณให้ไว้ในคำถามของคุณ:

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?" ไม่ใช่ "วิธีตั้งชื่อภาพนักเทียบท่า" คำตอบนั้นอยู่ในคำถามนั้นเอง
Novaterata

68
ฉันกลับมาที่นี่สองสามครั้งและคำตอบนี้ช่วยได้แม้จะเป็นเรื่องนอกเรื่อง
gdbj

7
หากคุณสอดคล้องกันหากใส่Dockerfileในไดเรกทอรีที่มีชื่อเดียวกับที่คุณต้องการสำหรับภาพของคุณคุณสามารถใช้docker build -t $(basename $PWD) .เป็นคำสั่งสร้างของคุณ จากนั้นคุณสามารถใช้การค้นหา CTRL-R จาก "build" เพื่อค้นหาและใช้คำสั่งซ้ำและไม่ต้องแก้ไข คุณสามารถทำให้เป็นนามแฝงได้หากต้องการ
Bruno Bronosky

ขอบคุณสำหรับคำตอบนี้ ฉันใช้เวลาสองสามชั่วโมงเพื่อรับสิ่งนี้ผ่านอินเทอร์เน็ต ฉันไม่สามารถได้รับคำตอบที่ถูกต้องใครที่ให้ชื่อกับภาพลักษณ์ของเขาจะไม่สามารถไปได้ไกลกว่านี้ถ้าเขาต้องการชื่อที่เก็บของเขาเช่นกัน
Susaj S Nair

38

นี่คือรุ่นอื่นหากคุณต้องอ้างอิงไฟล์นักเทียบท่าเฉพาะ:

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

จากนั้นคุณก็วิ่ง

docker-compose build

1
ฉันชอบที่คำตอบนี้แสดงความแตกต่างระหว่าง container_name และชื่อภาพ: แท็ก หากมีเพียงคำอธิบายเพิ่มเติมเล็กน้อยเกี่ยวกับสิ่งที่เกิดขึ้น: "container_name" จะตั้งชื่อภาชนะที่หมุนออกจากภาพในท้ายที่สุด ชื่อ "image" และแท็กรูปภาพที่สร้างขึ้นซึ่งสร้างคอนเทนเนอร์ อย่างที่คนอื่นพูดถึงแล้วไม่มีใครสามารถระบุชื่อภาพจาก Dockerfile ดังที่ OP ถามดังนั้นเราจึงใช้ไฟล์ docker-compose.yml แทนและเรียกใช้ด้วย "docker-compose up -d - build"
Sean McCarthy

-7

คุณสามารถทำได้โดยใช้ 'เป็น' จาก Ubuntu: 16.04 เป็น FooImage


6
ASไวยากรณ์ระบุชื่อเป้าหมายที่ใช้ในหลายขั้นตอนการสร้างและชื่อนี้ยังสามารถใช้ในสถานที่ของภาพสำหรับCOPY --fromไวยากรณ์ภายในแบบหลายขั้นตอนการสร้าง อย่างไรก็ตามไม่ได้ระบุชื่อ / แท็กผลลัพธ์สำหรับบิลด์เอง
BMitch
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.