Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ запуску Buildah Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

Π’ Ρ‡Π΅ΠΌ ΠΏΡ€Π΅Π»Π΅ΡΡ‚ΡŒ раздСлСния срСды исполнСния ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅? Π’ частности, Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ эти инструмСнты ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π°Π»ΠΈ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ запуску Buildah Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

ΠœΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Π΅Ρ‚ идСя Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ сборку ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… OCI-ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Kubernetes ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ систСмы. Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ CI/CD, которая постоянно собираСт ΠΎΠ±Ρ€Π°Π·Ρ‹, Ρ‚ΠΎΠ³Π΄Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‚ΠΈΠΏΠ° Red Hat OpenShift/Kubernetes Π±Ρ‹Π»ΠΎ Π±Ρ‹ вСсьма ΠΏΠΎΠ»Π΅Π·Π½ΠΎ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния распрСдСлСния Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΡ€ΠΈ сборкС. Π”ΠΎ Π½Π΅Π΄Π°Π²Π½ΠΈΡ… ΠΏΠΎΡ€ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ людСй просто Π΄Π°Π²Π°Π»ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ доступ ΠΊ Docker-сокСту ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ docker build. ΠœΡ‹ ΡƒΠΆΠ΅ нСсколько Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ это ΠΎΡ‡Π΅Π½ΡŒ нСбСзопасно, фактичСски, это Π΄Π°ΠΆΠ΅ Ρ…ΡƒΠΆΠ΅, Ρ‡Π΅ΠΌ Π΄Π°Π²Π°Ρ‚ΡŒ Π±Π΅ΡΠΏΠ°Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ root ΠΈΠ»ΠΈ sudo.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ люди постоянно ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Buildah Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. ΠšΠΎΡ€ΠΎΡ‡Π΅, ΠΌΡ‹ создали ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ, Π½Π° наш взгляд, Π»ΡƒΡ‡ΡˆΠ΅ всСго Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Buildah Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΈ Π²Ρ‹Π»ΠΎΠΆΠΈΠ»ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ Π½Π° quay.io/buildah. ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΠΌβ€¦

Настройка

Π­Ρ‚ΠΈ ΠΎΠ±Ρ€Π°Π·Ρ‹ собраны ΠΈΠ· Dockerfiles, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Buildah Π² ΠΏΠ°ΠΏΠΊΠ΅ buildahimage.
Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ рассмотрим ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Dockerfile.

# stable/Dockerfile
#
# Build a Buildah container image from the latest
# stable version of Buildah on the Fedoras Updates System.
# https://bodhi.fedoraproject.org/updates/?search=buildah
# This image can be used to create a secured container
# that runs safely with privileges within the container.
#
FROM fedora:latest

# Don't include container-selinux and remove
# directories used by dnf that are just taking
# up space.
RUN yum -y install buildah fuse-overlayfs --exclude container-selinux; rm -rf /var/cache /var/log/dnf* /var/log/yum.*

# Adjust storage.conf to enable Fuse storage.
RUN sed -i -e 's|^#mount_program|mount_program|g' -e '/additionalimage.*/a "/var/lib/shared",' /etc/containers/storage.conf

ВмСсто OverlayFS, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Linux-ядра хоста, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ fuse-overlay, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ OverlayFS ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π΄Π°Ρ‚ΡŒ Π΅ΠΉ полномочия SYS_ADMIN срСдствами Linux capabilities. А ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ свои Buildah-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ уровня root. Fuse-overlay Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ довольно быстро ΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ storage-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ VFS. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ запускС Buildah-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Fuse, трСбуСтся ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ устройство /dev/fuse.

podman run --device /dev/fuse quay.io/buildahctr ...
RUN mkdir -p /var/lib/shared/overlay-images /var/lib/shared/overlay-layers; touch /var/lib/shared/overlay-images/images.lock; touch /var/lib/shared/overlay-layers/layers.lock

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ создаСм ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ для Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰. Container/storage ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… read-only Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ ΠΎΠ±Ρ€Π°Π·ΠΎΠ². НапримСр, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ overlay storage area Π½Π° ΠΎΠ΄Π½ΠΎΠΉ машинС, Π° Π·Π°Ρ‚Π΅ΠΌ срСдствами NFS ΠΏΠΎΠ΄ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ машинС ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΈΠ· Π½Π΅Π³ΠΎ Π±Π΅Π· скачивания Ρ‡Π΅Ρ€Π΅Π· pull. Нам это Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½ΡƒΠΆΠ½ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² качСствС Ρ‚ΠΎΠΌΠ° ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠ² с хоста ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

