ಕಂಟೇನರ್ ಒಳಗೆ ಬಿಲ್ಡಾವನ್ನು ಚಲಾಯಿಸಲು ಶಿಫಾರಸುಗಳು

ಕಂಟೇನರ್ ರನ್‌ಟೈಮ್ ಅನ್ನು ಪ್ರತ್ಯೇಕ ಟೂಲಿಂಗ್ ಘಟಕಗಳಾಗಿ ಡಿಕೌಪ್ ಮಾಡುವ ಸೌಂದರ್ಯವೇನು? ನಿರ್ದಿಷ್ಟವಾಗಿ ಹೇಳುವುದಾದರೆ, ಈ ಉಪಕರಣಗಳು ಪರಸ್ಪರ ರಕ್ಷಿಸಲು ಸಂಯೋಜಿಸಲು ಪ್ರಾರಂಭಿಸಬಹುದು.

ಕಂಟೇನರ್ ಒಳಗೆ ಬಿಲ್ಡಾವನ್ನು ಚಲಾಯಿಸಲು ಶಿಫಾರಸುಗಳು

ಕಂಟೈನರೈಸ್ಡ್ OCI ಚಿತ್ರಗಳನ್ನು ನಿರ್ಮಿಸುವ ಕಲ್ಪನೆಗೆ ಅನೇಕ ಜನರು ಆಕರ್ಷಿತರಾಗುತ್ತಾರೆ ಕುಬರ್ನೆಟ್ಸ್ ಅಥವಾ ಇದೇ ವ್ಯವಸ್ಥೆ. ನಾವು ನಿರಂತರವಾಗಿ ಚಿತ್ರಗಳನ್ನು ಸಂಗ್ರಹಿಸುವ CI/CD ಅನ್ನು ಹೊಂದಿದ್ದೇವೆ ಎಂದು ಹೇಳೋಣ Red Hat ಓಪನ್‌ಶಿಫ್ಟ್ನಿರ್ಮಾಣದ ಸಮಯದಲ್ಲಿ ಲೋಡ್ ಬ್ಯಾಲೆನ್ಸಿಂಗ್ ವಿಷಯದಲ್ಲಿ ಕುಬರ್ನೆಟ್ಸ್ ಸಾಕಷ್ಟು ಉಪಯುಕ್ತವಾಗಿದೆ. ಇತ್ತೀಚಿನವರೆಗೂ, ಹೆಚ್ಚಿನ ಜನರು ಡಾಕರ್ ಸಾಕೆಟ್‌ಗೆ ಕಂಟೇನರ್‌ಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ನೀಡಿದರು ಮತ್ತು ಡಾಕರ್ ಬಿಲ್ಡ್ ಕಮಾಂಡ್ ಅನ್ನು ಚಲಾಯಿಸಲು ಅವರಿಗೆ ಅವಕಾಶ ನೀಡಿದರು. ಹಲವಾರು ವರ್ಷಗಳ ಹಿಂದೆ ನಾವು ತೋರಿಸಿದ್ದೇವೆಇದು ತುಂಬಾ ಅಸುರಕ್ಷಿತವಾಗಿದೆ, ವಾಸ್ತವವಾಗಿ, ಇದು ಪಾಸ್‌ವರ್ಡ್‌ರಹಿತ ರೂಟ್ ಅಥವಾ ಸುಡೋವನ್ನು ನೀಡುವುದಕ್ಕಿಂತ ಕೆಟ್ಟದಾಗಿದೆ.

ಅದಕ್ಕಾಗಿಯೇ ಜನರು ನಿರಂತರವಾಗಿ ಕಂಟೇನರ್ನಲ್ಲಿ ಬಿಲ್ಡಾವನ್ನು ಚಲಾಯಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಾರೆ. ಸಂಕ್ಷಿಪ್ತವಾಗಿ, ನಾವು ರಚಿಸಿದ್ದೇವೆ ಉದಾಹರಣೆ ನಮ್ಮ ಅಭಿಪ್ರಾಯದಲ್ಲಿ, ಕಂಟೇನರ್‌ನಲ್ಲಿ ಬಿಲ್ಡಾವನ್ನು ಚಲಾಯಿಸುವುದು ಹೇಗೆ ಉತ್ತಮ, ಮತ್ತು ಅನುಗುಣವಾದ ಚಿತ್ರಗಳನ್ನು ಪೋಸ್ಟ್ ಮಾಡಲಾಗಿದೆ quay.io/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

