Dockerfile คืออะไรและจะสร้างรูป Docker ได้อย่างไร

ในขณะที่ทำงานกับนักเทียบท่าโครงการส่วนใหญ่แล้วภาพนักเทียบท่าที่มีอยู่จะไม่ตรงกับความต้องการของคุณ.


นี่คือที่ Dockerfile เข้ามาในรูปภาพ มันจะช่วยคุณสร้างภาพนักเทียบท่าที่กำหนดเอง ดังนั้นการรู้เกี่ยวกับ Dockerfile จึงเป็นสิ่งจำเป็น.

Dockerfile คืออะไร?

มันเป็นไฟล์ข้อความง่ายๆที่มีชุดคำสั่งหรือคำสั่ง คำสั่ง / คำแนะนำเหล่านี้จะถูกดำเนินการอย่างต่อเนื่องเพื่อดำเนินการกับภาพฐานเพื่อสร้างภาพนักเทียบท่าใหม่.

ความคิดเห็นและคำสั่ง + ข้อโต้แย้งเป็นสองสายหลักประเภทบล็อกในไวยากรณ์ Dockerfile

ไวยากรณ์ความคิดเห็น

#Line บล็อกที่ใช้สำหรับแสดงความคิดเห็น

อาร์กิวเมนต์คำสั่งอาร์กิวเมนต์ 1 …..

ตัวอย่างคำสั่ง + อาร์กิวเมนต์

#Line บล็อกที่ใช้สำหรับการแสดงความคิดเห็น

อาร์กิวเมนต์คำสั่งอาร์กิวเมนต์ 1 …..

ด้านล่างนี้เป็นลักษณะการทำงานของคุณ.

  • สร้างไฟล์ Dockerfile และพูดถึงคำแนะนำในการสร้างภาพนักเทียบท่าของคุณ
  • เรียกใช้คำสั่งสร้างนักเทียบท่าซึ่งจะสร้างภาพนักเทียบท่า
  • ขณะนี้อิมเมจของนักเทียบท่าพร้อมใช้งานแล้วให้ใช้คำสั่งนักเทียบท่าเรียกใช้เพื่อสร้างคอนเทนเนอร์

เวิร์กโฟลว์ dockerfile

คำสั่งพื้นฐาน

จาก – กำหนดอิมเมจพื้นฐานเพื่อใช้และเริ่มต้นกระบวนการบิลด์.

วิ่ง – มันใช้คำสั่งและอาร์กิวเมนต์เพื่อรันจากอิมเมจ.

CMD – ฟังก์ชั่นที่คล้ายกันเป็นคำสั่ง RUN แต่จะได้รับการดำเนินการหลังจากคอนเทนเนอร์ถูกสร้างอินสแตนซ์.

เข้า – มันกำหนดเป้าหมายแอปพลิเคชันเริ่มต้นของคุณในภาพเมื่อสร้างคอนเทนเนอร์.

เพิ่ม – มันคัดลอกไฟล์จากแหล่งที่มาไปยังปลายทาง (ภายในภาชนะ).

ENV – ตั้งค่าตัวแปรสภาพแวดล้อม.

วิธีสร้างภาพ Docker ด้วย Dockerfile?

ก่อนอื่นมาสร้าง Dockerfile.

[email protected]: ~ $ gedit Dockerfile

ใส่คำสั่ง / คำแนะนำด้านล่างลงในนั้นและบันทึก.

# ตั้งค่าภาพฐานเป็น Ubuntu
จาก Ubuntu

# อัปเดตรายการที่เก็บข้อมูลและติดตั้ง gnupg2
RUN apt-get update && apt-get install -y gnupg2

# เพิ่มคีย์การยืนยันแพ็คเกจ
RUN apt-key adv –keyserver hkp: //keyserver.ubuntu.com: 80 –recv 7F0CEB10

# เพิ่ม MongoDB ไปยังรายการแหล่งเก็บข้อมูล
RUN echo ‘deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen’ > tee /etc/apt/sources.list.d/mongodb.list

# อัปเดตรายการแหล่งเก็บข้อมูล
RUN apt-get update