# Set up environment variables to note that this is
# not starting with user namespace and default to
# isolate the filesystem with chroot.
ENV _BUILDAH_STARTED_IN_USERNS="" BUILDAH_ISOLATION=chroot

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ окруТСния BUILDAH_ISOLATION, ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Buildah-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ с изоляциСй chroot. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ изоляция здСсь Π½Π΅ трСбуСтся, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΈ Ρ‚Π°ΠΊ ΡƒΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Buildah создавал свои собствСнныС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ с Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ пространств ΠΈΠΌΠ΅Π½, трСбуСтся привилСгия SYS_ADMIN, Π° для этого придСтся ΠΎΡΠ»Π°Π±ΠΈΡ‚ΡŒ для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΏΡ€Π°Π²ΠΈΠ»Π° SELinux ΠΈ SECCOMP, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΡ‚ нашСй установкС Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ сборку ΠΈΠ· бСзопасного ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

ЗапускаСм Buildah Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

РассмотрСнная Π²Ρ‹ΡˆΠ΅ схСма ΠΎΠ±Ρ€Π°Π·Π° Buildah-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° позволяСт Π³ΠΈΠ±ΠΊΠΎ Π²Π°Ρ€ΡŒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ способы запуска Ρ‚Π°ΠΊΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².

Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΈΠ² бСзопасности

ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ – это всСгда компромисс ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ выполнСния процСсса ΠΈ Ρ‚Π΅ΠΌ, сколько Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π²ΠΎΠΊΡ€ΡƒΠ³ этого Π½Π°ΠΊΡ€ΡƒΡ‡Π΅Π½ΠΎ. Π­Ρ‚ΠΎ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ справСдливо ΠΈ ΠΏΡ€ΠΈ сборкС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², поэтому Π½ΠΈΠΆΠ΅ ΠΌΡ‹ рассмотрим Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ компромисса.

РассмотрСнный Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ своС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π² /var/lib/containers. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ Π² эту ΠΏΠ°ΠΏΠΊΡƒ, ΠΈ Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ это сдСлаСм, Π±ΡƒΠ΄Π΅Ρ‚ сильно Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ сборки ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ².

Рассмотрим Ρ‚Ρ€ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 1. Если трСбуСтся максимальная Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ, Ρ‚ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ свою ΠΏΠ°ΠΏΠΊΡƒ для containers/image ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π΅Π΅ ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ Ρ‡Π΅Ρ€Π΅Π· volume-mount. А ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ context directory Π² самом ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅, Π² ΠΏΠ°ΠΏΠΊΠ΅ /build:

# mkdir /var/lib/containers1
# podman run -v ./build:/build:z -v /var/lib/containers1:/var/lib/containers:Z quay.io/buildah/stable
buildah  -t image1 bud /build
# podman run -v /var/lib/containers1:/var/lib/containers:Z quay.io/buildah/stable buildah  push  image1 registry.company.com/myuser
# rm -rf /var/lib/containers1

Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ. Π Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π² Ρ‚Π°ΠΊΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Buildah ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: Π΅ΠΌΡƒ Π½Π΅ Π΄Π°ΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… root-ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ срСдствами capabilities, ΠΈ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ всС ограничСния SECOMP ΠΈ SELinux.Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ с изоляциСй User Namespace, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΎΠΏΡ†ΠΈΡŽ Π²Ρ€ΠΎΠ΄Π΅ —uidmap 0:100000:10000.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. А Π²ΠΎΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ здСсь минимальна, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… рССстров ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° хост, ΠΈ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΡ‚ слова Β«Π½ΠΈΠΊΠ°ΠΊΒ». Π—Π°Π²Π΅Ρ€ΡˆΠ°Ρ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ, Buildah-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π² рССстр ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ Π½Π° хостС. Когда ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·, Π΅Π³ΠΎ придСтся Π·Π°Π½ΠΎΠ²ΠΎ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ· рССстра, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π° хостС ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ ΡƒΠΆΠ΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ останСтся.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 2. Если Π½ΡƒΠΆΠ½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ уровня Docker, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ container/storage хоста прямо Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.