ಓವರ್‌ಲೇಎಫ್‌ಎಸ್ ಬದಲಿಗೆ, ಹೋಸ್ಟ್ ಲಿನಕ್ಸ್ ಕರ್ನಲ್ ಮಟ್ಟದಲ್ಲಿ ಅಳವಡಿಸಲಾಗಿದೆ, ನಾವು ಕಂಟೇನರ್‌ನಲ್ಲಿ ಪ್ರೋಗ್ರಾಂ ಅನ್ನು ಬಳಸುತ್ತೇವೆ ಫ್ಯೂಸ್-ಓವರ್ಲೇ, ಏಕೆಂದರೆ ಪ್ರಸ್ತುತ OverlayFS ಅನ್ನು ನೀವು Linux ಸಾಮರ್ಥ್ಯಗಳನ್ನು ಬಳಸಿಕೊಂಡು SYS_ADMIN ಅನುಮತಿಗಳನ್ನು ನೀಡಿದರೆ ಮಾತ್ರ ಅದನ್ನು ಆರೋಹಿಸಬಹುದು. ಮತ್ತು ನಾವು ಯಾವುದೇ ಮೂಲ ಸವಲತ್ತುಗಳಿಲ್ಲದೆ ನಮ್ಮ ಬಿಲ್ಡಾ ಕಂಟೈನರ್‌ಗಳನ್ನು ಚಲಾಯಿಸಲು ಬಯಸುತ್ತೇವೆ. ಫ್ಯೂಸ್-ಓವರ್ಲೇ ತ್ವರಿತವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಮತ್ತು VFS ಶೇಖರಣಾ ಚಾಲಕಕ್ಕಿಂತ ಉತ್ತಮ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಹೊಂದಿದೆ. ಫ್ಯೂಸ್ ಅನ್ನು ಬಳಸುವ 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 ಪರಿಸರ ವೇರಿಯೇಬಲ್ ಅನ್ನು ಬಳಸುವ ಮೂಲಕ, ನಾವು ಬಿಲ್ಡಾ ಕಂಟೇನರ್ ಅನ್ನು ಡೀಫಾಲ್ಟ್ ಆಗಿ chroot ಪ್ರತ್ಯೇಕತೆಯೊಂದಿಗೆ ರನ್ ಮಾಡಲು ಹೇಳುತ್ತಿದ್ದೇವೆ. ಇಲ್ಲಿ ಹೆಚ್ಚುವರಿ ನಿರೋಧನ ಅಗತ್ಯವಿಲ್ಲ, ಏಕೆಂದರೆ ನಾವು ಈಗಾಗಲೇ ಕಂಟೇನರ್‌ನಲ್ಲಿ ಕೆಲಸ ಮಾಡುತ್ತಿದ್ದೇವೆ. Buildah ತನ್ನದೇ ಆದ ನೇಮ್‌ಸ್ಪೇಸ್-ಬೇರ್ಪಡಿಸಿದ ಕಂಟೈನರ್‌ಗಳನ್ನು ರಚಿಸಲು, SYS_ADMIN ಸವಲತ್ತು ಅಗತ್ಯವಿದೆ, ಇದು ಕಂಟೇನರ್‌ನ SELinux ಮತ್ತು SECCOMP ನಿಯಮಗಳನ್ನು ಸಡಿಲಿಸುವ ಅಗತ್ಯವಿರುತ್ತದೆ, ಇದು ಸುರಕ್ಷಿತ ಕಂಟೇನರ್‌ನಿಂದ ನಿರ್ಮಿಸಲು ನಮ್ಮ ಆದ್ಯತೆಗೆ ವಿರುದ್ಧವಾಗಿದೆ.

ಕಂಟೇನರ್ ಒಳಗೆ ಬಿಲ್ಡಾವನ್ನು ಓಡಿಸುವುದು

ಮೇಲೆ ಚರ್ಚಿಸಲಾದ ಬಿಲ್ಡಾ ಕಂಟೇನರ್ ಇಮೇಜ್ ರೇಖಾಚಿತ್ರವು ಅಂತಹ ಕಂಟೇನರ್‌ಗಳನ್ನು ಪ್ರಾರಂಭಿಸುವ ವಿಧಾನಗಳನ್ನು ಮೃದುವಾಗಿ ಬದಲಾಯಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ.

ವೇಗದ ವಿರುದ್ಧ ಸುರಕ್ಷತೆ