# ติดตั้งแพ็คเกจ MongoDB (.deb)
RUN apt-get install -y mongodb

# สร้างไดเรกทอรีข้อมูลเริ่มต้น
RUN mkdir -p / data / db

# เปิดเผยพอร์ตเริ่มต้น
EXPOSE 27017

# พอร์ตเริ่มต้นเพื่อเรียกใช้งานจุดเข้าใช้งาน (MongoDB)
CMD ["–พอร์ต 27017"]

# ตั้งค่าคำสั่งคอนเทนเนอร์เริ่มต้น
เข้าสู่ระบบ usr / bin / mongodb

ใน Dockerfile นี้ ubuntu ถูกตั้งค่าเป็นอิมเมจพื้นฐาน จากนั้นจะกล่าวถึงคำสั่งและอาร์กิวเมนต์ที่จำเป็นเพื่อติดตั้ง MongoDB พอร์ต 27017 ถูกเปิดเผยต่อ MongoDB ด้วยคำสั่งคอนเทนเนอร์เริ่มต้นเป็น usr / bin / mongodb

ต่อไปฉันจะเรียกใช้เพื่อสร้างภาพนักเทียบท่า.

ใช้งาน Dockerfile

คำสั่งดังต่อไปนี้จะสร้างภาพนักเทียบท่าที่เรียกว่า geekflare_mongodb หลังจากการดำเนินการที่ประสบความสำเร็จ.

[email protected]: ~ $ นักเทียบท่าสร้าง -t geekflare_mongodb .

การส่งบริบทสำหรับบิวด์ไปที่ Docker daemon 667.2MB

ขั้นตอนที่ 1/9: จาก Ubuntu

ล่าสุด: การดึงจากไลบรารี่ / Ubuntu

7413c47ba209: ดึงเสร็จแล้ว

0fe7e7cbb2e8: ดึงเสร็จสมบูรณ์

1d425c982345: ดึงเสร็จแล้ว

344da5c95cec: ดึงเสร็จแล้ว

สรุปข้อมูล: sha256: c303f19cfe9ee92badbbbd7567bc1ca47789f79303ddcef56f77687d4744cd7a

สถานะ: ดาวน์โหลดภาพใหม่สำหรับ Ubuntu: ล่าสุด

—> 3556258649b2

ขั้นตอนที่ 2/10: RUN apt-get update && apt-get install -y gnupg2

—> ทำงานใน de3706328761

ได้รับ: 1 http://security.ubuntu.com/ubuntu ความปลอดภัยไบโอนิค InRelease [88.7 kB]

ได้รับ: 2 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]

ดึงข้อมูล 16.9 MB ใน 38 วินาที (445 kB / s)

กำลังอ่านรายการแพ็กเกจ…

กำลังอ่านรายการแพ็กเกจ…

อาคารต้นไม้พึ่งพา…

อ่านข้อมูลสถานะ…

จำเป็นต้องได้รับ 5187 kB ของคลังข้อมูล.

หลังจากการดำเนินการนี้จะใช้พื้นที่ดิสก์เพิ่มเติม 15.8 MB.

ได้รับ: 1 http://archive.ubuntu.com/ubuntu bionic / main amd64 readline-common all 7.0-3 [52.9 kB]

รับ: 2 http://archive.ubuntu.com/ubuntu ไบโอนิค / main amd64 libreadline7 amd64 7.0-3 [124 kB]

รับ: 3 http://archive.ubuntu.com/ubuntu bionic-updates / main amd64 libsqlite3-0 amd64 3.22.0-1ubuntu0.1 [497 kB]

รับ: 4 http://archive.ubuntu.com/ubuntu bionic-updates / main amd64 libssl1.1 amd64 1.1.1-1ubuntu2.1 ~ 18.04.4 [1300 kB]

debconf: การหน่วงเวลาการกำหนดค่าแพคเกจเนื่องจากไม่ได้ติดตั้ง apt-utils

ดึง 5187 kB ใน 12 วินาที (416 kB / s)

การเลือก readline ทั่วไปของแพ็กเกจที่ไม่ได้เลือกก่อนหน้านี้.

