์ปจํ ์ด๋ ๋ฐํ์์ ๋ณ๋์ ๋๊ตฌ ๊ตฌ์ฑ ์์๋ก ๋ถ๋ฆฌํ๋ฉด ์ด๋ค ์ด์ ์ด ์๋์? ํนํ ์ด๋ฌํ ๋๊ตฌ๋ ์๋ก๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ๊ฒฐํฉ๋๊ธฐ ์์ํ ์ ์์ต๋๋ค.

๋ง์ ์ฌ๋๋ค์ด ์ปจํ
์ด๋ํ๋ OCI ์ด๋ฏธ์ง๋ฅผ ๊ตฌ์ถํ๋ค๋ ์์ด๋์ด์ ๋งค๋ ฅ์ ๋๋๋๋ค. ๋๋ ์ด์ ์ ์ฌํ ์์คํ
. ์ง์์ ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์์งํ๋ CI/CD๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. /Kubernetes๋ ๋น๋ ์ค ๋ก๋ ๋ฐธ๋ฐ์ฑ ์ธก๋ฉด์์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ์ต๊ทผ๊น์ง ๋๋ถ๋ถ์ ์ฌ๋๋ค์ ๋จ์ํ ์ปจํ
์ด๋์ Docker ์์ผ์ ๋ํ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๊ณ docker build ๋ช
๋ น์ ์คํํ ์ ์๋๋ก ํ์ฉํ์ต๋๋ค. ์ด๋ ๋งค์ฐ ์์ ํ์ง ์์ผ๋ฉฐ ์ค์ ๋ก ๋น๋ฐ๋ฒํธ ์๋ ๋ฃจํธ๋ sudo๋ฅผ ์ ๊ณตํ๋ ๊ฒ๋ณด๋ค ๋ ๋์ฉ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฌ๋๋ค์ ์ง์์ ์ผ๋ก Buildah๋ฅผ ์ปจํ
์ด๋์์ ์คํํ๋ ค๊ณ ํฉ๋๋ค. ๊ฐ๋จํ ๋งํด์ ์ฐ๋ฆฌ๋ ๋ง๋ค์์ต๋๋ค. ์ฐ๋ฆฌ ์๊ฒฌ์ผ๋ก๋ Buildah๋ฅผ ์ปจํ
์ด๋ ๋ด์์ ์คํํ๊ณ ํด๋น ์ด๋ฏธ์ง๋ฅผ ๊ฒ์ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์
๋๋ค. . ์์ํ์...
์กฐ์
์ด๋ฌํ ์ด๋ฏธ์ง๋ Dockerfiles์์ ๋น๋๋์์ผ๋ฉฐ Buildah ์ ์ฅ์์ ํด๋์ ์์ต๋๋ค. .
์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ์ดํด๋ณผ ๊ฒ์
๋๋ค .
# 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
ํธ์คํธ Linux ์ปค๋ ์์ค์์ ๊ตฌํ๋ OverlayFS ๋์ ์ปจํ ์ด๋ ๋ด๋ถ์ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํฉ๋๋ค. , ํ์ฌ OverlayFS๋ Linux ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ SYS_ADMIN ๊ถํ์ ๋ถ์ฌํ ๊ฒฝ์ฐ์๋ง ๋ง์ดํธํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ๋ฃจํธ ๊ถํ ์์ด Buildah ์ปจํ ์ด๋๋ฅผ ์คํํ๊ณ ์ถ์ต๋๋ค. ํจ์ฆ ์ค๋ฒ๋ ์ด๋ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์๋ํ๋ฉฐ VFS ์คํ ๋ฆฌ์ง ๋๋ผ์ด๋ฒ๋ณด๋ค ์ฑ๋ฅ์ด ๋ ์ข์ต๋๋ค. Fuse๋ฅผ ์ฌ์ฉํ๋ Buildah ์ปจํ ์ด๋๋ฅผ ์คํํ ๋ /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
๋ค์์ผ๋ก ์ถ๊ฐ ์ ์ฅ์ ์ํ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋ญ๋๋ค. ์ถ๊ฐ ์ฝ๊ธฐ ์ ์ฉ ์ด๋ฏธ์ง ์ ์ฅ์๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฐ๋ ์ ์ง์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ ๋จธ์ ์์ ์ค๋ฒ๋ ์ด ์คํ ๋ฆฌ์ง ์์ญ์ ๊ตฌ์ฑํ ๋ค์ NFS๋ฅผ ์ฌ์ฉํ์ฌ ์ด ์คํ ๋ฆฌ์ง๋ฅผ ๋ค๋ฅธ ๋จธ์ ์ ๋ง์ดํธํ๊ณ ํ์ ํตํด ๋ค์ด๋ก๋ํ์ง ์๊ณ ๋ ํด๋น ์คํ ๋ฆฌ์ง์ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํธ์คํธ์ ์ผ๋ถ ์ด๋ฏธ์ง ์คํ ๋ฆฌ์ง๋ฅผ ๋ณผ๋ฅจ์ผ๋ก ์ฐ๊ฒฐํ๊ณ ์ปจํ ์ด๋ ๋ด๋ถ์์ ์ฌ์ฉํ๋ ค๋ฉด ์ด ์คํ ๋ฆฌ์ง๊ฐ ํ์ํฉ๋๋ค.
# 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 ์ต์ ์ ์ ํํฉ๋๋ค. ์ต๋ ๋ณด์์ด ํ์ํ ๊ฒฝ์ฐ ๊ฐ ์ปจํ ์ด๋์ ๋ํด ์ปจํ ์ด๋/์ด๋ฏธ์ง์ ๋ํ ์์ฒด ํด๋๋ฅผ ๋ง๋ค๊ณ ๋ณผ๋ฅจ ๋ง์ดํธ๋ฅผ ํตํด ์ปจํ ์ด๋์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ๊ฒ๋ค๊ฐ ์ปจํ ์ด๋ ์์ฒด์ /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๋ ์ต๋ ๋ณด์์ ๊ฐ์ต๋๋ค: ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๋ฃจํธ ๊ถํ์ด ๋ถ์ฌ๋์ง ์์ผ๋ฉฐ ๋ชจ๋ SECOMP ๋ฐ SELinux ์ ํ ์ฌํญ์ด ์ ์ฉ๋ฉ๋๋ค. ์ด๋ฌํ ์ปจํ ์ด๋๋ โuidmap 0๊ณผ ๊ฐ์ ์ต์ ์ ์ถ๊ฐํ์ฌ ์ฌ์ฉ์ ๋ค์์คํ์ด์ค ๊ฒฉ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์คํํ ์๋ ์์ต๋๋ค. 100000:10000.
์ฑ๋ฅ. ๊ทธ๋ฌ๋ ์ปจํ ์ด๋ ๋ ์ง์คํธ๋ฆฌ์ ๋ชจ๋ ์ด๋ฏธ์ง๊ฐ ๋งค๋ฒ ํธ์คํธ์ ๋ณต์ฌ๋๊ณ ์บ์ฑ์ด ์ ํ ์๋ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ์ฑ๋ฅ์ ์ต์ํ๋ฉ๋๋ค. ์์ ์ด ์๋ฃ๋๋ฉด Buildah ์ปจํ ์ด๋๋ ์ด๋ฏธ์ง๋ฅผ ๋ ์ง์คํธ๋ฆฌ๋ก ๋ณด๋ด๊ณ ํธ์คํธ์ ์ฝํ ์ธ ๋ฅผ ์ญ์ ํด์ผ ํฉ๋๋ค. ๋ค์์ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๊ฐ ๋น๋๋๋ฉด ํธ์คํธ์ ์๋ฌด๊ฒ๋ ๋จ์ง ์์ผ๋ฏ๋ก ๋ ์ง์คํธ๋ฆฌ์์ ๋ค์ ๋ค์ด๋ก๋ํด์ผ ํฉ๋๋ค.
2 ์ต์ ์ ์ ํํฉ๋๋ค. Docker ์์ค ์ฑ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ ํธ์คํธ ์ปจํ ์ด๋/์คํ ๋ฆฌ์ง๋ฅผ ์ปจํ ์ด๋์ ์ง์ ๋ง์ดํธํ ์ ์์ต๋๋ค.
# 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์ ์ ์ฑ ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํ ์ ์๊ธฐ ๋๋ฌธ์ ์ปจํ ์ด๋๋ฅผ ๊ตฌ์ถํ๋ ๊ฐ์ฅ ์์ ํ์ง ์์ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ํ Buildah ์ปจํ ์ด๋์ ํ๋ก์ธ์ค๊ฐ ํธ์คํธ์ ์คํ ๋ฆฌ์ง์ ์ํธ ์์ฉํ ์ ์๋๋ก SELinux ๋ถ๋ฆฌ๋ฅผ ๋นํ์ฑํํด์ผ ํฉ๋๋ค. ์ด ์ต์ ์ ์ปจํ ์ด๋๊ฐ ๋๋จธ์ง ๋ณด์ ๊ธฐ๋ฅ์ ์ํด ์ ๊ฒจ ์๊ณ ๋จ์ํ ํธ์คํธ์์ ์ปจํ ์ด๋๋ฅผ ์คํํ ์ ์๊ธฐ ๋๋ฌธ์ 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๊ฐ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํ๋ฉด ํด๋น ์ด๋ฏธ์ง๋ ํ๋ก์ ํธ ๋ด์ ๋ชจ๋ ํ์ ๋น๋์์ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
์ถ๊ฐ ์ ์ฅ์ฉ๋
ะฃ ์ปจํ ์ด๋๋ฅผ ์์ํ๊ณ ๊ตฌ์ถํ ๋ ์ปจํ ์ด๋ ์์ง์ด ์ฝ๊ธฐ ์ ์ฉ ์ค๋ฒ๋ ์ด ๋ชจ๋์์ ์ธ๋ถ ์ด๋ฏธ์ง ์ ์ฅ์๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ถ๊ฐ ์ ์ฅ์(์ถ๊ฐ ์ ์ฅ์)์ ๊ฐ์ ๋ฉ์ง ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Storage.conf ํ์ผ์ ํ๋ ์ด์์ ์ฝ๊ธฐ ์ ์ฉ ์คํ ๋ฆฌ์ง๋ฅผ ์ถ๊ฐํ๋ฉด ์ปจํ ์ด๋๋ฅผ ์์ํ ๋ ์ปจํ ์ด๋ ์์ง์ด ํด๋น ์คํ ๋ฆฌ์ง์์ ์ํ๋ ์ด๋ฏธ์ง๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ๋ํ ์ด๋ฌํ ์ ์ฅ์์์ ์ด๋ฏธ์ง๋ฅผ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ์๋ง ๋ ์ง์คํธ๋ฆฌ์์ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค. ์ปจํ ์ด๋ ์์ง์ ์ฐ๊ธฐ ๊ฐ๋ฅํ ์คํ ๋ฆฌ์ง์๋ง ์ธ ์ ์์ต๋๋ค.
์๋ก ์คํฌ๋กคํ์ฌ quay.io/buildah/stable ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ๋ฐ ์ฌ์ฉํ๋ Dockerfile์ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ค์ด ์์ต๋๋ค.
# 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๋ฅผ ์์ ํ์ฌ ์คํ ๋ฆฌ์ง ๋๋ผ์ด๋ฒ๊ฐ /var/lib/shared ํด๋์ ์๋ "additionalimagestores"๋ฅผ ์ฌ์ฉํ๋๋ก ์ง์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ ์ค์์๋ ์ปจํ ์ด๋/์คํ ๋ฆฌ์ง์ ๋จ์ฉ์ด ์๋๋ก ๊ณต์ ํด๋๋ฅผ ๋ง๋ค๊ณ ๋ช ๊ฐ์ ์ ๊ธ ํ์ผ์ ์ถ๊ฐํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ๋จ์ํ ๋น ์ปจํ ์ด๋ ์ด๋ฏธ์ง ์ ์ฅ์๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค.
์ด ํด๋๋ณด๋ค ๋์ ๋ ๋ฒจ์ ์ปจํ ์ด๋/์คํ ๋ฆฌ์ง๋ฅผ ๋ง์ดํธํ๋ฉด Buildah๊ฐ ํด๋น ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด์ ์์์ ์ค๋ช ํ ์ต์ 2๋ก ๋์๊ฐ ๋ณด๊ฒ ์ต๋๋ค. Buildah ์ปจํ ์ด๋๋ ํธ์คํธ์ ์ปจํ ์ด๋/์ ์ฅ์๋ฅผ ์ฝ๊ณ ์ธ ์ ์์ผ๋ฉฐ ๊ทธ์ ๋ฐ๋ผ 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์ ๋ง์ดํธ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ปจํ ์ด๋์์ ์์ ํ๋ Buildah๋ ์ด์ ์ Podman/CRI-O๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ด๋ก๋ํ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง(hello, ์๋) ์์ฒด ์คํ ๋ฆฌ์ง(hello, ๋ณด์)์๋ง ์ธ ์ ์์ต๋๋ค. ๋ํ ์ด๋ ์ปจํ ์ด๋์ ๋ํ SELinux ๋ถ๋ฆฌ๋ฅผ ๋นํ์ฑํํ์ง ์๊ณ ์ํ๋๋ค๋ ์ ์ ์ ์ํ์ธ์.
์ค์ํ ๋์์ค
์ด๋ ํ ๊ฒฝ์ฐ์๋ ๊ธฐ๋ณธ ์ ์ฅ์์์ ์ด๋ฏธ์ง๋ฅผ ์ญ์ ํด์๋ ์ ๋ฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด Buildah ์ปจํ ์ด๋๊ฐ ์ถฉ๋ํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ๋ชจ๋ ์ฅ์ ์ ์๋๋๋ค
์ถ๊ฐ ์คํ ๋ฆฌ์ง์ ๊ฐ๋ฅ์ฑ์ ์์ ์๋๋ฆฌ์ค์๋ง ๊ตญํ๋์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ชจ๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ๊ณต์ ๋คํธ์ํฌ ์คํ ๋ฆฌ์ง์ ๋ฐฐ์นํ๊ณ ๋ชจ๋ Buildah ์ปจํ ์ด๋์ ์ด์ ๋ํ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ ์ ์์ต๋๋ค. CI/CD ์์คํ ์ด ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด ์ ๊ธฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ์๋ฐฑ ๊ฐ์ ์ด๋ฏธ์ง๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฌํ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ํ๋์ ์คํ ๋ฆฌ์ง ํธ์คํธ์ ์ง์ค์ํจ ๋ค์ ์ ํธํ๋ ๋คํธ์ํฌ ์คํ ๋ฆฌ์ง ๋๊ตฌ(NFS, Gluster, Ceph, ISCSI, S3...)๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ Buildah ๋๋ Kubernetes ๋ ธ๋์ ์ด ์คํ ๋ฆฌ์ง์ ๋ํ ์ผ๋ฐ ์ก์ธ์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด์ ์ด ๋คํธ์ํฌ ์คํ ๋ฆฌ์ง๋ฅผ /var/lib/shared์ Buildah ์ปจํ ์ด๋์ ๋ง์ดํธํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค. ๊ทธ๊ฒ ์ ๋ถ์ ๋๋ค. Buildah ์ปจํ ์ด๋๋ ๋ ์ด์ ํ์ ํตํด ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํ ํ์๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ์ฌ์ ์ฑ์ฐ๊ธฐ ๋จ๊ณ๋ฅผ ๋ฒ๋ฆฌ๊ณ ์ฆ์ ์ปจํ ์ด๋๋ฅผ ์ถ์ํ ์ค๋น๊ฐ ๋์์ต๋๋ค.
๋ฌผ๋ก ๋ผ์ด๋ธ Kubernetes ์์คํ ์ด๋ ์ปจํ ์ด๋ ์ธํ๋ผ ๋ด์์ ์ด๋ฏธ์ง๋ฅผ ํ ๋ค์ด๋ก๋ํ์ง ์๊ณ ๋ ์ด๋์๋ ์ปจํ ์ด๋๋ฅผ ์์ํ๊ณ ์คํํ ์ ์์ต๋๋ค. ๋ํ ์ ๋ฐ์ดํธ๋ ์ด๋ฏธ์ง๋ฅผ ์ ๋ก๋ํ๋ผ๋ ํธ์ ์์ฒญ์ ์์ ํ ์ปจํ ์ด๋ ๋ ์ง์คํธ๋ฆฌ๋ ์ด ์ด๋ฏธ์ง๋ฅผ ๊ณต์ ๋คํธ์ํฌ ์คํ ๋ฆฌ์ง์ ์๋์ผ๋ก ๋ณด๋ผ ์ ์์ผ๋ฉฐ, ์ฌ๊ธฐ์์ ์ฆ์ ๋ชจ๋ ๋ ธ๋์์ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
์ปจํ ์ด๋ ์ด๋ฏธ์ง ํฌ๊ธฐ๊ฐ ์ ๊ธฐ๊ฐ๋ฐ์ดํธ์ ๋ฌํ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ์ถ๊ฐ ์คํ ๋ฆฌ์ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๋ ธ๋ ์ ์ฒด์์ ์ด๋ฌํ ์ด๋ฏธ์ง๋ฅผ ๋ณต์ ํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ ์ปจํ ์ด๋๋ฅผ ๊ฑฐ์ ์ฆ๊ฐ์ ์ผ๋ก ์์ํ ์ ์์ต๋๋ค.
๋ํ ํ์ฌ ์ค๋ฒ๋ ์ด ๋ณผ๋ฅจ ๋ง์ดํธ๋ผ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ๊ฐ๋ฐ ์ค์ ๋๋ค. ์ด๋ฅผ ํตํด ์ปจํ ์ด๋ ๊ตฌ์ถ ์๋๊ฐ ๋์ฑ ๋นจ๋ผ์ง๋๋ค.
๊ฒฐ๋ก
Kubernetes/CRI-O, Podman ๋๋ Docker์ ์ปจํ ์ด๋ ๋ด์์ Buildah๋ฅผ ์คํํ๋ ๊ฒ์ docker.socket์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ์คํ ๊ฐ๋ฅํ๊ณ ๊ฐ๋จํ๋ฉฐ ํจ์ฌ ๋ ์์ ํฉ๋๋ค. ์ด๋ฏธ์ง ์์ ์ ์ ์ฐ์ฑ์ด ํฌ๊ฒ ํฅ์๋์์ผ๋ฏ๋ก ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์คํํ์ฌ ๋ณด์๊ณผ ์ฑ๋ฅ ๊ฐ์ ๊ท ํ์ ์ต์ ํํ ์ ์์ต๋๋ค.
์ถ๊ฐ ์คํ ๋ฆฌ์ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ์ง๋ฅผ ๋
ธ๋๋ก ๋ค์ด๋ก๋ํ๋ ์๋๋ฅผ ๋์ด๊ฑฐ๋ ์์ ํ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
์ถ์ฒ : habr.com