ಕಂಪ್ಯೂಟರ್ ಸುರಕ್ಷತೆಯು ಯಾವಾಗಲೂ ಪ್ರಕ್ರಿಯೆಯ ವೇಗ ಮತ್ತು ಅದರ ಸುತ್ತಲೂ ಎಷ್ಟು ರಕ್ಷಣೆಯನ್ನು ಆವರಿಸಿದೆ ಎಂಬುದರ ನಡುವಿನ ರಾಜಿಯಾಗಿದೆ. ಧಾರಕಗಳನ್ನು ಜೋಡಿಸುವಾಗ ಈ ಹೇಳಿಕೆಯು ಸಹ ನಿಜವಾಗಿದೆ, ಆದ್ದರಿಂದ ನಾವು ಅಂತಹ ರಾಜಿ ಆಯ್ಕೆಗಳನ್ನು ಕೆಳಗೆ ಪರಿಗಣಿಸುತ್ತೇವೆ.

ಮೇಲೆ ಚರ್ಚಿಸಲಾದ ಕಂಟೇನರ್ ಚಿತ್ರವು ಅದರ ಸಂಗ್ರಹಣೆಯನ್ನು /var/lib/containers ನಲ್ಲಿ ಇರಿಸುತ್ತದೆ. ಆದ್ದರಿಂದ, ನಾವು ಈ ಫೋಲ್ಡರ್‌ಗೆ ವಿಷಯವನ್ನು ಆರೋಹಿಸಬೇಕಾಗಿದೆ ಮತ್ತು ನಾವು ಇದನ್ನು ಹೇಗೆ ಮಾಡುತ್ತೇವೆ ಎಂಬುದು ಕಂಟೇನರ್ ಚಿತ್ರಗಳನ್ನು ನಿರ್ಮಿಸುವ ವೇಗವನ್ನು ಹೆಚ್ಚು ಪರಿಣಾಮ ಬೀರುತ್ತದೆ.

ಮೂರು ಆಯ್ಕೆಗಳನ್ನು ಪರಿಗಣಿಸೋಣ.

ಆಯ್ಕೆ 1. ಗರಿಷ್ಠ ಭದ್ರತೆಯ ಅಗತ್ಯವಿದ್ದರೆ, ಪ್ರತಿ ಕಂಟೇನರ್‌ಗೆ ನೀವು ಕಂಟೇನರ್‌ಗಳು/ಚಿತ್ರಕ್ಕಾಗಿ ನಿಮ್ಮ ಸ್ವಂತ ಫೋಲ್ಡರ್ ಅನ್ನು ರಚಿಸಬಹುದು ಮತ್ತು ಅದನ್ನು ವಾಲ್ಯೂಮ್-ಮೌಂಟ್ ಮೂಲಕ ಕಂಟೇನರ್‌ಗೆ ಸಂಪರ್ಕಿಸಬಹುದು. ಮತ್ತು ಜೊತೆಗೆ, ಕಾಂಟೆಕ್ಸ್ಟ್ ಡೈರೆಕ್ಟರಿಯನ್ನು ಕಂಟೇನರ್‌ನಲ್ಲಿಯೇ / ಬಿಲ್ಡ್ ಫೋಲ್ಡರ್‌ನಲ್ಲಿ ಇರಿಸಿ:

# 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

ಭದ್ರತೆ. ಅಂತಹ ಕಂಟೈನರ್‌ನಲ್ಲಿ ಚಾಲನೆಯಲ್ಲಿರುವ ಬಿಲ್ಡಾವು ಗರಿಷ್ಠ ಸುರಕ್ಷತೆಯನ್ನು ಹೊಂದಿದೆ: ಇದು ಸಾಮರ್ಥ್ಯಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಯಾವುದೇ ರೂಟ್ ಸವಲತ್ತುಗಳನ್ನು ನೀಡಲಾಗಿಲ್ಲ, ಮತ್ತು ಎಲ್ಲಾ SECOMP ಮತ್ತು SELinux ನಿರ್ಬಂಧಗಳು ಇದಕ್ಕೆ ಅನ್ವಯಿಸುತ್ತವೆ. ಅಂತಹ ಧಾರಕವನ್ನು ಬಳಕೆದಾರರ ನೇಮ್‌ಸ್ಪೇಸ್ ಪ್ರತ್ಯೇಕತೆಯಂತಹ ಆಯ್ಕೆಯನ್ನು ಸೇರಿಸುವ ಮೂಲಕ ಸಹ ಚಲಾಯಿಸಬಹುದು —uidmap 0: 100000:10000.

