นักปรับปรุง apt-get update มันทำงานอย่างไร?


1

ดังนั้นผมจึงรู้ว่าแต่ละนักเทียบท่าคำสั่งสร้างเลเยอร์หรือข่มขู่ภาพถ้าคุณจะและที่นี้จะนำไปสู่การแคชRUN apt-get updateแต่ฉันมีช่วงเวลาที่ยากลำบากมากในการติดตั้งแพ็คเกจใหม่ด้วยapt-getin docker และฉันไม่แน่ใจว่าเกิดอะไรขึ้นฉันใช้เวลาหลายชั่วโมงในขณะนี้ทำให้สับสนไม่ได้ว่าที่ไหนฉันอยู่ส่วนใหญ่ใช้ Ubuntu เป็นอิมเมจพื้นฐาน

แพคเกจบางอย่างดูเหมือนจะไม่ติดตั้งแบบสุ่มเช่น wget ถ้าฉันเข้าไปที่เทอร์มินัลในคอนเทนเนอร์ของฉันและทำสิ่งapt-get updateนั้นapt-get install wgetฉันสามารถติดตั้ง wget ได้ แต่ในไฟล์ docker ถึงแม้ว่าฉันจะลบภาพทั้งหมดที่สร้างโดยแต่ละบรรทัด RUN เพื่อหยุดการอัปเดตจากการแคชฉันไม่สามารถติดตั้ง wget ด้วยคำสั่งเดียวกันแน่นอนมันบ้าอย่างแน่นอนและฉันรู้สึกว่าฉันบ้า .

แพ็คเกจอื่น ๆ ดูเหมือนจะทำงานแบบสุ่มและไม่ทำงาน ฉันยังมีแพ็คเกจนี้: python-glpkซึ่งติดตั้งใน Dockerfile ในตอนแรก แต่ไม่ใช่อีกต่อไป ... ฉันไม่เห็นพฤติกรรมที่กำหนดไว้ล่วงหน้าเพื่ออัปเดตและติดตั้งดูเหมือนว่าพวกเขาจะทำงานเมื่อลมพัดไปในทิศทางที่แน่นอน

ใช้เวลานานในการอัปเดตกับอินเทอร์เน็ตของฉันและฉันอยู่บนเครื่องเสมือนดังนั้นเวิร์กโฟลว์ของฉันจึงขาดหายไปหมดเวลามากใครที่มีปัญหากับการใช้งานง่ายapt-get update && apt-get installหรือไม่ วิธีปฏิบัติที่ดีที่สุดเมื่อจัดการกับapt-getนักเทียบท่าคืออะไรเพื่อให้แน่ใจว่าทุกอย่างทำงานได้อย่างที่ควรจะเป็น

คำตอบ:


0

เอาท์พุทหรือบันทึกบางอย่างดีที่จะตอบคำถามของคุณ

บางครั้งการอัปเดต apt-getกำลังเริ่มช้า แต่ก็ไม่มีอะไรเกี่ยวข้องกับตัวเทียบท่าเอง หากคุณมีแพ็คเกจการเชื่อมต่อที่ไม่ดีอาจไม่สามารถดาวน์โหลดได้ทั้งหมด

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

RUN \
  apt-get update &&\
  apt-get install -y zip &&\
  rm -rf /var/lib/apt/lists/*

ขั้นตอนนี้จะใช้เวลาสักครู่ในการอัพเดตแคชติดตั้งแพ็คเกจและพื้นที่ล้างข้อมูลและจะสร้างเลเยอร์รูปภาพเพียงชั้นเดียวดังนั้นการติดตั้งแพคเกจอื่น ๆ ที่คุณจะต้องได้รับการอัพเดต apt-getก่อนทำการติดตั้งแพ็คเกจ

วิธีหนึ่งที่คุณสามารถลองใช้คือดำเนินการแต่ละขั้นตอนในคำสั่ง RUN ใหม่:

RUN \
  apt-get update

RUN \
  apt-get install -y zip

RUN \
  apt-get install -y curl

วิธีนี้คุณจะมีเลเยอร์เพิ่มขึ้น แต่จะมีเลเยอร์แคช apt ที่ "อัปเดต" และจะติดตั้งแพ็คเกจทีละหนึ่ง


0

เพียงแค่อยากรู้อยากเห็นในหัวข้อนี้ หลายคนมักจะปรับแต่งFROM ubuntuและเพิ่มสคริปต์ผู้ช่วยเพื่อตัดการติดตั้งแพ็คเกจ แต่ภาพอย่างเป็นทางการของ Ubuntu: 18.04 นั้นมาพร้อมกับการปรับปรุงเล็กน้อย เรียกใช้สิ่งนี้:

docker run --rm -it ubuntu:18.04 bash

และดูรอบ ๆ/etc/aptเพื่อสังเกตว่ามีทริกเกอร์อยู่สองสามตัวสำหรับการสร้างโดยนักเทียบท่า

root@12711b0547f3:/# ll /etc/apt/apt.conf.d/
total 40
drwxr-xr-x 1 root root 4096 Feb  6 03:37 ./
drwxr-xr-x 1 root root 4096 Feb  4 21:03 ../
-rw-r--r-- 1 root root   42 Apr 20  2018 01-vendor-ubuntu
-rw-r--r-- 1 root root  927 Jan 25 11:51 01autoremove
-r--r--r-- 1 root root 1081 Feb  4 21:03 01autoremove-kernels
-rw-r--r-- 1 root root  182 Feb 28  2018 70debconf
-rw-r--r-- 1 root root   44 Feb  6 03:37 docker-autoremove-suggests
-rw-r--r-- 1 root root  318 Feb  6 03:37 docker-clean
-rw-r--r-- 1 root root   70 Feb  6 03:37 docker-gzip-indexes
-rw-r--r-- 1 root root   27 Feb  6 03:37 docker-no-languages

aptถูกกำหนดค่าไว้ล่วงหน้าเพื่อล้างแคชหลังจากapt installใช้งานทุกครั้งใช้ดัชนีที่บีบอัดและเพื่อหลีกเลี่ยงการแนะนำแพ็คเกจเพิ่มเติมใด ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.