tag نام متحرک است و container متوقف با container حذف‌شده تفاوت دارد. امشب یک image کوچک دریافت و وضعیت process، فایل writable و digest را ثبت می‌کنیم.

این جلسه بخشی از دورهٔ لینوکس ۳۰۵ در ۶۰ شب است.

جایگاه در دوره: هدف‌های 352.3 آزمون 305-300.

محیط: docker-a؛ image آموزشی alpine:3.23 را از publisher اصلی دریافت می‌کنیم. برای بازتولید، digest واقعی را بعد pull ثبت کن.

sudo docker pull alpine:3.23
sudo docker image inspect alpine:3.23 --format '{{json .RepoDigests}}'
sudo docker run --name life305 -d alpine:3.23 sleep 600
sudo docker ps
sudo docker exec life305 sh -c 'printf "layer\n" > /tmp/probe305'
sudo docker diff life305
sudo docker stop life305
sudo docker ps -a
sudo docker start life305
sudo docker exec life305 cat /tmp/probe305

فایل پس از stop/start باقی می‌ماند؛ حذف container لایهٔ writable آن را حذف می‌کند. exec process جدید در container running است؛ attach به جریان ورودی/خروجی process موجود وصل می‌شود و رفتار signal آن را باید بشناسی.

sudo docker inspect life305 --format '{{json .State}}'
sudo docker logs life305
sudo docker image history alpine:3.23
sudo docker stop life305
sudo docker rm life305

sleep خروجی log تولید نمی‌کند؛ خالی بودن log به‌تنهایی خرابی نیست. –rm نمونه‌های موقت را پس از exit پاک می‌کند و restart policy مناسب سرویس دائمی با آن یک قرارداد نیست.

اعتماد و انتقال#

RepoDigest محتوای artifact دریافت‌شده را مشخص می‌کند؛ publisher، signature و سیاست اعتماد همچنان نیاز به بررسی دارند. برای چند معماری، digest index با manifest یک معماری تفاوت دارد.

docker save/load image و layerها را جابه‌جا می‌کنند؛ export/import filesystem container را با از دست رفتن بخشی از metadata/image history منتقل می‌کنند. هیچ‌کدام backup خودکار volumeهای database نیستند.

آزمون و بازگشت: قبل حذف، State، exit code و دادهٔ شاهد را ثبت کن؛ پس از حذف نام life305 دیگر نباشد ولی image باقی بماند. image prune یا system prune گسترده برای این تمرین لازم نیست.

منبع: container run ، image pull و digest ، save .