ಪ್ರದರ್ಶನ. ಆದರೆ ಇಲ್ಲಿ ಕಾರ್ಯಕ್ಷಮತೆ ಕಡಿಮೆಯಾಗಿದೆ, ಏಕೆಂದರೆ ಕಂಟೇನರ್ ರಿಜಿಸ್ಟ್ರಿಗಳಿಂದ ಯಾವುದೇ ಚಿತ್ರಗಳನ್ನು ಪ್ರತಿ ಬಾರಿ ಹೋಸ್ಟ್‌ಗೆ ನಕಲಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳುವಿಕೆಯು ಕಾರ್ಯನಿರ್ವಹಿಸುವುದಿಲ್ಲ. ಅದರ ಕೆಲಸವನ್ನು ಪೂರ್ಣಗೊಳಿಸುವಾಗ, ಬಿಲ್ಡಾ ಕಂಟೇನರ್ ಚಿತ್ರವನ್ನು ನೋಂದಾವಣೆಗೆ ಕಳುಹಿಸಬೇಕು ಮತ್ತು ಹೋಸ್ಟ್‌ನಲ್ಲಿರುವ ವಿಷಯವನ್ನು ನಾಶಪಡಿಸಬೇಕು. ಮುಂದಿನ ಬಾರಿ ಕಂಟೇನರ್ ಚಿತ್ರವನ್ನು ನಿರ್ಮಿಸಿದಾಗ, ಅದನ್ನು ಮತ್ತೆ ನೋಂದಾವಣೆಯಿಂದ ಡೌನ್‌ಲೋಡ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ, ಏಕೆಂದರೆ ಆ ಹೊತ್ತಿಗೆ ಹೋಸ್ಟ್‌ನಲ್ಲಿ ಏನೂ ಉಳಿಯುವುದಿಲ್ಲ.

ಆಯ್ಕೆ 2. ನಿಮಗೆ ಡಾಕರ್-ಮಟ್ಟದ ಕಾರ್ಯಕ್ಷಮತೆಯ ಅಗತ್ಯವಿದ್ದರೆ, ನೀವು ಹೋಸ್ಟ್ ಕಂಟೇನರ್/ಸ್ಟೋರೇಜ್ ಅನ್ನು ನೇರವಾಗಿ ಕಂಟೇನರ್‌ಗೆ ಆರೋಹಿಸಬಹುದು.

# 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 ಬೇರ್ಪಡಿಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬೇಕಾಗುತ್ತದೆ ಇದರಿಂದ ಬಿಲ್ಡಾ ಕಂಟೇನರ್‌ನಲ್ಲಿನ ಪ್ರಕ್ರಿಯೆಗಳು ಹೋಸ್ಟ್‌ನಲ್ಲಿನ ಸಂಗ್ರಹಣೆಯೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸಬಹುದು. ಈ ಆಯ್ಕೆಯು ಡಾಕರ್ ಸಾಕೆಟ್‌ಗಿಂತಲೂ ಉತ್ತಮವಾಗಿದೆ ಎಂಬುದನ್ನು ಗಮನಿಸಿ ಏಕೆಂದರೆ ಉಳಿದಿರುವ ಭದ್ರತಾ ವೈಶಿಷ್ಟ್ಯಗಳಿಂದ ಕಂಟೇನರ್ ಅನ್ನು ಲಾಕ್ ಮಾಡಲಾಗಿದೆ ಮತ್ತು ಹೋಸ್ಟ್‌ನಲ್ಲಿ ಕಂಟೇನರ್ ಅನ್ನು ಸರಳವಾಗಿ ಚಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.

ಪ್ರದರ್ಶನ. ಇಲ್ಲಿ ಇದು ಗರಿಷ್ಠವಾಗಿದೆ, ಏಕೆಂದರೆ ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳುವಿಕೆಯನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಬಳಸಲಾಗಿದೆ. ಪೋಡ್‌ಮ್ಯಾನ್ ಅಥವಾ ಸಿಆರ್‌ಐ-ಒ ಈಗಾಗಲೇ ಅಗತ್ಯವಿರುವ ಚಿತ್ರವನ್ನು ಹೋಸ್ಟ್‌ಗೆ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿದ್ದರೆ, ಕಂಟೇನರ್‌ನಲ್ಲಿರುವ ಬಿಲ್ಡಾ ಪ್ರಕ್ರಿಯೆಯು ಅದನ್ನು ಮತ್ತೆ ಡೌನ್‌ಲೋಡ್ ಮಾಡಬೇಕಾಗಿಲ್ಲ, ಮತ್ತು ಈ ಚಿತ್ರವನ್ನು ಆಧರಿಸಿದ ನಂತರದ ಬಿಲ್ಡ್‌ಗಳು ಸಂಗ್ರಹದಿಂದ ಬೇಕಾದುದನ್ನು ತೆಗೆದುಕೊಳ್ಳಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ. .