(กำลังอ่านฐานข้อมูล … 4040 ไฟล์และไดเรกทอรีที่ติดตั้งอยู่ในปัจจุบัน)

กำลังเตรียมที่จะแกะ … / 00-readline-common_7.0-3_all.deb …

การคลาย readline-common (7.0-3) …

การเลือกแพคเกจ libreadline7 ที่ไม่ได้เลือกก่อนหน้านี้: amd64.

กำลังเตรียมที่จะแกะ … / 01-libreadline7_7.0-3_amd64.deb …

การเลือกแพคเกจก่อนหน้านี้ที่ไม่ได้เลือก dirmngr.

การตั้งค่า libnpth0: amd64 (1.5-3) …

การตั้งค่า libksba8: amd64 (1.3.5-2) …

การตั้งค่า gnupg-l10n (2.2.4-1ubuntu1.2) …

การประมวลผลทริกเกอร์สำหรับ libc-bin (2.27-3ubuntu1) …

กำลังถอดคอนเทนเนอร์กลาง de3706328761

—> a32533894ed1

ขั้นตอนที่ 3/10: RUN apt-key adv –keyserver hkp: //keyserver.ubuntu.com: 80 –recv 7F0CEB10

—> ทำงานใน 69c4dba38983

คำเตือน: ไม่ควรแยกคำสั่ง apt-key output (stdout ไม่ใช่เทอร์มินัล)

กำลังดำเนินการ: /tmp/apt-key-gpghome.MuT5BDWwKZ/gpg.1.sh –keyserver hkp: //keyserver.ubuntu.com: 80 –recv 7F0CEB10

gpg: กุญแจ 5F8F93707F0CEB10: กุญแจสาธารณะ "คีย์การลงชื่อถูกต้องตามกฎหมายทั้งหมด <[email protected]>" นำเข้า

gpg: คีย์ 9ECBEC467F0CEB10: 1 ไม่ได้ตรวจสอบลายเซ็นเนื่องจากคีย์หายไป

gpg: รหัส 9ECBEC467F0CEB10: กุญแจสาธารณะ "Richard Kreuter <[email protected]>" นำเข้า

gpg: จำนวนทั้งหมดที่ประมวลผล: 2

gpg: นำเข้า: 2

การถอดคอนเทนเนอร์กลาง 69c4dba38983

—> cffbe06c1b50

ขั้นตอนที่ 4/10: RUN echo ‘deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen’ > tee /etc/apt/sources.list.d/mongodb.list

—> ทำงานใน 40630fd7b0a9

กำลังถอดคอนเทนเนอร์กลางออก 40630fd7b0a9

—> a1bd9d8d7e51

ขั้นตอนที่ 5/10: RUN apt-get update

—> ทำงานใน 750717d9c0ea

Hit: 1 http://archive.ubuntu.com/ubuntu bionic InRelease

Hit: 2 http://archive.ubuntu.com/ubuntu bionic-updates InRelease

Hit: 3 http://security.ubuntu.com/ubuntu bionic-security InRelease

Hit: 4 http://archive.ubuntu.com/ubuntu bionic-backports InRelease

กำลังอ่านรายการแพ็กเกจ…

การถอดคอนเทนเนอร์กลาง 750717d9c0ea

—> 397d6501db58

ขั้นตอนที่ 6/10: RUN apt-get install -y mongodb

—> ทำงานใน 88609c005e73

กำลังอ่านรายการแพ็กเกจ…

อาคารต้นไม้พึ่งพา…

อ่านข้อมูลสถานะ…

แพ็คเกจใหม่ต่อไปนี้จะได้รับการติดตั้ง:

libboost-filesystem1.65.1 libboost-iostreams1.65.1

libboost-program-options1.65.1 libboost-system1.65.1 libgoogle-perftools4

libpcap0.8 libpcrecpp0v5 libsnappy1v5 libstemmer0d libtcmalloc-minimal4

libunwind8 libyaml-cpp0.5v5 mongo-tools mongodb mongodb- ลูกค้า

mongodb-server mongodb-server-core

