{"id":38785,"date":"2019-10-31T22:25:55","date_gmt":"2019-10-31T19:25:55","guid":{"rendered":"https:\/\/prohoster.info\/blog\/rekomendatsii-po-zapusku-buildah-vnutri-kontejnera\/"},"modified":"2019-10-31T22:25:55","modified_gmt":"2019-10-31T19:25:55","slug":"rekomendatsii-po-zapusku-buildah-vnutri-kontejnera","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/rekomendatsii-po-zapusku-buildah-vnutri-kontejnera","title":{"rendered":"Recommendations for Running Buildah Inside a Container","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>What is the beauty of separating the container runtime environment into distinct tool components? Specifically, the fact that these tools can be combined to protect each other.<\/p>\n<p><img decoding=\"async\" alt=\"Recommendations for Running Buildah Inside a Container\" src=\"\/wp-content\/uploads\/2019\/10\/f8b21da6a59e461effbe3ee27c07012c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMany are drawn to the idea of building container OCI images within <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/\">Kubernetes<\/a><\/noindex> or a similar system. Suppose we have CI\/CD that constantly builds images, then something like <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/openshift\/\">Red Hat OpenShift<\/a><\/noindex>\/Kubernetes \u0431\u044b\u043b\u043e \u0431\u044b \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435. \u0414\u043e \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445 \u043f\u043e\u0440 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043b\u044e\u0434\u0435\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0430\u0432\u0430\u043b\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a Docker-\u0441\u043e\u043a\u0435\u0442\u0443 \u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 docker build. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.projectatomic.io\/blog\/2015\/08\/why-we-dont-let-non-root-users-run-docker-in-centos-fedora-or-rhel\/\">We showed several years ago<\/a><\/noindex>, that it is very insecure, in fact, it's even worse than giving passwordless root or sudo.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nThat\u2019s why people constantly try to run Buildah in a container. In short, we created <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/containers\/Demos\/tree\/master\/running\/BuildahInPodman\">an example<\/a><\/noindex> what we believe is the best way to run Buildah inside a container, and we\u2019ve uploaded the corresponding images to <noindex><a rel=\"nofollow\" href=\"https:\/\/quay.io\/buildah\">quay.io\/buildah<\/a><\/noindex>. Let's get started\u2026<\/p>\n<h3>Settings<\/h3>\n<p>\nThese images are built from Dockerfiles that can be found in the Buildah repository in the <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/containers\/buildah\/tree\/master\/contrib\/buildahimage\">buildahimage<\/a><\/noindex>.<br \/>\nHere we will discuss <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/containers\/buildah\/blob\/master\/buildahimage\/stable\/Dockerfile\">the stable version of the Dockerfile<\/a><\/noindex>.<\/p>\n<pre><code class=\"plaintext\"># stable\/Dockerfile\n#\n# Build a Buildah container image from the latest\n# stable version of Buildah on the Fedoras Updates System.\n# https:\/\/bodhi.fedoraproject.org\/updates\/?search=buildah\n# This image can be used to create a secured container\n# that runs safely with privileges within the container.\n#\nFROM fedora:latest\n\n# Don't include container-selinux and remove\n# directories used by dnf that are just taking\n# up space.\nRUN yum -y install buildah fuse-overlayfs --exclude container-selinux; rm -rf \/var\/cache \/var\/log\/dnf* \/var\/log\/yum.*\n\n# Adjust storage.conf to enable Fuse storage.\nRUN sed -i -e 's|^#mount_program|mount_program|g' -e '\/additionalimage.*\/a \"\/var\/lib\/shared\",' \/etc\/containers\/storage.conf\n<\/code><\/pre>\n<p>\nInstead of OverlayFS implemented at the host Linux kernel level, we use a program inside the container called <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/containers\/fuse-overlayfs\">fuse-overlay<\/a><\/noindex>, since currently, OverlayFS can only mount if given SYS_ADMIN privileges using Linux capabilities. And we want to run our Buildah containers without any root-level privileges. Fuse-overlay works quite quickly and performs better than the VFS storage driver. Note that when running a Buildah container that uses Fuse, you need to provide the device \/dev\/fuse.<\/p>\n<pre><code class=\"plaintext\">podman run --device \/dev\/fuse quay.io\/buildahctr ...\nRUN 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\n<\/code><\/pre>\n<p>\nNext, we create a directory for additional stores. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/containers\/storage\">Container\/storage<\/a><\/noindex> supports the concept of mounting additional read-only image stores. For example, one can set up an overlay storage area on one machine and then mount this storage on another machine via NFS and use images from it without downloading through pull. We need this storage to be able to mount some kind of image store from the host as a volume and use it inside the container.<\/p>\n<pre><code class=\"plaintext\"># Set up environment variables to note that this is\n# not starting with user namespace and default to\n# isolate the filesystem with chroot.\nENV _BUILDAH_STARTED_IN_USERNS=\"\" BUILDAH_ISOLATION=chroot\n<\/code><\/pre>\n<p>\nFinally, by using the environment variable BUILDAH_ISOLATION, we indicate that by default, the Buildah container should run with chroot isolation. Additional isolation is not required here since we are already operating within a container. To allow Buildah to create its own containers with namespace separation, SYS_ADMIN privilege is needed, which will require relaxing SELinux and SECCOMP rules for the container, conflicting with our goal of performing builds from a secure container.<\/p>\n<h3>Running Buildah Inside a Container<\/h3>\n<p>\nThe image scheme for the Buildah container discussed above allows for flexible variations in how such containers are launched.<\/p>\n<h4>Speed versus Security<\/h4>\n<p>\nComputer security is always a trade-off between process execution speed and the level of protection surrounding it. This statement holds true during container builds as well; below, we will examine options for this compromise.<\/p>\n<p>The container image discussed above will keep its storage in \/var\/lib\/containers. Therefore, we need to mount content into this folder, and the manner in which we do this will significantly impact the speed of building container images.<\/p>\n<p>Let\u2019s consider three options.<\/p>\n<p><b>Option 1.<\/b> If maximum security is required, a separate folder for containers\/image can be created for each container and mounted to the container via volume-mount. Additionally, the context directory can be placed inside the container in the \/build folder:<\/p>\n<pre><code class=\"plaintext\"># mkdir \/var\/lib\/containers1\n# podman run -v .\/build:\/build:z -v \/var\/lib\/containers1:\/var\/lib\/containers:Z quay.io\/buildah\/stable\nbuildah  -t image1 bud \/build\n# podman run -v \/var\/lib\/containers1:\/var\/lib\/containers:Z quay.io\/buildah\/stable buildah  push  image1 registry.company.com\/myuser\n# rm -rf \/var\/lib\/containers1\n<\/code><\/pre>\n<p>\n<i>Security.<\/i> A container running Buildah has maximum security: it is not granted any root privileges through capabilities, and all SECOMP and SELinux restrictions apply to it. Such a container can even be launched with User Namespace isolation by adding an option like --uidmap 0:100000:10000.<\/p>\n<p><i>Performance.<\/i> However, the performance here is minimal, since any images from container registries are copied to the host each time, and caching does not work at all. Upon completion, the Buildah container must send the image to the registry and destroy the content on the host. When the container image is built next time, it will need to be downloaded again from the registry, as there will be nothing left on the host by that time.<\/p>\n<p><b>Option 2.<\/b> If you need Docker-level performance, you can mount the host's container\/storage directly inside the container.<\/p>\n<pre><code class=\"plaintext\"># 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\n# podman run -v \/var\/lib\/containers:\/var\/lib\/containers --security-opt label:disabled  quay.io\/buildah\/stable buildah push image2 registry.company.com\/myuser\n<\/code><\/pre>\n<p>\n<i>Security.<\/i> This is the least secure way to build containers, as it allows the container to modify the storage on the host, potentially leading to malicious images being injected into Podman or CRI-O. Additionally, SELinux separation will need to be disabled for processes within the Buildah container to interact with the host storage. Note that this option is still better than the Docker socket because the container is restricted by the remaining security features and cannot simply run any container on the host.<\/p>\n<p><i>Performance.<\/i> Here it is maximized as caching is fully utilized. If Podman or CRI-O has already downloaded the required image to the host, the Buildah process inside the container will not need to download it again, and subsequent builds based on that image can also retrieve what they need from the cache.<\/p>\n<p><b>Option 3.<\/b> The essence of this method is to combine several images into one project with a shared folder for container images.<\/p>\n<pre><code class=\"plaintext\"># mkdir \/var\/lib\/project3\n# podman run --security-opt label_level=s0:C100, C200 -v .\/build:\/build:z \n-v \/var\/lib\/project3:\/var\/lib\/containers:Z quay.io\/buildah\/stable buildah  -t image3 bud \/build\n# podman run --security-opt label_level=s0:C100, C200 \n-v \/var\/lib\/project3:\/var\/lib\/containers quay.io\/buildah\/stable buildah push image3  registry.company.com\/myuser\n<\/code><\/pre>\n<p>\nIn this example, we do not delete the project folder (\/var\/lib\/project3) between runs, so all subsequent builds within the project benefit from caching.<\/p>\n<p><i>Security.<\/i> A middle ground between options 1 and 2. On one hand, containers do not have access to content on the host and therefore cannot inject anything malicious into the Podman\/CRI-O image storage. On the other hand, within its project, the container can interfere with the building of other containers.<\/p>\n<p><i>Performance.<\/i> Here it is worse than using a shared cache at the host level since previously downloaded images via Podman\/CRI-O cannot be used. However, once Buildah downloads an image, it can be used in any subsequent builds within the project.<\/p>\n<h4>Additional storage<\/h4>\n<p>\nThe <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/containers\/storage\">containers\/storage<\/a><\/noindex> There is such a cool thing as additional stores, which allows container engines to use external image storage in read-only overlay mode during the launch and assembly of containers. Essentially, you can add one or more 'read-only' storage options to the storage.conf file, so that when the container is started, the container engine will look for the required image in these stores. It will only download the image from the registry if it does not find it in any of these storages. The container engine will only be able to write to writable storage...<\/p>\n<p>If you scroll up and look at the Dockerfile we are using to build the image quay.io\/buildah\/stable, you will see such lines:<\/p>\n<pre><code class=\"plaintext\"># Adjust storage.conf to enable Fuse storage.\nRUN sed -i -e 's|^#mount_program|mount_program|g' -e '\/additionalimage.*\/a \"\/var\/lib\/shared\",' \/etc\/containers\/storage.conf\nRUN 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\n<\/code><\/pre>\n<p>\nIn the first line, we modify \/etc\/containers\/storage.conf within the container image, instructing the storage driver to use 'additionalimagestores' in the \/var\/lib\/shared folder. In the next line, we create a shared folder and add a couple of lock files to avoid conflicts from containers\/storage. Essentially, we are just creating an empty container image storage. <\/p>\n<p>If we mount containers\/storage one level higher than this folder, Buildah will be able to use images.<\/p>\n<p>Now let's return to the previously discussed Option 2, where the Buildah container can read and write to containers\/store on hosts, and consequently achieves maximum performance by caching images at the Podman\/CRI-O level but offers minimal security since it can write directly to the storages. Now, if we add additional stores here, we will get the best of both worlds.<\/p>\n<pre><code class=\"plaintext\"># mkdir \/var\/lib\/containers4\n# 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 \n buildah  -t image4 bud \/build\n# podman run -v \/var\/lib\/containers\/storage:\/var\/lib\/shared:ro  \n-v &gt;\/var\/lib\/containers4:\/var\/lib\/containers:Z quay.io\/buildah\/stable buildah push image4  registry.company.com\/myuser\n# rm -rf \/var\/lib\/continers4\n<\/code><\/pre>\n<p>\nNote that \/var\/lib\/containers\/storage on the host is mounted to \/var\/lib\/shared inside the container in read-only mode. Therefore, while working in the container, Buildah can use any images that have previously been downloaded via Podman\/CRI-O (hello, speed), but can only write to its own storage (hello, security). Also note that this is done without disabling SELinux separation for the container.<\/p>\n<h4>Important nuance<\/h4>\n<p>\nUnder no circumstances should any images be deleted from the underlying storage. Otherwise, the Buildah container may crash.<\/p>\n<h4>And this is by no means all the advantages<\/h4>\n<p>\nThe capabilities of additional storage are not limited to the scenario described above. For example, it is possible to place all container images in a shared network storage and provide access to all Buildah containers. Suppose we have hundreds of images that our CI\/CD system regularly uses to build container images. We concentrate all these images on a single host-storage and then, using preferred network storage methods (NFS, Gluster, Ceph, ISCSI, S3\u2026), we open shared access to this storage for all Buildah or Kubernetes nodes.<\/p>\n<p>Now, it's enough to mount this network storage in the Buildah container at \/var\/lib\/shared, and that's it\u2014Buildah containers will never need to download images via pull again. This way, we eliminate the pre-population phase and are ready to roll out containers immediately.<\/p>\n<p>Of course, this can be utilized within an existing Kubernetes or container infrastructure to run and execute containers anywhere without downloading images via pull. Moreover, when the container registry receives a push request to upload an updated image, it can automatically send that image to the shared network storage, where it instantly becomes available to all nodes.<\/p>\n<p>Container image sizes can sometimes reach several gigabytes. The additional storage functionality allows us to avoid cloning such images across nodes and makes container launches practically instantaneous.<\/p>\n<p>In addition, we are currently working on a new feature for overlay volume mounts, which will make container builds even faster.<\/p>\n<h3>Conclusion<\/h3>\n<p>\nRunning Buildah inside a container in a Kubernetes\/CRI-O, Podman, or even Docker environment is quite feasible, and it's simpler and much safer than using docker.socket. We have significantly increased flexibility in working with images, and now you can run them in various ways for optimal balance between security and performance.<\/p>\n<p>The additional storage functionality allows for speeding up or even completely eliminating the downloading of images to nodes.<br \/>\n<br \/>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/470928\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u0447\u0435\u043c \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0440\u0435\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435? \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0437\u0430\u0449\u0438\u0449\u0430\u043b\u0438 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430. \u041c\u043d\u043e\u0433\u0438\u0445 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0438\u0434\u0435\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u044b\u0445 OCI-\u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 Kubernetes \u0438\u043b\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c CI\/CD, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0437\u044b, \u0442\u043e\u0433\u0434\u0430 \u0447\u0442\u043e-\u0442\u043e \u0442\u0438\u043f\u0430 Red Hat OpenShift\/Kubernetes \u0431\u044b\u043b\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":29093,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-38785","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u0447\u0435\u043c \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0440\u0435\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435?\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/rekomendatsii-po-zapusku-buildah-vnutri-kontejnera\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0443 Buildah \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u0447\u0435\u043c \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0440\u0435\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435?\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/rekomendatsii-po-zapusku-buildah-vnutri-kontejnera\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:25:55+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:25:55+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Recommendations for Running Buildah Inside a Container | ProHoster","description":"What is the advantage of separating the container execution environment into individual tool components?","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/rekomendatsii-po-zapusku-buildah-vnutri-kontejnera","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0443 Buildah \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 | ProHoster","og:description":"\u0412 \u0447\u0435\u043c \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0440\u0435\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435?","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/rekomendatsii-po-zapusku-buildah-vnutri-kontejnera","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:25:55+00:00","article:modified_time":"2019-10-31T19:25:55+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"38785","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 23:24:21","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:03:14","updated":"2026-01-23 23:24:21","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/38785","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=38785"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/38785\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/29093"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=38785"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=38785"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=38785"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}