ಆಯ್ಕೆ 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 ಇಮೇಜ್ ಸಂಗ್ರಹಣೆಗೆ ಕೆಟ್ಟದ್ದನ್ನು ಸ್ಲಿಪ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಮತ್ತೊಂದೆಡೆ, ಅದರ ವಿನ್ಯಾಸದ ಭಾಗವಾಗಿ, ಕಂಟೇನರ್ ಇತರ ಕಂಟೇನರ್ಗಳ ಜೋಡಣೆಯೊಂದಿಗೆ ಹಸ್ತಕ್ಷೇಪ ಮಾಡಬಹುದು.

ಪ್ರದರ್ಶನ. ಪೋಡ್‌ಮ್ಯಾನ್/ಸಿಆರ್‌ಐ-ಒ ಬಳಸಿ ಈಗಾಗಲೇ ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾದ ಚಿತ್ರಗಳನ್ನು ನೀವು ಬಳಸಲಾಗುವುದಿಲ್ಲವಾದ್ದರಿಂದ, ಹೋಸ್ಟ್ ಮಟ್ಟದಲ್ಲಿ ಹಂಚಿದ ಸಂಗ್ರಹವನ್ನು ಬಳಸುವಾಗ ಇದು ಕೆಟ್ಟದಾಗಿದೆ. ಆದಾಗ್ಯೂ, ಒಮ್ಮೆ Buildah ಚಿತ್ರವನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿದರೆ, ಪ್ರಾಜೆಕ್ಟ್‌ನಲ್ಲಿನ ಯಾವುದೇ ನಂತರದ ನಿರ್ಮಾಣಗಳಲ್ಲಿ ಚಿತ್ರವನ್ನು ಬಳಸಬಹುದು.

ಹೆಚ್ಚುವರಿ ಸಂಗ್ರಹಣೆ

У ಕಂಟೈನರ್/ಸಂಗ್ರಹಣೆ ಹೆಚ್ಚುವರಿ ಮಳಿಗೆಗಳು (ಹೆಚ್ಚುವರಿ ಮಳಿಗೆಗಳು) ನಂತಹ ತಂಪಾದ ವಿಷಯವಿದೆ, ಇದಕ್ಕೆ ಧನ್ಯವಾದಗಳು ಕಂಟೇನರ್‌ಗಳನ್ನು ಪ್ರಾರಂಭಿಸುವಾಗ ಮತ್ತು ನಿರ್ಮಿಸುವಾಗ, ಕಂಟೇನರ್ ಎಂಜಿನ್‌ಗಳು ಬಾಹ್ಯ ಇಮೇಜ್ ಸ್ಟೋರ್‌ಗಳನ್ನು ಓದಲು-ಮಾತ್ರ ಓವರ್‌ಲೇ ಮೋಡ್‌ನಲ್ಲಿ ಬಳಸಬಹುದು. ಮೂಲಭೂತವಾಗಿ, ನೀವು store.conf ಫೈಲ್‌ಗೆ ಒಂದು ಅಥವಾ ಹೆಚ್ಚಿನ ಓದಲು-ಮಾತ್ರ ಸಂಗ್ರಹಣೆಗಳನ್ನು ಸೇರಿಸಬಹುದು ಇದರಿಂದ ನೀವು ಕಂಟೇನರ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಿದಾಗ, ಕಂಟೇನರ್ ಎಂಜಿನ್ ಅವುಗಳಲ್ಲಿ ಬಯಸಿದ ಚಿತ್ರವನ್ನು ಹುಡುಕುತ್ತದೆ. ಇದಲ್ಲದೆ, ಈ ಯಾವುದೇ ಸ್ಟೋರೇಜ್‌ಗಳಲ್ಲಿ ಅದು ಕಾಣದಿದ್ದರೆ ಮಾತ್ರ ಅದು ನೋಂದಾವಣೆಯಿಂದ ಚಿತ್ರವನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡುತ್ತದೆ. ಕಂಟೈನರ್ ಎಂಜಿನ್ ಬರೆಯಬಹುದಾದ ಸಂಗ್ರಹಣೆಗೆ ಮಾತ್ರ ಬರೆಯಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ...

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 ಅನ್ನು ಕಂಟೇನರ್ ಇಮೇಜ್‌ನಲ್ಲಿ ಮಾರ್ಪಡಿಸುತ್ತೇವೆ, ಶೇಖರಣಾ ಡ್ರೈವರ್‌ಗೆ /var/lib/shared ಫೋಲ್ಡರ್‌ನಲ್ಲಿ "additionalimagestores" ಅನ್ನು ಬಳಸಲು ಹೇಳುತ್ತೇವೆ. ಮತ್ತು ಮುಂದಿನ ಸಾಲಿನಲ್ಲಿ ನಾವು ಹಂಚಿದ ಫೋಲ್ಡರ್ ಅನ್ನು ರಚಿಸುತ್ತೇವೆ ಮತ್ತು ಒಂದೆರಡು ಲಾಕ್ ಫೈಲ್‌ಗಳನ್ನು ಸೇರಿಸುತ್ತೇವೆ ಇದರಿಂದ ಕಂಟೇನರ್‌ಗಳು / ಸಂಗ್ರಹಣೆಯಿಂದ ಯಾವುದೇ ದುರುಪಯೋಗವಿಲ್ಲ. ಮೂಲಭೂತವಾಗಿ, ನಾವು ಸರಳವಾಗಿ ಖಾಲಿ ಕಂಟೇನರ್ ಇಮೇಜ್ ಸ್ಟೋರ್ ಅನ್ನು ರಚಿಸುತ್ತಿದ್ದೇವೆ.