0 อัพเกรดแล้ว 17 เพิ่งติดตั้งใหม่ 0 เพื่อลบและ 0 ไม่ได้อัพเกรด.

ต้องได้รับไฟล์เก็บถาวร 53.7 MB.

หลังจากการดำเนินการนี้จะใช้พื้นที่ดิสก์เพิ่มเติม 218 MB.

ได้รับ: 1 http://archive.ubuntu.com/ubuntu bionic-updates / universe amd64 mongodb-clients amd64 1: 3.6.3-0ubuntu1.1 [20.2 MB]

รับ: 2 http://archive.ubuntu.com/ubuntu bionic-updates / universe amd64 mongodb-server-core amd64 1: 3.6.3-0ubuntu1.1 [20.3 MB]

รับ: 3 http://archive.ubuntu.com/ubuntu bionic-updates / universe amd64 mongodb-server ทั้งหมด 1: 3.6.3-0ubuntu1.1 [12.6 kB]

รับ: 4 http://archive.ubuntu.com/ubuntu bionic-updates / universe amd64 mongodb amd64 1: 3.6.3-0ubuntu1.1 [9968 B]

ดึง 53.7 MB ใน 10 วินาที (5485 kB / s)

การเลือกแพ็คเกจที่ไม่ได้เลือกก่อนหน้านี้ libpcap0.8: amd64.

(กำลังอ่านฐานข้อมูล … 4390 ไฟล์และไดเรกทอรีที่ติดตั้งในปัจจุบัน)

การเลือกแพ็คเกจ mongodb-clients ที่ไม่ได้เลือกไว้ก่อนหน้านี้.

กำลังเตรียมที่จะแกะ … / 13-mongodb-clients_1% 3a3.6.3-0ubuntu1.1_amd64.deb …

กำลังแกะ mongodb-clients (1: 3.6.3-0ubuntu1.1) …

การเลือกแพ็กเกจ mongodb-server-core ที่ไม่ได้เลือกก่อนหน้านี้.

กำลังเตรียมที่จะแกะ … / 14-mongodb-server-core_1% 3a3.6.3-0ubuntu1.1_amd64.deb …

การแกะ mongodb-server-core (1: 3.6.3-0ubuntu1.1) …

การเลือกแพ็คเกจ mongodb-server ที่ไม่ได้เลือกก่อนหน้านี้.

กำลังเตรียมที่จะแกะ … / 15-mongodb-server_1% 3a3.6.3-0ubuntu1.1_all.deb …

กำลังแกะเซิร์ฟเวอร์ mongodb (1: 3.6.3-0ubuntu1.1) …

การเลือกแพ็คเกจ mongodb ก่อนหน้านี้ที่ไม่ได้เลือก.

กำลังเตรียมที่จะแกะ … / 16-mongodb_1% 3a3.6.3-0ubuntu1.1_amd64.deb …

แกะ mongodb (1: 3.6.3-0ubuntu1.1) …

การตั้งค่า mongodb-server-core (1: 3.6.3-0ubuntu1.1) …

การตั้งค่าเครื่องมือ mongo (3.6.3-0ubuntu1) …

การตั้งค่า mongodb-clients (1: 3.6.3-0ubuntu1.1) …

การตั้งค่าเซิร์ฟเวอร์ mongodb (1: 3.6.3-0ubuntu1.1) …

invoke-rc.d: ไม่สามารถระบุ runlevel ปัจจุบัน

invoke-rc.d: policy-rc.d ปฏิเสธการดำเนินการเริ่มต้น.

การตั้งค่า mongodb (1: 3.6.3-0ubuntu1.1) …

การประมวลผลทริกเกอร์สำหรับ libc-bin (2.27-3ubuntu1) …

การถอดคอนเทนเนอร์กลาง 88609c005e73

—> d9c072cb1f84

ขั้นตอนที่ 7/10: RUN mkdir -p / data / db

—> ทำงานใน f817778f69ab

การถอดคอนเทนเนอร์กลาง f817778f69ab

—> a3fbdb3def5c

ขั้นตอนที่ 8/10: EXPOSE 27017

