יום שלישי, ספטמבר 29, 2015

בניית image מינימלי לעבודה

המזח מדבר תמיד פחות או יותר על בנייה של מכולות מimage בסיס, כאשר כניסה לתוכו תתבצע ע"יnsenter או ssh.

בהערכה גסה לשם הimage  בסיס נצטרך לפחות שלוש פעמים גודל התקנה בסיסית (התקנה של sid = ~569mb)

פעם ראשונה זה עבור ההורדה הראשונית.
פעם שנייה עבור תהליך ביצוע ה tar (במקרה הגרוע ביותר יטפוס גודל מקום זהה).
פעם שלישית כשנטען את הtar  ל docker.

בנייה סטנדרטית מתחילה מimage בסיס איתו נעבוד -

כמו שרבים אחרים אמרו לפני אם אתה רוצה לבדוק משהוא ולסמוך עליו תבנה לבד (דוגמא), אז אני לא מעוניין למשוך מהחנות לסוג מסויים של בדיקות אז אני מתחיל מבבניה מקומית (ואם רוצים לדלג פשוט תעברו על מה שיש פה).

sudo debootstrap --include linux-image-amd64,grub-pc,locales --arch amd64 unstable /srv/docker/ http://mirror.isoc.org.il/pub/debian/

בנתיים זה יתחיל למשוך את הקבצים (בכוונה אני בוחר התקנה מלאה) :

I: Retrieving Release
I: Retrieving Release.gpg
I: Checking Release signature
I: Valid Release signature (key id 126C0D24BD8A2942CC7DF8AC7638D0442B90D010)
I: Retrieving Packages
I: Validating Packages
I: Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
I: Found additional required dependencies: adduser dmsetup insserv libapparmor1 libaudit-common libaudit1 libbz2-1.0 libcap2 libcap2-bin libcryptsetup4 libdb5.3 libdebconfclient0 libdevmapper1.02.1 libgcrypt20 libgpg-error0 libkmod2 libncursesw5 libprocps4 libseccomp2 libsemanage-common libsemanage1 libsystemd0 libudev1 libustr-1.0-1 procps systemd systemd-sysv udev
I: Found additional base dependencies: gettext-base grub-common grub-pc-bin grub2-common initramfs-tools klibc-utils libdns-export100 libffi6 libfreetype6 libfuse2 libgmp10 libgnutls-deb0-28 libgnutls-openssl27 libhogweed4 libicu55 libidn11 libisc-export95 libklibc libnettle6 libnfnetlink0 libp11-kit0 libpng12-0 libpsl0 libtasn1-6 linux-base linux-image-4.2.0-1-amd64 ucf
I: Checking component main on http://mirror.isoc.org.il/pub/debian...
I: Retrieving libacl1 2.2.52-2
I: Validating libacl1 2.2.52-2
I: Retrieving adduser 3.113+nmu3
I: Validating adduser 3.113+nmu3
I: Retrieving libapparmor1 2.10-2+b1
I: Validating libapparmor1 2.10-2+b1
I: Retrieving apt 1.0.10.2
I: Validating apt 1.0.10.2
I: Retrieving apt-utils 1.0.10.2
.
.
.I: Configuring whiptail...
I: Configuring linux-image-amd64...
I: Configuring libgnutls-openssl27:amd64...
I: Configuring iputils-ping...
I: Configuring apt-utils...
I: Configuring tasksel...
I: Configuring tasksel-data...
I: Configuring libc-bin...
I: Configuring systemd...
I: Configuring initramfs-tools...
I: Base system installed successfully.


לאחר שבניית המערכת תסתיים נבנה את ה image שלנו :

sudo tar -C docker -c . | docker import - $USER/sid
0e66f298f7087c2670653954acf2c32c0aa07ba21a80ffbd0cf54cf21eb01a64

לאחר זאת אם נבדוק מה יש לנו נראה שה image אצלנו -

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
user/sid           latest              0e66f298f708        3 minutes ago       553.3 MB


נבנה לנו קובץ דוקר :

FROM user/sid
RUN apt-get update -y && apt-get install -y \
    gcc \
    wget \
    bash

ADD test.c /tmp/
RUN gcc /tmp/test.c -o /tmp/tester
ENTRYPOINT ["/tmp/tester"]

כ ~/docker/Dockerfile קובץ test.c צריך להיות בתוך /docker

נבנה את ה image הנוצר,

sudo docker build -t="user/sid" .

אם גם אתם חתפתם כמוני מ 226 systemd על דביאן תצטרכו לכבות את docker ולחכות שsystemd יתוקן

ולהפעיל את דוקר בצורה הישנה :

docker -d --exec-opt native.cgroupdriver=cgroupfs

או הצעה לשנות את הקונפיג.

תסמיני המחלה -

[8] System error: open /sys/fs/cgroup/cpu,cpuacct/init.scope/system.slice/docker-$ID.scope/cpu.shares: no such file or directory

מהתוצאה נבנה image חדש (כי זה לבנייה בלבד)

docker commit -m "builder" `docker ps -l -q`  $USER/sid:builder

בשביל להתחבר לתוך הקונטיינר שנוצר מספיק לבצע :(מתוך דף ההסבר ש

PID=$(docker inspect --format {{.State.Pid}} >container_name_or_id<)
nsenter --target $PID --mount --uts --ipc --net --pid

אין תגובות:

הוסף רשומת תגובה