ಈ ಫೋಲ್ಡರ್‌ಗಿಂತ ಹೆಚ್ಚಿನ ಮಟ್ಟದಲ್ಲಿ ನೀವು ಕಂಟೇನರ್‌ಗಳು/ಸ್ಟೋರೇಜ್ ಅನ್ನು ಆರೋಹಿಸಿದರೆ, Buildah ಚಿತ್ರಗಳನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ.

ಈಗ ನಾವು ಮೇಲೆ ಚರ್ಚಿಸಿದ ಆಯ್ಕೆ 2 ಗೆ ಹಿಂತಿರುಗೋಣ, ಬಿಲ್ಡಾ ಕಂಟೇನರ್ ಹೋಸ್ಟ್‌ಗಳಲ್ಲಿ ಕಂಟೈನರ್‌ಗಳಿಗೆ/ಸ್ಟೋರ್‌ಗೆ ಓದಬಹುದು ಮತ್ತು ಬರೆಯಬಹುದು ಮತ್ತು ಅದರ ಪ್ರಕಾರ, ಪೊಡ್‌ಮ್ಯಾನ್/ಸಿಆರ್‌ಐ-ಒ ಮಟ್ಟದಲ್ಲಿ ಚಿತ್ರಗಳನ್ನು ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳುವುದರಿಂದ ಗರಿಷ್ಠ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಹೊಂದಿದೆ, ಆದರೆ ಕನಿಷ್ಠ ಭದ್ರತೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ ಏಕೆಂದರೆ ಇದು ನೇರವಾಗಿ ಶೇಖರಣೆಗೆ ಬರೆಯಬಹುದು. ಈಗ ಇಲ್ಲಿ ಹೆಚ್ಚುವರಿ ಸಂಗ್ರಹಣೆಯನ್ನು ಸೇರಿಸೋಣ ಮತ್ತು ಎರಡೂ ಪ್ರಪಂಚದ ಅತ್ಯುತ್ತಮವಾದದ್ದನ್ನು ಪಡೆದುಕೊಳ್ಳೋಣ.

# 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 (ಹಲೋ, ಸ್ಪೀಡ್) ಬಳಸಿ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿದ ಯಾವುದೇ ಚಿತ್ರಗಳನ್ನು ಬಳಸಬಹುದು, ಆದರೆ ಅದರ ಸ್ವಂತ ಸಂಗ್ರಹಣೆಗೆ ಮಾತ್ರ ಬರೆಯಬಹುದು (ಹಲೋ, ಭದ್ರತೆ). ಕಂಟೇನರ್‌ಗಾಗಿ SELinux ಬೇರ್ಪಡಿಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸದೆಯೇ ಇದನ್ನು ಮಾಡಲಾಗುತ್ತದೆ ಎಂಬುದನ್ನು ಸಹ ಗಮನಿಸಿ.

ಪ್ರಮುಖ ಸೂಕ್ಷ್ಮ ವ್ಯತ್ಯಾಸ