—> ทำงานใน 8d070e2a1e07

กำลังถอดคอนเทนเนอร์กลาง 8d070e2a1e07

—> f770776a538c

ขั้นตอนที่ 9/10: CMD ["–พอร์ต 27017"]

—> ทำงานใน ab612410df77

การลบคอนเทนเนอร์กลาง ab612410df77

—> e5830b80934f

ขั้นตอนที่ 10/10: เข้าสู่ระบบ usr / bin / mongod

—> ทำงานใน 95f574727aab

การถอดคอนเทนเนอร์กลาง 95f574727aab

—> 095d17727ca0

สร้างสำเร็จแล้ว 095d17727ca0

ติดแท็กเรียบร้อยแล้ว geekflare_mongodb: ล่าสุด

ให้เราตรวจสอบว่าภาพนักเทียบท่าที่สร้างขึ้นด้วยชื่อ geekflare_mongodb.

[email protected]: ~ $ ภาพนักเทียบท่า

ขนาดของ ID ที่สร้างซ้ำของแท็ก RepOSITORY

geekflare_mongodb ล่าสุด 095d17727ca0 3 นาทีที่แล้ว 325MB

ubuntu ล่าสุด 3556258649b2 4 วันที่แล้ว 64.2MB

mean_express ล่าสุด 35dcb3df9806 6 วันที่ผ่านมา 923MB

mean_angular ล่าสุด 9f8d61db600c 6 วันที่ผ่านมา 1.29GB

เรียกใช้อิมเมจนักเทียบท่า geekflare_mongodb ภายในคอนเทนเนอร์ mongo_container.

[email protected]: ~ $ นักเทียบท่าวิ่ง – ชื่อ mongo_container -i -t geekflare_mongodb

2019-07-27T19: 38: 23.734 + 0000 ฉันควบคุม [เริ่มต้น] MongoDB เริ่มต้น: pid = 6 พอร์ต = 27017 dbpath = / data / db โฮสต์ 64- บิต = b0095c1e5536

2019-07-27T19: 38: 23.735 + 0000 ฉันควบคุม [initandlisten] db เวอร์ชัน v3.6.3

2019-07-27T19: 38: 23.735 + 0000 ฉันควบคุม [initandlisten] git รุ่น: 9586e557d54ef70f9ca4b43c26892cd55257e1a5

2019-07-27T19: 38: 23.736 + 0000 ฉันควบคุม [initandlisten] รุ่น OpenSSL: OpenSSL 1.1.1 11 ก.ย. 2018

2019-07-27T19: 38: 23.739 + 0000 ฉันควบคุม [initandlisten] ตัวจัดสรร: tcmalloc

2019-07-27T19: 38: 23.739 + 0000 ฉันควบคุม [initandlisten] โมดูล: ไม่มี

2019-07-27T19: 38: 23.739 + 0000 ฉันควบคุม [initandlisten] สภาพแวดล้อมการสร้าง:

2019-07-27T19: 38: 23.739 + 0000 ฉันควบคุม [initandlisten] distarch: x86_64

2019-07-27T19: 38: 23.739 + 0000 ฉันควบคุม [initandlisten] target_arch: x86_64

2019-07-27T19: 38: 23.739 + 0000 ฉันควบคุมตัวเลือก [initandlisten]: {}