# podman run -v ./build:/build:z -v /var/lib/containers:/var/lib/containers --security-opt label:disabled quay.io/buildah/stable buildah  -t image2 bud /build
# podman run -v /var/lib/containers:/var/lib/containers --security-opt label:disabled  quay.io/buildah/stable buildah push image2 registry.company.com/myuser

Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ. Π­Ρ‚ΠΎ Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ бСзопасный способ сборки ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ здСсь ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° хостС, ΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΡΡƒΠ½ΡƒΡ‚ΡŒ Podman’у ΠΈΠ»ΠΈ CRI-O врСдоносный ΠΎΠ±Ρ€Π°Π·. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, потрСбуСтся ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ SELinux separation, Ρ‡Ρ‚ΠΎΠ±Ρ‹ находящиСся Π² Buildah-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ процСссы ΠΌΠΎΠ³Π»ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ Π½Π° хостС. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ всС Ρ€Π°Π²Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Docker-сокСта, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ блокируСтся ΠΎΡΡ‚Π°Π²ΡˆΠΈΠΌΠΈΡΡ функциями бСзопасности ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ просто Π²Π·ΡΡ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π° хостС.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π—Π΄Π΅ΡΡŒ ΠΎΠ½Π° максимальна, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ задСйствуСтся ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Если Podman ΠΈΠ»ΠΈ CRI-O ΡƒΠΆΠ΅ успСли ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Π½Π° хост, Ρ‚ΠΎ Buildah-процСссу Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π½Π΅ придСтся ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π·Π°Π½ΠΎΠ²ΠΎ, Π° ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ сборки Π½Π° основС этого ΠΎΠ±Ρ€Π°Π·Π° Ρ‚Π°ΠΊΠΆΠ΅ смогут Π²Π·ΡΡ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎΠ΅ ΠΈΠ· кэша.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 3. Π‘ΡƒΡ‚ΡŒ этого способа Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ нСсколько ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π² ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ°ΠΏΠΊΠΎΠΉ для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ².

# mkdir /var/lib/project3
# podman run --security-opt label_level=s0:C100, C200 -v ./build:/build:z 
-v /var/lib/project3:/var/lib/containers:Z quay.io/buildah/stable buildah  -t image3 bud /build
# podman run --security-opt label_level=s0:C100, C200 
-v /var/lib/project3:/var/lib/containers quay.io/buildah/stable buildah push image3  registry.company.com/myuser

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π½Π΅ удаляСм ΠΏΠ°ΠΏΠΊΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (/var/lib/project3) ΠΌΠ΅ΠΆΠ΄Ρƒ запусками, поэтому всС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ сборки Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ прСимущСствами ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ.

Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ. НСчто срСднСС ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ 1 ΠΈ 2. Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ доступа ΠΊ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Ρƒ Π½Π° хостС ΠΈ, соотвСтствСнно, Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄ΡΡƒΠ½ΡƒΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠ»ΠΎΡ…ΠΎΠ΅ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Podman/CRI-O. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… своСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² сборку Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π—Π΄Π΅ΡΡŒ ΠΎΠ½Π° Ρ…ΡƒΠΆΠ΅, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈ использовании ΠΎΠ±Ρ‰Π΅Π³ΠΎ кэша Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ хоста, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Ρ‹, ΡƒΠΆΠ΅ скачСнныС Ρ€Π°Π½Π΅Π΅ срСдствами Podman/CRI-O. Однако послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Buildah скачаСт ΠΎΠ±Ρ€Π°Π·, этот ΠΎΠ±Ρ€Π°Π· ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π»ΡŽΠ±Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… сборках Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°

Π£ containers/storage Π΅ΡΡ‚ΡŒ такая классная ΡˆΡ‚ΡƒΠΊΠ° ΠΊΠ°ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° (additional stores), благодаря ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈ запускС ΠΈ сборкС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Π΅ Π΄Π²ΠΈΠΆΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ внСшниС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ read-only овСрлСя. По сути, Π² Ρ„Π°ΠΉΠ» storage.conf ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ Β«Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния», Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈ запускС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹ΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ искал Π² Π½ΠΈΡ… Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ΠΈΠ· рССстра Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚ Π΅Π³ΠΎ Π½ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· этих Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹ΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ смоТСт ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² доступныС для записи хранилища…

Если ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΈΡ‚ΡŒ Π²Π²Π΅Ρ€Ρ… ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Dockerfile, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ для сборки ΠΎΠ±Ρ€Π°Π·Π° quay.io/buildah/stable, Ρ‚ΠΎ Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ строки:

# Adjust storage.conf to enable Fuse storage.
RUN sed -i -e 's|^#mount_program|mount_program|g' -e '/additionalimage.*/a "/var/lib/shared",' /etc/containers/storage.conf
RUN mkdir -p /var/lib/shared/overlay-images /var/lib/shared/overlay-layers; touch /var/lib/shared/overlay-images/images.lock; touch /var/lib/shared/overlay-layers/layers.lock

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС ΠΌΡ‹ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌ /etc/containers/storage.conf Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°, говоря storage-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ β€œadditionalimagestores” Π² ΠΏΠ°ΠΏΠΊΠ΅ /var/lib/shared. А Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкС создаСм ΠΎΠ±Ρ‰ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ ΠΈ добавляСм ΠΏΠ°Ρ€Ρƒ lock-Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΎ Ρ€ΡƒΠ³Π°Π½ΠΈ со стороны containers/storage. По сути, ΠΌΡ‹ просто создаСм пустоС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ².