ಯಾವುದೇ ಸಂದರ್ಭದಲ್ಲೂ ನೀವು ಆಧಾರವಾಗಿರುವ ರೆಪೊಸಿಟರಿಯಿಂದ ಯಾವುದೇ ಚಿತ್ರಗಳನ್ನು ಅಳಿಸಬಾರದು. ಇಲ್ಲದಿದ್ದರೆ, ಬಿಲ್ಡಾ ಕಂಟೇನರ್ ಕ್ರ್ಯಾಶ್ ಆಗಬಹುದು.

ಮತ್ತು ಇವುಗಳು ಎಲ್ಲಾ ಅನುಕೂಲಗಳಲ್ಲ

ಹೆಚ್ಚುವರಿ ಸಂಗ್ರಹಣೆಯ ಸಾಧ್ಯತೆಗಳು ಮೇಲಿನ ಸನ್ನಿವೇಶಕ್ಕೆ ಸೀಮಿತವಾಗಿಲ್ಲ. ಉದಾಹರಣೆಗೆ, ನೀವು ಎಲ್ಲಾ ಕಂಟೇನರ್ ಚಿತ್ರಗಳನ್ನು ಹಂಚಿದ ನೆಟ್‌ವರ್ಕ್ ಸಂಗ್ರಹಣೆಯಲ್ಲಿ ಇರಿಸಬಹುದು ಮತ್ತು ಎಲ್ಲಾ ಬಿಲ್ಡಾ ಕಂಟೈನರ್‌ಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ನೀಡಬಹುದು. ಧಾರಕ ಚಿತ್ರಗಳನ್ನು ನಿರ್ಮಿಸಲು ನಮ್ಮ CI/CD ವ್ಯವಸ್ಥೆಯು ನಿಯಮಿತವಾಗಿ ಬಳಸುವ ನೂರಾರು ಚಿತ್ರಗಳನ್ನು ನಾವು ಹೊಂದಿದ್ದೇವೆ ಎಂದು ಹೇಳೋಣ. ನಾವು ಈ ಎಲ್ಲಾ ಚಿತ್ರಗಳನ್ನು ಒಂದು ಶೇಖರಣಾ ಹೋಸ್ಟ್‌ನಲ್ಲಿ ಕೇಂದ್ರೀಕರಿಸುತ್ತೇವೆ ಮತ್ತು ನಂತರ, ಆದ್ಯತೆಯ ನೆಟ್‌ವರ್ಕ್ ಶೇಖರಣಾ ಸಾಧನಗಳನ್ನು (NFS, Gluster, Ceph, ISCSI, S3...) ಬಳಸಿ, ನಾವು ಈ ಸಂಗ್ರಹಣೆಗೆ ಎಲ್ಲಾ Buildah ಅಥವಾ Kubernetes ನೋಡ್‌ಗಳಿಗೆ ಸಾಮಾನ್ಯ ಪ್ರವೇಶವನ್ನು ತೆರೆಯುತ್ತೇವೆ.

ಈಗ ಈ ನೆಟ್‌ವರ್ಕ್ ಸಂಗ್ರಹಣೆಯನ್ನು /var/lib/shared ನಲ್ಲಿ ಬಿಲ್ಡಾ ಕಂಟೇನರ್‌ಗೆ ಆರೋಹಿಸಲು ಸಾಕು ಮತ್ತು ಅಷ್ಟೆ - ಬಿಲ್ಡಾ ಕಂಟೈನರ್‌ಗಳು ಇನ್ನು ಮುಂದೆ ಪುಲ್ ಮೂಲಕ ಚಿತ್ರಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಬೇಕಾಗಿಲ್ಲ. ಹೀಗಾಗಿ, ನಾವು ಪೂರ್ವ-ಜನಸಂಖ್ಯೆಯ ಹಂತವನ್ನು ಹೊರಹಾಕುತ್ತೇವೆ ಮತ್ತು ಧಾರಕಗಳನ್ನು ಹೊರಹಾಕಲು ತಕ್ಷಣವೇ ಸಿದ್ಧರಾಗಿದ್ದೇವೆ.