2019-07-27T19: 38: 23.745 + 0000 I STORAGE [initandlisten] wiredtiger_open config: create, cache_size = 2038M, session_max = 20000, การขับไล่ = (threads_min = 4, threads_max = 4, config_base = false, สถิติ = (เร็ว) บันทึก = (เปิดใช้งาน = true เก็บ = true เส้นทาง = วารสารคอมเพรสเซอร์ = เร็ว) file_manager = (close_idle_time = 100000) statistics_log = (รอ = 0), verbose = (recovery_progress),

2019-07-27T19: 38: 24.733 + 0000 ฉันควบคุม [initandlisten]

2019-07-27T19: 38: 24.734 + 0000 ฉันควบคุม [initandlisten] ** คำเตือน: การควบคุมการเข้าถึงไม่ได้เปิดใช้งานสำหรับฐานข้อมูล.

2019-07-27T19: 38: 24.735 + 0000 ฉันควบคุม [initandlisten] ** การอ่านและเขียนการเข้าถึงข้อมูลและการกำหนดค่าไม่ จำกัด.

2019-07-27T19: 38: 24.736 + 0000 ฉันควบคุม [initandlisten] ** คำเตือน: คุณกำลังเรียกใช้กระบวนการนี้ในฐานะผู้ใช้รูทซึ่งไม่แนะนำ.

2019-07-27T19: 38: 24.736 + 0000 ฉันควบคุม [initandlisten]

2019-07-27T19: 38: 24.736 + 0000 ฉันควบคุม [initandlisten] ** คำเตือน: เซิร์ฟเวอร์นี้ถูกผูกไว้กับ localhost.

2019-07-27T19: 38: 24.737 + 0000 ฉันควบคุม [initandlisten] ** ระบบระยะไกลจะไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์นี้ได้.

2019-07-27T19: 38: 24.737 + 0000 I ควบคุม [initandlisten] ** เริ่มต้นเซิร์ฟเวอร์ด้วย –bind_ip เพื่อระบุ IP

2019-07-27T19: 38: 24.737 + 0000 ฉันควบคุม [initandlisten] ** ที่อยู่ที่ควรให้บริการการตอบสนองจากหรือ –bind_ip_all ถึง

2019-07-27T19: 38: 24.737 + 0000 ฉันควบคุม [initandlisten] ** เชื่อมโยงกับอินเตอร์เฟสทั้งหมด หากต้องการพฤติกรรมนี้ให้เริ่มการทำงานของ

2019-07-27T19: 38: 24.738 + 0000 ฉันควบคุม [initandlisten] ** เซิร์ฟเวอร์ที่มี –bind_ip 127.0.0.1 เพื่อปิดใช้งานคำเตือนนี้.

2019-07-27T19: 38: 24.738 + 0000 ฉันควบคุม [initandlisten]

2019-07-27T19: 38: 24.739 + 0000 I การจัดเก็บ [initandlisten] createCollection: admin.system.version พร้อม UUID ที่ให้มา: 4b8b509d-633a-46c1-a302-cb8c82b0d5d3

2019-07-27T19: 38: 24.788 + 0000 I คำสั่ง [initandlisten] การตั้งค่า featureCompatibilityVersion เป็น 3.6

2019-07-27T19: 38: 24.818 + 0000 I การจัดเก็บ [initandlisten] createCollection: local.startup_log พร้อม UUID ที่สร้างขึ้น: 6c1c0366-4b1b-4b92-9fcd-d18acc126072

2019-07-27T19: 38: 24.862 + 0000 I FTDC [initandlisten] การเริ่มต้นการจับข้อมูลการวินิจฉัยแบบเต็มเวลาด้วยไดเรกทอรี ‘/data/db/diagnostic.data’

2019-07-27T19: 38: 24.866 + 0000 I NETWORK [initandlisten] กำลังรอการเชื่อมต่อที่พอร์ต 27017

เปิดเทอร์มินัลใหม่และตรวจสอบว่า mongo_container ทำงานอยู่หรือไม่.

[email protected]: ~ $ docker ps

รหัสภาพภาชนะบรรจุคำสั่งสร้างสถานะชื่อพอร์ต

b0095c1e5536 geekflare_mongodb   "/ bin / sh -c usr / bin / …"   35 วินาทีที่แล้วขึ้น 33 วินาที 27017 / tcp mongo_container

อย่างที่คุณเห็นคอนเทนเนอร์ที่สร้างจากอิมเมจ geekflare_mongodb นั้นเปิดใช้งาน.

ฉันหวังว่านี่จะช่วยให้คุณมีความคิดเกี่ยวกับ dockerfile และประโยชน์ของมัน คุณสามารถตรวจสอบเอกสารนี้ได้ที่ แนวทางปฏิบัติที่ดีที่สุดของ Dockerfile เพื่อเรียนรู้เพิ่มเติม.

Tags:

  • นักเทียบท่า

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map