Если ΡΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ containers/storage ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ этой ΠΏΠ°ΠΏΠΊΠΈ, Ρ‡Ρ‚ΠΎ Buildah смоТСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Ρ‹.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ вСрнСмся ΠΊ рассмотрСнному Π²Ρ‹ΡˆΠ΅ Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ 2, ΠΊΠΎΠ³Π΄Π° Buildah-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² containers/store Π½Π° хостах ΠΈ, соотвСтствСнно, ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π·Π° счСт ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Podman/CRI-O, Π½ΠΎ Π΄Π°Π΅Ρ‚ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ бСзопасности, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ прямо Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠΊΡ€ΡƒΡ‚ΠΈΠΌ сюда Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π»ΡƒΡ‡ΡˆΠ΅Π΅ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΌΠΈΡ€ΠΎΠ².

# mkdir /var/lib/containers4
# podman run -v ./build:/build:z -v /var/lib/containers/storage:/var/lib/shared:ro -v  /var/lib/containers4:/var/lib/containers:Z  quay.io/buildah/stable 
 buildah  -t image4 bud /build
# podman run -v /var/lib/containers/storage:/var/lib/shared:ro  
-v >/var/lib/containers4:/var/lib/containers:Z quay.io/buildah/stable buildah push image4  registry.company.com/myuser
# rm -rf /var/lib/continers4

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ /var/lib/containers/storage хоста смонтирована Π² /var/lib/shared Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ read-only. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ работая Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅, Buildah ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π½Π΅Π΅ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ скачаны срСдствами Podman/CRI-O (ΠΏΡ€ΠΈΠ²Π΅Ρ‚, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ), Π½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈ этом ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² своС собствСнноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ (ΠΏΡ€ΠΈΠ²Π΅Ρ‚, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ). Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ это дСлаСтся Π±Π΅Π· ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ SELinux separation для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

Π’Π°ΠΆΠ½Ρ‹ΠΉ нюанс

Ни Π² ΠΊΠΎΠ΅ΠΌ случаС Π½Π΅ слСдуСт ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΈΠ· Π½ΠΈΠΆΠ΅Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Buildah-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π»Π΅Ρ‚Π΅Ρ‚ΡŒ.

И это ΠΎΡ‚Π½ΡŽΠ΄ΡŒ Π½Π΅ всС прСимущСства

ВозмоТности Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹ΠΌ сцСнариСм. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ всС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ Π² ΠΎΠ±Ρ‰Π΅ΠΌ сСтСвом Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈ Π΄Π°Ρ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ доступ всСм Buildah-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ. Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ сотни ΠΎΠ±Ρ€Π°Π·ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ наша систСма CI/CD рСгулярно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для сборки ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ². ΠšΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ всС эти ΠΎΠ±Ρ€Π°Π·Ρ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠΌ хостС-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈ Π·Π°Ρ‚Π΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ срСдства сСтСвого хранСния (NFS, Gluster, Ceph, ISCSI, S3…), ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΎΠ±Ρ‰ΠΈΠΉ доступ ΠΊ этому Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Ρƒ всСм Π½ΠΎΠ΄Π°ΠΌ Buildah ΠΈΠ»ΠΈ Kubernetes.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ достаточно ΠΏΠΎΠ΄ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это сСтСвоС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Buildah Π½Π° /var/lib/shared ΠΈ всС – Buildah-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ большС Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ придСтся ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Ρ‹ Ρ‡Π΅Ρ€Π΅Π· pull. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ выбрасываСм Ρ„Π°Π·Ρƒ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ наполнСния (pre-population) ΠΈ сразу Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π²Ρ‹ΠΊΠ°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹.

И ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, это ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ систСмы Kubernetes ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΎΠΉ инфраструктуры, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ скачивания ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· pull. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, рССстр ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², получая push-запрос Π½Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π² Π½Π΅Π³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°, ΠΌΠΎΠΆΠ΅Ρ‚ автоматичСски ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ этот ΠΎΠ±Ρ€Π°Π· Π² ΠΎΠ±Ρ‰Π΅Π΅ сСтСвоС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Π³Π΄Π΅ ΠΎΠ½ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ становится доступСн всСм Π½ΠΎΠ΄Π°ΠΌ.

Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ² ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΡΡ‚ΠΈΠ³Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ позволяСт ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· клонирования Ρ‚Π°ΠΊΠΈΡ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ² ΠΏΠΎ Π½ΠΎΠ΄Π°ΠΌ ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ запуск ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² практичСски ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΌ.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π½Π°Π΄ Π½ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ overlay volume mounts, которая сдСлаСт сборку ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π΅Ρ‰Π΅ быстрСС.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Buildah Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π² срСдС Kubernetes/CRI-O, Podman ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π² Docker Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ, ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ это просто ΠΈ Π³ΠΎΡ€Π°Π·Π΄ΠΎ бСзопаснСС, Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ docker.socket. ΠœΡ‹ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ повысили Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами для ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ баланса ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ позволяСт ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ скачиваниС ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π½Π° Π½ΠΎΠ΄Ρ‹.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com