ಮತ್ತು ಸಹಜವಾಗಿ, ಚಿತ್ರಗಳ ಯಾವುದೇ ಪುಲ್ ಡೌನ್‌ಲೋಡ್ ಮಾಡದೆಯೇ ಎಲ್ಲಿಯಾದರೂ ಕಂಟೇನರ್‌ಗಳನ್ನು ಪ್ರಾರಂಭಿಸಲು ಮತ್ತು ರನ್ ಮಾಡಲು ಲೈವ್ ಕುಬರ್ನೆಟ್ಸ್ ಸಿಸ್ಟಮ್ ಅಥವಾ ಕಂಟೇನರ್ ಮೂಲಸೌಕರ್ಯದಲ್ಲಿ ಇದನ್ನು ಬಳಸಬಹುದು. ಮೇಲಾಗಿ, ಕಂಟೈನರ್ ರಿಜಿಸ್ಟ್ರಿ, ಅದಕ್ಕೆ ನವೀಕರಿಸಿದ ಚಿತ್ರವನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಲು ಪುಶ್ ವಿನಂತಿಯನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ, ಈ ಚಿತ್ರವನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಹಂಚಿಕೊಂಡ ನೆಟ್‌ವರ್ಕ್ ಸಂಗ್ರಹಣೆಗೆ ಕಳುಹಿಸಬಹುದು, ಅಲ್ಲಿ ಅದು ತಕ್ಷಣವೇ ಎಲ್ಲಾ ನೋಡ್‌ಗಳಿಗೆ ಲಭ್ಯವಾಗುತ್ತದೆ.

ಕಂಟೈನರ್ ಚಿತ್ರಗಳು ಕೆಲವೊಮ್ಮೆ ಅನೇಕ ಗಿಗಾಬೈಟ್ ಗಾತ್ರವನ್ನು ತಲುಪಬಹುದು. ಹೆಚ್ಚುವರಿ ಸಂಗ್ರಹಣೆಯ ಕಾರ್ಯವು ನೋಡ್‌ಗಳಾದ್ಯಂತ ಅಂತಹ ಚಿತ್ರಗಳನ್ನು ಕ್ಲೋನಿಂಗ್ ಮಾಡುವುದನ್ನು ತಪ್ಪಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ ಮತ್ತು ಧಾರಕಗಳನ್ನು ಬಿಡುಗಡೆ ಮಾಡುವುದನ್ನು ಬಹುತೇಕ ತತ್‌ಕ್ಷಣ ಮಾಡುತ್ತದೆ.

ಹೆಚ್ಚುವರಿಯಾಗಿ, ನಾವು ಪ್ರಸ್ತುತ ಓವರ್‌ಲೇ ವಾಲ್ಯೂಮ್ ಮೌಂಟ್‌ಗಳು ಎಂಬ ಹೊಸ ವೈಶಿಷ್ಟ್ಯದಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿದ್ದೇವೆ, ಇದು ಕಂಟೇನರ್‌ಗಳನ್ನು ನಿರ್ಮಿಸುವುದನ್ನು ಇನ್ನಷ್ಟು ವೇಗಗೊಳಿಸುತ್ತದೆ.

ತೀರ್ಮಾನಕ್ಕೆ

Kubernetes/CRI-O, Podman, ಅಥವಾ Docker ನಲ್ಲಿ ಕಂಟೇನರ್‌ನಲ್ಲಿ ಬಿಲ್ಡಾವನ್ನು ರನ್ ಮಾಡುವುದು ಕಾರ್ಯಸಾಧ್ಯ, ಸರಳ ಮತ್ತು docker.socket ಬಳಸುವುದಕ್ಕಿಂತ ಹೆಚ್ಚು ಸುರಕ್ಷಿತವಾಗಿದೆ. ನಾವು ಚಿತ್ರಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವ ನಮ್ಯತೆಯನ್ನು ಹೆಚ್ಚು ಹೆಚ್ಚಿಸಿದ್ದೇವೆ, ಆದ್ದರಿಂದ ಭದ್ರತೆ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆಯ ನಡುವಿನ ಸಮತೋಲನವನ್ನು ಅತ್ಯುತ್ತಮವಾಗಿಸಲು ನೀವು ಅವುಗಳನ್ನು ವಿವಿಧ ರೀತಿಯಲ್ಲಿ ರನ್ ಮಾಡಬಹುದು.

ಹೆಚ್ಚುವರಿ ಸಂಗ್ರಹಣೆಯ ಕಾರ್ಯವು ನೋಡ್‌ಗಳಿಗೆ ಚಿತ್ರಗಳ ಡೌನ್‌ಲೋಡ್ ಅನ್ನು ವೇಗಗೊಳಿಸಲು ಅಥವಾ ಸಂಪೂರ್ಣವಾಗಿ ತೆಗೆದುಹಾಕಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ.

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