{"id":35060,"date":"2024-11-05T16:03:47","date_gmt":"2024-11-05T09:03:47","guid":{"rendered":"http:\/\/jupitek.maudemo.vip\/index.php\/2024\/11\/05\/use-buildah-to-build-oci-container-images\/"},"modified":"2024-11-05T16:03:47","modified_gmt":"2024-11-05T09:03:47","slug":"use-buildah-to-build-oci-container-images","status":"publish","type":"post","link":"https:\/\/jupitek.maudemo.vip\/index.php\/2024\/11\/05\/use-buildah-to-build-oci-container-images\/","title":{"rendered":"S\u1eed d\u1ee5ng Buildah \u0111\u1ec3 t\u1ea1o OCI Container Images"},"content":{"rendered":"<p>Buildah l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 ch\u1ee9a m\u00e3 ngu\u1ed3n m\u1edf c\u00f3 kh\u1ea3 n\u0103ng t\u1ea1o h\u00ecnh \u1ea3nh t\u1eeb \u0111\u1ea7u, Dockerfiles ho\u1eb7c Containerfiles. N\u00f3 c\u0169ng tu\u00e2n theo c\u00e1c th\u00f4ng s\u1ed1 k\u1ef9 thu\u1eadt c\u1ee7a S\u00e1ng ki\u1ebfn \u200b\u200bch\u1ee9a m\u1edf (OCI), gi\u00fap h\u00ecnh \u1ea3nh Buildah v\u1eeba linh ho\u1ea1t v\u1eeba m\u1edf.<\/p>\n<p>T\u00ecm hi\u1ec3u c\u00e1ch c\u00e0i \u0111\u1eb7t v\u00e0 b\u1eaft \u0111\u1ea7u s\u1eed d\u1ee5ng Buildah trong h\u01b0\u1edbng d\u1eabn n\u00e0y. D\u01b0\u1edbi \u0111\u00e2y l\u00e0 c\u00e1c b\u01b0\u1edbc \u0111\u1ec3 t\u1ea1o container v\u00e0 hi\u1ec3n th\u1ecb c\u00e1c container \u0111\u00f3 th\u00e0nh h\u00ecnh \u1ea3nh.<\/p>\n<h2 id=\"before-you-begin\">Tr\u01b0\u1edbc khi b\u1ea1n b\u1eaft \u0111\u1ea7u<a href=\"https:\/\/www.linode.com\/docs\/guides\/using-buildah-oci-images\/#before-you-begin\"><\/a><\/h2>\n<ol>\n<li>L\u00e0m quen v\u1edbi h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/platform\/get-started\/\">B\u1eaft \u0111\u1ea7u v\u1edbi Linode<\/a>&nbsp;c\u1ee7a ch\u00fang t\u00f4i v\u00e0 ho\u00e0n t\u1ea5t c\u00e1c b\u01b0\u1edbc \u0111\u1ec3 thi\u1ebft l\u1eadp t\u00ean m\u00e1y ch\u1ee7 v\u00e0 m\u00fai gi\u1edd cho Linode c\u1ee7a b\u1ea1n.<\/li>\n<li>H\u01b0\u1edbng d\u1eabn n\u00e0y s\u1eed d\u1ee5ng&nbsp;<code>sudo<\/code>b\u1ea5t c\u1ee9 n\u01a1i n\u00e0o c\u00f3 th\u1ec3. Ho\u00e0n th\u00e0nh c\u00e1c ph\u1ea7n trong h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/compute\/compute-instances\/guides\/set-up-and-secure\/\">C\u00e1ch b\u1ea3o m\u1eadt m\u00e1y ch\u1ee7 c\u1ee7a<\/a>&nbsp;ch\u00fang t\u00f4i \u0111\u1ec3 t\u1ea1o t\u00e0i kho\u1ea3n ng\u01b0\u1eddi d\u00f9ng chu\u1ea9n, t\u0103ng c\u01b0\u1eddng quy\u1ec1n truy c\u1eadp SSH v\u00e0 x\u00f3a c\u00e1c d\u1ecbch v\u1ee5 m\u1ea1ng kh\u00f4ng c\u1ea7n thi\u1ebft.<\/li>\n<li>C\u1eadp nh\u1eadt h\u1ec7 th\u1ed1ng c\u1ee7a b\u1ea1n.<\/li>\n<\/ol>\n<p><strong>AlmaLinux<\/strong>&nbsp;,&nbsp;<strong>CentOS Stream<\/strong>&nbsp;,&nbsp;<strong>Fedora<\/strong>&nbsp;ho\u1eb7c&nbsp;<strong>Rocky Linux<\/strong>&nbsp;:<\/p>\n<pre class=\"wp-block-code\"><code>sudo dnf upgrade\n<\/code><\/pre>\n<p><strong>Ubuntu<\/strong>&nbsp;:<\/p>\n<pre class=\"wp-block-code\"><code>sudo apt update &amp;&amp; sudo apt upgrade\n<\/code><\/pre>\n<p>Ghi ch\u00fa: H\u01b0\u1edbng d\u1eabn n\u00e0y \u0111\u01b0\u1ee3c vi\u1ebft cho ng\u01b0\u1eddi d\u00f9ng kh\u00f4ng ph\u1ea3i root. C\u00e1c l\u1ec7nh y\u00eau c\u1ea7u quy\u1ec1n n\u00e2ng cao \u0111\u01b0\u1ee3c th\u00eam ti\u1ec1n t\u1ed1&nbsp;<code>sudo<\/code>. N\u1ebfu b\u1ea1n kh\u00f4ng quen v\u1edbi&nbsp;<code>sudo<\/code>l\u1ec7nh n\u00e0y, h\u00e3y xem h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/linux-users-and-groups\/\">Ng\u01b0\u1eddi d\u00f9ng v\u00e0 Nh\u00f3m<\/a>&nbsp;.<\/p>\n<h2 id=\"what-is-buildah\">Buildah l\u00e0 g\u00ec?<a href=\"https:\/\/www.linode.com\/docs\/guides\/using-buildah-oci-images\/#what-is-buildah\"><\/a><\/h2>\n<p><a href=\"https:\/\/buildah.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">Buildah<\/a>&nbsp;l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 m\u00e3 ngu\u1ed3n m\u1edf \u0111\u1ec3 x\u00e2y d\u1ef1ng h\u00ecnh \u1ea3nh container tu\u00e2n th\u1ee7 OCI.<\/p>\n<p>OCI t\u00ecm c\u00e1ch t\u1ea1o ra m\u1ed9t ti\u00eau chu\u1ea9n m\u1edf cho container h\u00f3a. \u0110\u1ec3 \u0111\u1ea1t \u0111\u01b0\u1ee3c m\u1ee5c \u0111\u00edch \u0111\u00f3, OCI x\u00e1c \u0111\u1ecbnh c\u00e1c th\u00f4ng s\u1ed1 k\u1ef9 thu\u1eadt cho th\u1eddi gian ch\u1ea1y container v\u00e0 h\u00ecnh \u1ea3nh. M\u1ed9t m\u1ee5c ti\u00eau kh\u00e1c c\u1ee7a OCI l\u00e0 gi\u00fap b\u1ea3o m\u1eadt v\u00e0 h\u1ee3p l\u00fd h\u00f3a \u1ea3o h\u00f3a h\u1ec7 \u0111i\u1ec1u h\u00e0nh.<\/p>\n<p>Buildah cung c\u1ea5p c\u00e1c c\u00f4ng c\u1ee5 m\u1ea1nh m\u1ebd \u0111\u1ec3 t\u1ea1o v\u00e0 duy tr\u00ec h\u00ecnh \u1ea3nh tu\u00e2n th\u1ee7 OCI. B\u1ea1n c\u00f3 th\u1ec3 quen thu\u1ed9c v\u1edbi Dockerfiles, m\u1ed9t trong nh\u1eefng \u0111\u1ecbnh d\u1ea1ng ph\u1ed5 bi\u1ebfn nh\u1ea5t cho h\u00ecnh \u1ea3nh container. Buildah h\u1ed7 tr\u1ee3 \u0111\u1ea7y \u0111\u1ee7 c\u00e1c \u0111\u1ecbnh d\u1ea1ng n\u00e0y v\u00e0 c\u00f3 th\u1ec3 t\u1ea1o h\u00ecnh \u1ea3nh tr\u1ef1c ti\u1ebfp t\u1eeb ch\u00fang.<\/p>\n<p>Nh\u01b0ng Buildah c\u0169ng c\u00f3 th\u1ec3 t\u1ea1o h\u00ecnh \u1ea3nh container t\u1eeb \u0111\u1ea7u. Buildah cho ph\u00e9p b\u1ea1n s\u1eed d\u1ee5ng d\u00f2ng l\u1ec7nh \u0111\u1ec3 x\u00e2y d\u1ef1ng container t\u1eeb m\u1ed9t b\u1ea3ng tr\u1eafng ho\u00e0n ch\u1ec9nh, ch\u1ec9 cung c\u1ea5p cho n\u00f3 n\u1ed9i dung b\u1ea1n c\u1ea7n. Sau \u0111\u00f3, Buildah c\u00f3 th\u1ec3 k\u1ebft xu\u1ea5t v\u00e0 xu\u1ea5t h\u00ecnh \u1ea3nh container OCI t\u1eeb t\u00e1c ph\u1ea9m c\u1ee7a b\u1ea1n.<\/p>\n<h3 id=\"buildah-vs-docker\">Buildah so v\u1edbi Docker<a href=\"https:\/\/www.linode.com\/docs\/guides\/using-buildah-oci-images\/#buildah-vs-docker\"><\/a><\/h3>\n<p>Nh\u00ecn chung, Buildah c\u00f3 ch\u1ee9c n\u0103ng t\u01b0\u01a1ng t\u1ef1 nh\u01b0 Docker. V\u1eady \u0111i\u1ec1u g\u00ec l\u00e0m n\u00f3 kh\u00e1c bi\u1ec7t? T\u1ea1i sao n\u00ean s\u1eed d\u1ee5ng Buildah thay v\u00ec Docker?<\/p>\n<p>M\u1ed9t trong nh\u1eefng l\u1ee3i th\u1ebf ch\u00ednh c\u1ee7a Buildah l\u00e0 n\u00f3 tr\u00e1nh \u0111\u01b0\u1ee3c c\u00e1c r\u1ee7i ro b\u1ea3o m\u1eadt c\u1ee7a Docker daemon. Docker daemon ch\u1ea1y tr\u00ean socket c\u00f3 quy\u1ec1n truy c\u1eadp c\u1ea5p root v\u00e0 \u0111i\u1ec1u n\u00e0y c\u00f3 kh\u1ea3 n\u0103ng g\u00e2y ra c\u00e1c r\u1ee7i ro b\u1ea3o m\u1eadt. Buildah tr\u00e1nh \u0111\u01b0\u1ee3c r\u1ee7i ro n\u00e0y b\u1eb1ng c\u00e1ch ch\u1ea1y m\u00e0 kh\u00f4ng c\u1ea7n daemon, cho ph\u00e9p c\u00e1c container th\u1ef1c s\u1ef1 kh\u00f4ng c\u00f3 root.<\/p>\n<p>V\u1edbi Buildah, ng\u01b0\u1eddi d\u00f9ng c\u0169ng c\u00f3 kh\u1ea3 n\u0103ng t\u1ea1o h\u00ecnh \u1ea3nh container t\u1eeb \u0111\u1ea7u. Buildah c\u00f3 th\u1ec3 g\u1eafn m\u1ed9t container r\u1ed7ng v\u00e0 cho ph\u00e9p ng\u01b0\u1eddi d\u00f9ng ch\u1ec9 th\u00eam nh\u1eefng g\u00ec h\u1ecd c\u1ea7n. T\u00ednh n\u0103ng n\u00e0y c\u00f3 th\u1ec3 c\u1ef1c k\u1ef3 h\u1eefu \u00edch khi b\u1ea1n c\u1ea7n m\u1ed9t h\u00ecnh \u1ea3nh nh\u1eb9.<\/p>\n<p>Buildah c\u0169ng cung c\u1ea5p cho ng\u01b0\u1eddi d\u00f9ng kh\u1ea3 n\u0103ng ki\u1ec3m so\u00e1t ch\u00ednh x\u00e1c h\u00ecnh \u1ea3nh v\u00e0 \u0111\u1eb7c bi\u1ec7t l\u00e0 c\u00e1c l\u1edbp h\u00ecnh \u1ea3nh. \u0110\u1ed1i v\u1edbi nh\u1eefng ng\u01b0\u1eddi mu\u1ed1n c\u00f3 nhi\u1ec1u kh\u1ea3 n\u0103ng h\u01a1n trong c\u00e1c c\u00f4ng c\u1ee5 ch\u1ee9a c\u1ee7a h\u1ecd, Buildah c\u00f3 xu h\u01b0\u1edbng cung c\u1ea5p nh\u1eefng g\u00ec h\u1ecd c\u1ea7n.<\/p>\n<p>Tuy nhi\u00ean, Buildah kh\u00f4ng h\u1eefu \u00edch khi ch\u1ea1y v\u00e0 tri\u1ec3n khai container image. N\u00f3 c\u00f3 th\u1ec3 ch\u1ea1y ch\u00fang, nh\u01b0ng thi\u1ebfu m\u1ed9t s\u1ed1 t\u00ednh n\u0103ng c\u00f3 trong c\u00e1c c\u00f4ng c\u1ee5 kh\u00e1c. Thay v\u00e0o \u0111\u00f3, Buildah t\u1eadp trung ph\u1ea7n l\u1edbn v\u00e0o vi\u1ec7c t\u1ea1o container v\u00e0 x\u00e2y d\u1ef1ng container image.<\/p>\n<p>V\u00ec l\u00fd do \u0111\u00f3, ng\u01b0\u1eddi d\u00f9ng th\u01b0\u1eddng x\u00e2y d\u1ef1ng h\u00ecnh \u1ea3nh OCI c\u1ee7a h\u1ecd trong Buildah v\u00e0 ch\u1ea1y ch\u00fang b\u1eb1ng Podman, m\u1ed9t c\u00f4ng c\u1ee5 \u0111\u1ec3 ch\u1ea1y v\u00e0 qu\u1ea3n l\u00fd container. B\u1ea1n c\u00f3 th\u1ec3 t\u00ecm hi\u1ec3u th\u00eam v\u1ec1 Podman trong h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/podman-vs-docker\/\">Podman so v\u1edbi Docker: So s\u00e1nh hai c\u00f4ng c\u1ee5 ch\u1ee9a container<\/a>&nbsp;c\u1ee7a ch\u00fang t\u00f4i .<\/p>\n<h2 id=\"how-to-install-buildah\">C\u00e1ch c\u00e0i \u0111\u1eb7t Buildah<a href=\"https:\/\/www.linode.com\/docs\/guides\/using-buildah-oci-images\/#how-to-install-buildah\"><\/a><\/h2>\n<p>1.C\u00e0i \u0111\u1eb7t Buildah b\u1eb1ng tr\u00ecnh qu\u1ea3n l\u00fd g\u00f3i c\u1ee7a b\u1ea3n ph\u00e2n ph\u1ed1i c\u1ee7a b\u1ea1n.<\/p>\n<p><strong>AlmaLinux<\/strong>&nbsp;,&nbsp;<strong>CentOS Stream<\/strong>&nbsp;(phi\u00ean b\u1ea3n 8 tr\u1edf l\u00ean),&nbsp;<strong>Fedora<\/strong>&nbsp;ho\u1eb7c&nbsp;<strong>Rocky Linux<\/strong>&nbsp;:<\/p>\n<pre class=\"wp-block-code\"><code>sudo dnf install buildah<\/code><\/pre>\n<p><strong>Ubuntu<\/strong>&nbsp;(20.10 tr\u1edf l\u00ean):<\/p>\n<pre class=\"wp-block-code\"><code>sudo apt install buildah\n<\/code><\/pre>\n<p>2.X\u00e1c minh c\u00e0i \u0111\u1eb7t c\u1ee7a b\u1ea1n b\u1eb1ng c\u00e1ch ki\u1ec3m tra phi\u00ean b\u1ea3n Buildah \u0111\u00e3 c\u00e0i \u0111\u1eb7t b\u1eb1ng l\u1ec7nh b\u00ean d\u01b0\u1edbi:<\/p>\n<pre class=\"wp-block-code\"><code>buildah -v<\/code><\/pre>\n<p>\u0110\u1ea7u ra c\u1ee7a b\u1ea1n c\u00f3 th\u1ec3 kh\u00e1c v\u1edbi nh\u1eefng g\u00ec hi\u1ec3n th\u1ecb \u1edf \u0111\u00e2y, nh\u01b0ng b\u1ea1n ch\u1ec9 c\u1ea7n ki\u1ec3m tra xem Buildah \u0111\u00e3 \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t th\u00e0nh c\u00f4ng ch\u01b0a:<\/p>\n<pre class=\"wp-block-code\"><code>buildah version 1.26.1 (image-spec 1.0.2-dev, runtime-spec 1.0.2-dev)<\/code><\/pre>\n<h3 id=\"configuring-buildah-for-rootless-usage\">C\u1ea5u h\u00ecnh Buildah \u0111\u1ec3 s\u1eed d\u1ee5ng kh\u00f4ng c\u1ea7n root<a href=\"https:\/\/www.linode.com\/docs\/guides\/using-buildah-oci-images\/#configuring-buildah-for-rootless-usage\"><\/a><\/h3>\n<p>Theo m\u1eb7c \u0111\u1ecbnh, l\u1ec7nh Buildah \u0111\u01b0\u1ee3c th\u1ef1c thi v\u1edbi quy\u1ec1n root, \u0111\u01b0\u1ee3c m\u1edf \u0111\u1ea7u b\u1eb1ng&nbsp;<code>sudo<\/code>l\u1ec7nh. Tuy nhi\u00ean, m\u1ed9t trong nh\u1eefng t\u00ednh n\u0103ng h\u1ea5p d\u1eabn nh\u1ea5t c\u1ee7a Buildah l\u00e0 kh\u1ea3 n\u0103ng ch\u1ea1y container \u1edf ch\u1ebf \u0111\u1ed9 kh\u00f4ng c\u1ea7n root. \u0110i\u1ec1u n\u00e0y cho ph\u00e9p ng\u01b0\u1eddi d\u00f9ng h\u1ea1n ch\u1ebf l\u00e0m vi\u1ec7c an to\u00e0n v\u1edbi Buildah.<\/p>\n<p>Trong khi Docker c\u0169ng cho ph\u00e9p b\u1ea1n ch\u1ea1y l\u1ec7nh v\u1edbi t\u01b0 c\u00e1ch l\u00e0 ng\u01b0\u1eddi d\u00f9ng b\u1ecb gi\u1edbi h\u1ea1n, th\u00ec daemon Docker v\u1eabn ch\u1ea1y v\u1edbi t\u01b0 c\u00e1ch l\u00e0 root. \u0110\u00e2y l\u00e0 m\u1ed9t v\u1ea5n \u0111\u1ec1 b\u1ea3o m\u1eadt ti\u1ec1m \u1ea9n v\u1edbi Docker, m\u1ed9t v\u1ea5n \u0111\u1ec1 c\u00f3 th\u1ec3 cho ph\u00e9p ng\u01b0\u1eddi d\u00f9ng b\u1ecb gi\u1edbi h\u1ea1n th\u1ef1c thi c\u00e1c l\u1ec7nh \u0111\u1eb7c quy\u1ec1n th\u00f4ng qua daemon.<\/p>\n<p>Ch\u1ebf \u0111\u1ed9 kh\u00f4ng c\u1ea7n root c\u1ee7a Buildah gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 n\u00e0y v\u00ec n\u00f3 ch\u1ea1y container ho\u00e0n to\u00e0n trong m\u00f4i tr\u01b0\u1eddng kh\u00f4ng c\u1ea7n root, kh\u00f4ng c\u1ea7n root daemon. T\u00ecm c\u00e1c b\u01b0\u1edbc c\u1ea7n thi\u1ebft \u0111\u1ec3 thi\u1ebft l\u1eadp phi\u00ean b\u1ea3n Buildah c\u1ee7a b\u1ea1n \u0111\u1ec3 s\u1eed d\u1ee5ng kh\u00f4ng c\u1ea7n root b\u00ean d\u01b0\u1edbi.<\/p>\n<p>1.C\u00e0i \u0111\u1eb7t&nbsp;<code>slirp4netns<\/code>c\u00e1c&nbsp;<code>fuse-overlayfs<\/code>c\u00f4ng c\u1ee5 \u0111\u1ec3 h\u1ed7 tr\u1ee3 ho\u1ea1t \u0111\u1ed9ng Buildah kh\u00f4ng c\u1ea7n root c\u1ee7a b\u1ea1n.<\/p>\n<p><strong>AlmaLinux<\/strong>&nbsp;,&nbsp;<strong>CentOS Stream<\/strong>&nbsp;,&nbsp;<strong>Fedora<\/strong>&nbsp;ho\u1eb7c&nbsp;<strong>Rocky Linux<\/strong>&nbsp;:<\/p>\n<pre class=\"wp-block-code\"><code>sudo dnf install slirp4netns fuse-overlayfs\n<\/code><\/pre>\n<p><strong>Ubuntu<\/strong>&nbsp;:<\/p>\n<pre class=\"wp-block-code\"><code>sudo apt install slirp4netns fuse-overlayfs\n<\/code><\/pre>\n<p>2.Th\u00eam&nbsp;<code>subuids<\/code>v\u00e0&nbsp;<code>subgids<\/code>ph\u1ea1m vi cho ng\u01b0\u1eddi d\u00f9ng gi\u1edbi h\u1ea1n c\u1ee7a b\u1ea1n. V\u00ed d\u1ee5 n\u00e0y th\u1ef1c hi\u1ec7n nh\u01b0 v\u1eady \u0111\u1ed1i v\u1edbi ng\u01b0\u1eddi d\u00f9ng&nbsp;<code>example_user<\/code>. N\u00f3 cung c\u1ea5p cho ng\u01b0\u1eddi d\u00f9ng \u0111\u00f3 m\u1ed9t UID ph\u1ee5 v\u00e0 GID ph\u1ee5 l\u00e0&nbsp;<code>100000<\/code>, m\u1ed7i UID ph\u1ee5 c\u00f3 m\u1ed9t ph\u1ea1m vi&nbsp;<code>65535<\/code>ID:<\/p>\n<pre class=\"wp-block-code\"><code>sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 example_user\n<\/code><\/pre>\n<h2 id=\"how-to-use-buildah\">C\u00e1ch s\u1eed d\u1ee5ng Buildah<a href=\"https:\/\/www.linode.com\/docs\/guides\/using-buildah-oci-images\/#how-to-use-buildah\"><\/a><\/h2>\n<p>Buildah ch\u1ee7 y\u1ebfu \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 t\u1ea1o h\u00ecnh \u1ea3nh container. Gi\u1ed1ng nh\u01b0 Docker, Buildah c\u00f3 th\u1ec3 x\u00e2y d\u1ef1ng container t\u1eeb Dockerfiles, nh\u01b0ng Buildah n\u1ed5i b\u1eadt h\u01a1n v\u00ec cho ph\u00e9p b\u1ea1n t\u1ea1o h\u00ecnh \u1ea3nh t\u1eeb \u0111\u1ea7u.<\/p>\n<p>Hai ph\u1ea7n ti\u1ebfp theo s\u1ebd h\u01b0\u1edbng d\u1eabn b\u1ea1n c\u00e1ch x\u00e2y d\u1ef1ng h\u00ecnh \u1ea3nh container b\u1eb1ng t\u1eebng ph\u01b0\u01a1ng ph\u00e1p n\u00e0y.<\/p>\n<h3 id=\"creating-an-image-from-a-dockerfile\">T\u1ea1o m\u1ed9t h\u00ecnh \u1ea3nh t\u1eeb Dockerfile<a href=\"https:\/\/www.linode.com\/docs\/guides\/using-buildah-oci-images\/#creating-an-image-from-a-dockerfile\"><\/a><\/h3>\n<p>Dockerfiles cung c\u1ea5p m\u1ed9t c\u00e1ch ti\u1ebfp c\u1eadn d\u1ec5 d\u00e0ng \u0111\u1ec3 t\u1ea1o container b\u1eb1ng Buildah, \u0111\u1eb7c bi\u1ec7t \u0111\u1ed1i v\u1edbi nh\u1eefng ng\u01b0\u1eddi d\u00f9ng \u0111\u00e3 quen thu\u1ed9c v\u1edbi Docker ho\u1eb7c Dockerfiles.<\/p>\n<p>Buildah c\u00f3 \u0111\u1ea7y \u0111\u1ee7 kh\u1ea3 n\u0103ng di\u1ec5n gi\u1ea3i t\u1eadp l\u1ec7nh Dockerfile, gi\u00fap b\u1ea1n d\u1ec5 d\u00e0ng x\u00e2y d\u1ef1ng h\u00ecnh \u1ea3nh container Docker b\u1eb1ng Buildah.<\/p>\n<p>H\u01b0\u1edbng d\u1eabn n\u00e0y s\u1eed d\u1ee5ng m\u1ed9t v\u00ed d\u1ee5 Dockerfile \u0111\u01b0\u1ee3c cung c\u1ea5p trong m\u1ed9t trong nh\u1eefng h\u01b0\u1edbng d\u1eabn ch\u00ednh th\u1ee9c c\u1ee7a Buildah. Dockerfile n\u00e0y t\u1ea1o ra m\u1ed9t container v\u1edbi phi\u00ean b\u1ea3n m\u1edbi nh\u1ea5t c\u1ee7a Fedora v\u00e0 m\u00e1y ch\u1ee7 HTTP Apache (&nbsp;<code>httpd<\/code>). N\u00f3 c\u0169ng &#8220;ph\u01a1i b\u00e0y&#8221; m\u00e1y ch\u1ee7 HTTP qua c\u1ed5ng&nbsp;<code>80<\/code>.<\/p>\n<p>1.T\u1ea1o m\u1ed9t t\u1ec7p m\u1edbi c\u00f3 t\u00ean&nbsp;<code>Dockerfile<\/code>trong th\u01b0 m\u1ee5c g\u1ed1c c\u1ee7a ng\u01b0\u1eddi d\u00f9ng:<\/p>\n<pre class=\"wp-block-code\"><code>nano Dockerfile<\/code><\/pre>\n<p>2.\u0110i\u1ec1n c\u00e1c n\u1ed9i dung sau v\u00e0o:<\/p>\n<pre class=\"wp-block-code\"><code># Base on the most recently released Fedora\nFROM fedora:latest\nMAINTAINER ipbabble email buildahboy@redhat.com # not a real email\n\n# Install updates and httpd\nRUN echo \"Updating all fedora packages\"; dnf -y update; dnf -y clean all\nRUN echo \"Installing httpd\"; dnf -y install httpd &amp;&amp; dnf -y clean all\n\n# Expose the default httpd port 80\nEXPOSE 80\n\n# Run the httpd\nCMD &#91;\"\/usr\/sbin\/httpd\", \"-DFOREGROUND\"]<\/code><\/pre>\n<p>3.Nh\u1ea5n&nbsp;<strong>CTRL+X<\/strong>&nbsp;\u0111\u1ec3 tho\u00e1t,&nbsp;<strong>Y<\/strong>&nbsp;\u0111\u1ec3 l\u01b0u v\u00e0&nbsp;<strong>Enter<\/strong>&nbsp;\u0111\u1ec3 tho\u00e1t&nbsp;<code>nano<\/code>.<\/p>\n<p>Gi\u1ea3 s\u1eed b\u1ea1n v\u1eabn \u0111ang \u1edf trong th\u01b0 m\u1ee5c ch\u1ee9a Dockerfile n\u00e0y (th\u01b0 m\u1ee5c g\u1ed1c c\u1ee7a ng\u01b0\u1eddi d\u00f9ng), b\u1ea1n c\u00f3 th\u1ec3 ngay l\u1eadp t\u1ee9c x\u00e2y d\u1ef1ng h\u00ecnh \u1ea3nh c\u1ee7a container.<\/p>\n<p>4.V\u00ed d\u1ee5 n\u00e0y \u0111\u1eb7t t\u00ean cho h\u00ecnh \u1ea3nh m\u1edbi&nbsp;<code>fedora-http-server<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>buildah build -t fedora-http-server\n<\/code><\/pre>\n<p>K\u1ebft qu\u1ea3 \u0111\u1ea7u ra s\u1ebd tr\u00f4ng nh\u01b0 sau:<\/p>\n<pre class=\"wp-block-code\"><code>STEP 1\/6: FROM fedora:latest\nResolved \"fedora\" as an alias (\/etc\/containers\/registries.conf.d\/000-shortnames.conf)\nTrying to pull registry.fedoraproject.org\/fedora:latest...\nGetting image source signatures\nCopying blob 75f075168a24 done\nCopying config 3a66698e60 done\nWriting manifest to image destination\nStoring signatures\nSTEP 2\/6: MAINTAINER ipbabble email buildahboy@redhat.com # not a real email\nSTEP 3\/6: RUN echo \"Updating all fedora packages\"; dnf -y update; dnf -y clean all\n&#91;...]<\/code><\/pre>\n<p>B\u00e2y gi\u1edd b\u1ea1n c\u00f3 th\u1ec3 ch\u1ea1y h\u00ecnh \u1ea3nh b\u1eb1ng Podman, m\u1ed9t c\u00f4ng c\u1ee5 l\u00e0m vi\u1ec7c v\u1edbi container th\u01b0\u1eddng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 b\u1ed5 sung cho Buildah.<\/p>\n<p>5.\u0110\u1ea7u ti\u00ean, c\u00e0i \u0111\u1eb7t Podman:<\/p>\n<p><strong>AlmaLinux<\/strong>&nbsp;,&nbsp;<strong>CentOS Stream<\/strong>&nbsp;,&nbsp;<strong>Fedora<\/strong>&nbsp;ho\u1eb7c&nbsp;<strong>Rocky Linux<\/strong>&nbsp;:<\/p>\n<pre class=\"wp-block-code\"><code>sudo dnf install podman\n<\/code><\/pre>\n<p><strong>Ubuntu<\/strong>&nbsp;:<\/p>\n<pre class=\"wp-block-code\"><code>sudo apt install podman\n<\/code><\/pre>\n<p>6.Trong l\u1ec7nh b\u00ean d\u01b0\u1edbi,&nbsp;<code>-p<\/code>t\u00f9y ch\u1ecdn &#8220;xu\u1ea5t b\u1ea3n&#8221; m\u1ed9t c\u1ed5ng nh\u1ea5t \u0111\u1ecbnh, \u1edf \u0111\u00e2y \u0111\u1ecbnh tuy\u1ebfn c\u1ed5ng c\u1ee7a container&nbsp;<code>80<\/code>\u0111\u1ebfn c\u1ed5ng c\u1ee7a m\u00e1y c\u1ee5c b\u1ed9&nbsp;<code>8080<\/code>.&nbsp;<code>--rm<\/code>T\u00f9y ch\u1ecdn n\u00e0y t\u1ef1 \u0111\u1ed9ng x\u00f3a container khi n\u00f3 ch\u1ea1y xong, m\u1ed9t gi\u1ea3i ph\u00e1p ph\u00f9 h\u1ee3p cho m\u1ed9t b\u00e0i ki\u1ec3m tra nhanh nh\u01b0 th\u1ebf n\u00e0y.<\/p>\n<pre class=\"wp-block-code\"><code>podman run -p 8080:80 --rm fedora-http-server\n<\/code><\/pre>\n<p>7.B\u00e2y gi\u1edd b\u1ea1n c\u00f3 th\u1ec3 m\u1edf m\u1ed9t phi\u00ean Terminal kh\u00e1c tr\u00ean m\u00e1y \u0111ang ch\u1ea1y h\u00ecnh \u1ea3nh v\u00e0 s\u1eed d\u1ee5ng l\u1ec7nh cURL \u0111\u1ec3 x\u00e1c minh trang m\u1eb7c \u0111\u1ecbnh \u0111ang \u0111\u01b0\u1ee3c ph\u1ee5c v\u1ee5 tr\u00ean c\u1ed5ng&nbsp;<code>8080<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>curl localhost:8080\n<\/code><\/pre>\n<p>B\u1ea1n s\u1ebd th\u1ea5y HTML th\u00f4 c\u1ee7a trang ki\u1ec3m tra M\u00e1y ch\u1ee7 HTTP Fedora \u0111\u01b0\u1ee3c hi\u1ec3n th\u1ecb nh\u01b0 sau:<\/p>\n<pre class=\"wp-block-code\"><code>&lt;!doctype html&gt;\n&lt;html&gt;\n  &lt;head&gt;\n    &lt;meta charset='utf-8'&gt;\n    &lt;meta name='viewport' content='width=device-width, initial-scale=1'&gt;\n    &lt;title&gt;Test Page for the HTTP Server on Fedora&lt;\/title&gt;\n    &lt;style type=\"text\/css\"&gt;\n      \/*&lt;!&#91;CDATA&#91;*\/\n\n      html {\n        height: 100%;\n        width: 100%;\n      }\n        body {\n&#91;...]<\/code><\/pre>\n<p>8.Khi ho\u00e0n t\u1ea5t, h\u00e3y d\u1eebng container, nh\u01b0ng tr\u01b0\u1edbc ti\u00ean, h\u00e3y x\u00e1c \u0111\u1ecbnh ID ho\u1eb7c t\u00ean container c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>podman ps<\/code><\/pre>\n<p>B\u1ea1n s\u1ebd th\u1ea5y k\u1ebft qu\u1ea3 nh\u01b0 th\u1ebf n\u00e0y:<\/p>\n<pre class=\"wp-block-code\"><code>CONTAINER ID  IMAGE                                COMMAND               CREATED        STATUS            PORTS                 NAMES\ndaadb647b880  localhost\/fedora-http-server:latest  \/usr\/sbin\/httpd -...  8 seconds ago  Up 8 seconds ago  0.0.0.0:8080-&gt;80\/tcp  suspicious_goodall<\/code><\/pre>\n<p>9.B\u00e2y gi\u1edd h\u00e3y d\u1eebng container. Thay th\u1ebf&nbsp;<code>container-name-or-id<\/code>b\u1eb1ng t\u00ean container ho\u1eb7c ID c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>podman stop container-name-or-id<\/code><\/pre>\n<p>V\u00ec ch\u00fang ta thi\u1ebft l\u1eadp v\u00f9ng ch\u1ee9a m\u1eabu n\u00e0y t\u1ef1 \u0111\u1ed9ng x\u00f3a khi s\u1eed d\u1ee5ng xong&nbsp;<code>--rm<\/code>c\u1edd, n\u00ean vi\u1ec7c d\u1eebng n\u00f3 c\u0169ng x\u00f3a lu\u00f4n c\u1edd \u0111\u00f3.<\/p>\n<p>10.B\u00e2y gi\u1edd b\u1ea1n c\u00f3 th\u1ec3 \u0111\u0103ng xu\u1ea5t, \u0111\u00f3ng phi\u00ean Terminal th\u1ee9 hai v\u00e0 quay l\u1ea1i Terminal ban \u0111\u1ea7u:<\/p>\n<pre class=\"wp-block-code\"><code>exit<\/code><\/pre>\n<p>T\u00ecm hi\u1ec3u th\u00eam v\u1ec1 Podman trong h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/using-podman\/\">C\u00e1ch c\u00e0i \u0111\u1eb7t Podman \u0111\u1ec3 ch\u1ea1y Container<\/a>&nbsp;c\u1ee7a ch\u00fang t\u00f4i .<\/p>\n<p>B\u1ea1n c\u0169ng c\u00f3 th\u1ec3 t\u00ecm hi\u1ec3u th\u00eam v\u1ec1 c\u00e1ch t\u1ea1o Dockerfile trong h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-use-dockerfiles\/\">C\u00e1ch s\u1eed d\u1ee5ng Dockerfile \u0111\u1ec3 x\u00e2y d\u1ef1ng Docker Image<\/a>&nbsp;c\u1ee7a ch\u00fang t\u00f4i . H\u01b0\u1edbng d\u1eabn n\u00e0y c\u0169ng bao g\u1ed3m c\u00e1c li\u00ean k\u1ebft \u0111\u1ebfn c\u00e1c h\u01b0\u1edbng d\u1eabn kh\u00e1c c\u00f3 n\u1ed9i dung chi ti\u1ebft h\u01a1n v\u1ec1 Dockerfile.<\/p>\n<h3 id=\"creating-an-image-from-scratch\">T\u1ea1o m\u1ed9t h\u00ecnh \u1ea3nh t\u1eeb \u0111\u1ea7u<\/h3>\n<p>Nh\u01b0 \u0111\u00e3 l\u01b0u \u00fd \u1edf tr\u00ean, Buildah n\u1ed5i b\u1eadt v\u1edbi kh\u1ea3 n\u0103ng t\u1ea1o h\u00ecnh \u1ea3nh container t\u1eeb \u0111\u1ea7u. Ph\u1ea7n n\u00e0y h\u01b0\u1edbng d\u1eabn b\u1ea1n qua m\u1ed9t v\u00ed d\u1ee5 v\u1ec1 c\u00e1ch b\u1ea1n c\u00f3 th\u1ec3 th\u1ef1c hi\u1ec7n \u0111i\u1ec1u \u0111\u00f3.<\/p>\n<p>Ghi ch\u00fa<\/p>\n<p>C\u00e1c l\u1ec7nh c\u1ee7a Buildah \u0111\u1ec3 l\u00e0m vi\u1ec7c v\u1edbi container c\u00f3 th\u1ec3 bao g\u1ed3m m\u1ed9t v\u00e0i t\u1eeb kh\u00f3a, v\u00ec v\u1eady c\u00e1c l\u1ec7nh n\u00e0y th\u01b0\u1eddng \u0111\u01b0\u1ee3c th\u1ef1c thi b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng c\u00e1c bi\u1ebfn m\u00f4i tr\u01b0\u1eddng. V\u00ed d\u1ee5, \u0111\u1ec3 t\u1ea1o m\u1ed9t container m\u1edbi b\u1eb1ng Fedora, b\u1ea1n c\u00f3 th\u1ec3 th\u1ea5y n\u1ed9i dung nh\u01b0 sau:<\/p>\n<pre class=\"wp-block-code\"><code>fedoracontainer=$(buildah from fedora)<\/code><\/pre>\n<p>T\u00ecm hi\u1ec3u th\u00eam v\u1ec1 c\u00e1ch ho\u1ea1t \u0111\u1ed9ng c\u1ee7a bi\u1ebfn m\u00f4i tr\u01b0\u1eddng trong h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-set-linux-environment-variables\/\">C\u00e1ch s\u1eed d\u1ee5ng v\u00e0 thi\u1ebft l\u1eadp bi\u1ebfn m\u00f4i tr\u01b0\u1eddng<\/a>&nbsp;c\u1ee7a ch\u00fang t\u00f4i .<\/p>\n<p>V\u00ed d\u1ee5 v\u1ec1 container sau \u0111\u00e2y b\u1eaft \u0111\u1ea7u b\u1eb1ng m\u1ed9t container r\u1ed7ng. Sau \u0111\u00f3, n\u00f3 th\u00eam Bash v\u00e0 m\u1ed9t s\u1ed1 ti\u1ec7n \u00edch c\u1ed1t l\u00f5i kh\u00e1c v\u00e0o container \u0111\u00f3 \u0111\u1ec3 ch\u1ee9ng minh c\u00e1ch b\u1ea1n c\u00f3 th\u1ec3 th\u00eam ch\u01b0\u01a1ng tr\u00ecnh \u0111\u1ec3 t\u1ea1o m\u1ed9t h\u00ecnh \u1ea3nh container t\u1ed1i thi\u1ec3u.<\/p>\n<p>Ghi ch\u00fa<\/p>\n<p>Ph\u1ea7n n\u00e0y gi\u1ea3 \u0111\u1ecbnh r\u1eb1ng b\u1ea1n mu\u1ed1n ch\u1ea1y Buildah \u1edf ch\u1ebf \u0111\u1ed9 kh\u00f4ng c\u1ea7n root, v\u00ec \u0111\u00e2y l\u00e0 \u0111i\u1ec3m thu h\u00fat ch\u00ednh c\u1ee7a n\u00f3 so v\u1edbi Docker. Th\u1eadt kh\u00f4ng may, tr\u00ecnh qu\u1ea3n l\u00fd g\u00f3i Ubuntu, APT, l\u1ea1i g\u1eb7p v\u1ea5n \u0111\u1ec1 khi c\u00e0i \u0111\u1eb7t c\u00e1c g\u00f3i v\u00e0o m\u1ed9t v\u00f9ng ch\u1ee9a kh\u00f4ng ph\u1ea3i root. V\u00ec v\u1eady, c\u00e1c h\u01b0\u1edbng d\u1eabn sau \u0111\u00e2y d\u00e0nh cho c\u00e1c b\u1ea3n ph\u00e2n ph\u1ed1i c\u00f3 ngu\u1ed3n g\u1ed1c t\u1eeb RHEL nh\u01b0 AlmaLinux, CentOS Stream, Fedora v\u00e0 Rocky Linux.<\/p>\n<p>N\u1ebfu b\u1ea1n mu\u1ed1n ch\u1ea1y Buildah tr\u00ean Ubuntu \u1edf ch\u1ebf \u0111\u1ed9 root th\u00f4ng th\u01b0\u1eddng, ch\u1ec9 c\u1ea7n th\u00eam . v\u00e0o tr\u01b0\u1edbc m\u1ed7i&nbsp;<code>buildah<\/code>l\u1ec7nh theo sau&nbsp;<code>sudo<\/code>.<\/p>\n<p>\u0110\u1ed1i v\u1edbi ho\u1ea1t \u0111\u1ed9ng kh\u00f4ng c\u00f3 g\u1ed1c, tr\u01b0\u1edbc ti\u00ean b\u1ea1n c\u1ea7n th\u1ef1c hi\u1ec7n&nbsp;<code>unshare<\/code>l\u1ec7nh. L\u1ec7nh n\u00e0y \u0111\u01b0a b\u1ea1n v\u00e0o m\u1ed9t shell trong kh\u00f4ng gian t\u00ean ng\u01b0\u1eddi d\u00f9ng. M\u1ed9t s\u1ed1 b\u01b0\u1edbc ti\u1ebfp theo gi\u1ea3 \u0111\u1ecbnh r\u1eb1ng b\u1ea1n \u0111ang \u1edf trong shell kh\u00f4ng gian t\u00ean ng\u01b0\u1eddi d\u00f9ng cho \u0111\u1ebfn khi \u0111\u01b0\u1ee3c ghi ch\u00fa, n\u1ebfu kh\u00f4ng&nbsp;<code>buildah mount<\/code>l\u1ec7nh b\u00ean d\u01b0\u1edbi s\u1ebd kh\u00f4ng th\u00e0nh c\u00f4ng.<\/p>\n<p>1.Nh\u1eadp shell kh\u00f4ng gian t\u00ean ng\u01b0\u1eddi d\u00f9ng:<\/p>\n<pre class=\"wp-block-code\"><code>buildah unshare\n<\/code><\/pre>\n<p>2.T\u1ea1o m\u1ed9t container tr\u1ed1ng b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng&nbsp;<code>scratch<\/code>c\u01a1 s\u1edf c\u1ee7a Buildah:<\/p>\n<pre class=\"wp-block-code\"><code>scratchcontainer=$(buildah from scratch)\n<\/code><\/pre>\n<p>3.G\u1eafn container d\u01b0\u1edbi d\u1ea1ng h\u1ec7 th\u1ed1ng t\u1ec7p \u1ea3o:<\/p>\n<pre class=\"wp-block-code\"><code>scratchmnt=$(buildah mount $scratchcontainer)\n<\/code><\/pre>\n<p>4.C\u00e0i \u0111\u1eb7t Bash v\u00e0&nbsp;<code>coreutils<\/code>v\u00e0o container tr\u1ed1ng.<\/p>\n<p><strong>AlmaLinux<\/strong>&nbsp;,&nbsp;<strong>CentOS Stream<\/strong>&nbsp;,&nbsp;<strong>Fedora<\/strong>&nbsp;ho\u1eb7c&nbsp;<strong>Rocky Linux<\/strong>&nbsp;:<\/p>\n<p>Thay th\u1ebf gi\u00e1 tr\u1ecb&nbsp;<code>36<\/code>b\u00ean d\u01b0\u1edbi b\u1eb1ng phi\u00ean b\u1ea3n ph\u00e2n ph\u1ed1i b\u1eaft ngu\u1ed3n t\u1eeb RHEL c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>dnf install --installroot $scratchmnt --releasever 36 bash coreutils --setopt install_weak_deps=false\n<\/code><\/pre>\n<p><strong>Debian<\/strong>&nbsp;ho\u1eb7c&nbsp;<strong>Ubuntu<\/strong>&nbsp;:<\/p>\n<p>Thay th\u1ebf gi\u00e1 tr\u1ecb&nbsp;<code>bullseye<\/code>b\u00ean d\u01b0\u1edbi b\u1eb1ng t\u00ean m\u00e3 c\u1ee7a b\u1ea3n ph\u00e2n ph\u1ed1i d\u1ef1a tr\u00ean Debian c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>sudo apt install debootstrap\nsudo debootstrap bullseye $scratchmnt<\/code><\/pre>\n<p>5.B\u00e2y gi\u1edd b\u1ea1n c\u00f3 th\u1ec3 ki\u1ec3m tra Bash tr\u00ean container. L\u1ec7nh sau \u0111\u01b0a b\u1ea1n v\u00e0o m\u1ed9t shell Bash trong container:<\/p>\n<pre class=\"wp-block-code\"><code>buildah run $scratchcontainer bash\n<\/code><\/pre>\n<p>6.Sau \u0111\u00f3 b\u1ea1n c\u00f3 th\u1ec3 tho\u00e1t kh\u1ecfi shell Bash b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng:<\/p>\n<pre class=\"wp-block-code\"><code>exit<\/code><\/pre>\n<p>7.B\u00e2y gi\u1edd b\u1ea1n c\u00f3 th\u1ec3 v\u1eadn h\u00e0nh container m\u1ed9t c\u00e1ch an to\u00e0n t\u1eeb b\u00ean ngo\u00e0i shell kh\u00f4ng gian t\u00ean ng\u01b0\u1eddi d\u00f9ng \u0111\u01b0\u1ee3c kh\u1edfi t\u1ea1o b\u1eb1ng&nbsp;<code>unshare<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>exit<\/code><\/pre>\n<p>T\u1eeb \u0111\u00e2y tr\u1edf \u0111i, ch\u00fang ta thay th\u1ebf&nbsp;<code>$scratchcontainer<\/code>b\u1eb1ng t\u00ean c\u1ee7a container, c\u00f3 th\u1ec3 l\u00e0&nbsp;<code>working-container<\/code>. Tuy nhi\u00ean, n\u1ebfu b\u1ea1n c\u00f3 nhi\u1ec1u h\u01a1n m\u1ed9t container, t\u00ean c\u1ee7a container c\u00f3 th\u1ec3 kh\u00e1c nhau. B\u1ea1n c\u00f3 th\u1ec3 x\u00e1c minh t\u00ean container th\u00f4ng qua&nbsp;<code>buildah containers<\/code>l\u1ec7nh.<\/p>\n<p>8.B\u00e2y gi\u1edd ch\u00fang ta h\u00e3y t\u1ea1o l\u1ea1i t\u1ec7p t\u1eadp l\u1ec7nh th\u1eed nghi\u1ec7m. T\u1eeb th\u01b0 m\u1ee5c home c\u1ee7a ng\u01b0\u1eddi d\u00f9ng, h\u00e3y t\u1ea1o th\u01b0&nbsp;<code>script-files<\/code>m\u1ee5c v\u00e0&nbsp;<code>example-script.sh<\/code>t\u1ec7p trong&nbsp;<code>script-files<\/code>th\u01b0 m\u1ee5c:<\/p>\n<pre class=\"wp-block-code\"><code>mkdir script-files\nnano script-files\/example-script.sh<\/code><\/pre>\n<p>Cung c\u1ea5p cho n\u00f3 nh\u1eefng n\u1ed9i dung sau:<\/p>\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\necho \"This is an example script.\"<\/code><\/pre>\n<p>Khi ho\u00e0n t\u1ea5t, nh\u1ea5n&nbsp;<strong>CTRL+X<\/strong>&nbsp;\u0111\u1ec3 tho\u00e1t,&nbsp;<strong>Y<\/strong>&nbsp;\u0111\u1ec3 l\u01b0u v\u00e0&nbsp;<strong>Enter<\/strong>&nbsp;\u0111\u1ec3 tho\u00e1t.<\/p>\n<p>9.L\u1ec7nh b\u00ean d\u01b0\u1edbi sao ch\u00e9p t\u1ec7p \u0111\u00f3 v\u00e0o&nbsp;<code>\/usr\/bin<\/code>th\u01b0 m\u1ee5c c\u1ee7a v\u00f9ng ch\u1ee9a:<\/p>\n<pre class=\"wp-block-code\"><code>buildah copy working-container ~\/script-files\/example-script.sh \/usr\/bin\n<\/code><\/pre>\n<p>10.X\u00e1c minh vi\u1ec7c ph\u00e2n ph\u1ed1i t\u1ec7p b\u1eb1ng c\u00e1ch ch\u1ea1y&nbsp;<code>ls<\/code>l\u1ec7nh tr\u00ean v\u00f9ng ch\u1ee9a c\u1ee7a&nbsp;<code>\/usr\/bin<\/code>th\u01b0 m\u1ee5c:<\/p>\n<pre class=\"wp-block-code\"><code>buildah run working-container ls \/usr\/bin<\/code><\/pre>\n<p>T\u1ec7p tin c\u1ee7a b\u1ea1n&nbsp;<code>example-script.sh<\/code>ph\u1ea3i n\u1eb1m trong s\u1ed1 c\u00e1c t\u1ec7p tin \u0111\u01b0\u1ee3c li\u1ec7t k\u00ea:<\/p>\n<pre class=\"wp-block-code\"><code>&#91;...]\nexample-script.sh\n&#91;...]<\/code><\/pre>\n<p>11.\u0110\u1ec3 bi\u1ebft v\u00ed d\u1ee5 th\u1ef1c t\u1ebf v\u1ec1 c\u00e1ch th\u1ef1c thi c\u00e1c t\u1eadp l\u1ec7nh tr\u00ean v\u00f9ng ch\u1ee9a Buildah, h\u00e3y c\u1ea5p cho t\u1ec7p n\u00e0y quy\u1ec1n th\u1ef1c thi:<\/p>\n<pre class=\"wp-block-code\"><code>buildah run working-container chmod +x \/usr\/bin\/example-script.sh\n<\/code><\/pre>\n<p>12.B\u00e2y gi\u1edd b\u1ea1n c\u00f3 th\u1ec3 ch\u1ea1y t\u1eadp l\u1ec7nh th\u00f4ng qua&nbsp;<code>run<\/code>l\u1ec7nh:<\/p>\n<pre class=\"wp-block-code\"><code>buildah run working-container \/usr\/bin\/example-script.sh\n<\/code><\/pre>\n<p>\u0110\u1ea7u ra c\u1ee7a b\u1ea1n ph\u1ea3i gi\u1ed1ng h\u1ec7t nh\u01b0 sau:<\/p>\n<pre class=\"wp-block-code\"><code>This is an example script.\n<\/code><\/pre>\n<p>13.Khi b\u1ea1n \u0111\u00e3 h\u00e0i l\u00f2ng v\u1edbi v\u00f9ng ch\u1ee9a, b\u1ea1n c\u00f3 th\u1ec3 cam k\u1ebft thay \u0111\u1ed5i v\u00e0o m\u1ed9t h\u00ecnh \u1ea3nh:<\/p>\n<pre class=\"wp-block-code\"><code>buildah commit working-container bash-core-image\n<\/code><\/pre>\n<p>\u0110\u1ea7u ra c\u1ee7a b\u1ea1n s\u1ebd tr\u00f4ng gi\u1ed1ng nh\u01b0 th\u1ebf n\u00e0y:<\/p>\n<pre class=\"wp-block-code\"><code>Getting image source signatures\nCopying blob a0282af9505e done\nCopying config 9ea7958840 done\nWriting manifest to image destination\nStoring signatures\n9ea79588405b48ff7b0572438a81a888c2eb25d95e6526b75b1020108ac11c10<\/code><\/pre>\n<p>14.B\u00e2y gi\u1edd b\u1ea1n c\u00f3 th\u1ec3 ng\u1eaft k\u1ebft n\u1ed1i v\u00e0 x\u00f3a v\u00f9ng ch\u1ee9a:<\/p>\n<pre class=\"wp-block-code\"><code>buildah unmount working-container\nbuildah rm working-container<\/code><\/pre>\n<h3 id=\"managing-images-and-containers\">Qu\u1ea3n l\u00fd h\u00ecnh \u1ea3nh v\u00e0 v\u00f9ng ch\u1ee9a<a href=\"https:\/\/www.linode.com\/docs\/guides\/using-buildah-oci-images\/#managing-images-and-containers\"><\/a><\/h3>\n<p>Buildah h\u01b0\u1edbng \u0111\u1ebfn vi\u1ec7c t\u1ea1o ra c\u00e1c h\u00ecnh \u1ea3nh container, nh\u01b0ng n\u00f3 c\u00f3 m\u1ed9t s\u1ed1 t\u00ednh n\u0103ng \u0111\u1ec3 xem x\u00e9t c\u00e1c container v\u00e0 h\u00ecnh \u1ea3nh c\u00f3 s\u1eb5n. Sau \u0111\u00e2y l\u00e0 danh s\u00e1ch t\u00f3m t\u1eaft c\u00e1c l\u1ec7nh li\u00ean quan cho c\u00e1c t\u00ednh n\u0103ng n\u00e0y.<\/p>\n<p>\u0110\u1ec3 xem danh s\u00e1ch c\u00e1c h\u00ecnh \u1ea3nh \u0111\u01b0\u1ee3c x\u00e2y d\u1ef1ng b\u1eb1ng phi\u00ean b\u1ea3n Buildah c\u1ee7a b\u1ea1n, h\u00e3y ch\u1ea1y l\u1ec7nh sau:<\/p>\n<pre class=\"wp-block-code\"><code>buildah images\n<\/code><\/pre>\n<p>N\u1ebfu b\u1ea1n theo d\u00f5i c\u00e1c ph\u1ea7n tr\u00ean v\u1ec1 c\u00e1ch t\u1ea1o h\u00ecnh \u1ea3nh Buildah, b\u1ea1n c\u00f3 th\u1ec3 c\u00f3 danh s\u00e1ch h\u00ecnh \u1ea3nh nh\u01b0 th\u1ebf n\u00e0y:<\/p>\n<pre class=\"wp-block-code\"><code>REPOSITORY                  TAG      IMAGE ID       CREATED              SIZE\nlocalhost\/fedora-http-server        latest   c313b363840d   8 minutes ago    314 MB\nlocalhost\/bash-core-image           latest   9ea79588405b   20 minutes ago   108 MB\nregistry.fedoraproject.org\/fedora   latest   3a66698e6040   2 months ago     169 MB<\/code><\/pre>\n<p>\u0110\u1ec3 li\u1ec7t k\u00ea c\u00e1c container hi\u1ec7n \u0111ang ch\u1ea1y d\u01b0\u1edbi Buildah, h\u00e3y s\u1eed d\u1ee5ng l\u1ec7nh sau:<\/p>\n<pre class=\"wp-block-code\"><code>buildah containers\n<\/code><\/pre>\n<p>N\u1ebfu b\u1ea1n s\u1eed d\u1ee5ng l\u1ec7nh n\u00e0y trong khi container v\u1eabn \u0111ang ch\u1ea1y t\u1eeb ph\u1ea7n tr\u00ean v\u1ec1 c\u00e1ch x\u00e2y d\u1ef1ng h\u00ecnh \u1ea3nh t\u1eeb \u0111\u1ea7u, b\u1ea1n c\u00f3 th\u1ec3 nh\u1eadn \u0111\u01b0\u1ee3c k\u1ebft qu\u1ea3 nh\u01b0 sau:<\/p>\n<pre class=\"wp-block-code\"><code>CONTAINER ID  BUILDER  IMAGE ID     IMAGE NAME                       CONTAINER NAME\n68a1cc02025d     *                  scratch                          working-container<\/code><\/pre>\n<p>B\u1ea1n c\u00f3 th\u1ec3 l\u1ea5y th\u00f4ng tin chi ti\u1ebft c\u1ee7a m\u1ed9t h\u00ecnh \u1ea3nh c\u1ee5 th\u1ec3 b\u1eb1ng l\u1ec7nh nh\u01b0 sau, thay th\u1ebf&nbsp;<code>9ea79588405b<\/code>b\u1eb1ng ID c\u1ee7a h\u00ecnh \u1ea3nh. B\u1ea1n c\u00f3 th\u1ec3 l\u1ea5y ID c\u1ee7a h\u00ecnh \u1ea3nh khi h\u00ecnh \u1ea3nh \u0111\u01b0\u1ee3c d\u1ef1ng ho\u1eb7c t\u1eeb&nbsp;<code>buildah images<\/code>l\u1ec7nh show \u1edf tr\u00ean:<\/p>\n<pre class=\"wp-block-code\"><code>buildah inspect 9ea79588405b\n<\/code><\/pre>\n<p>Chi ti\u1ebft h\u00ecnh \u1ea3nh th\u1ef1c s\u1ef1 bao g\u1ed3m t\u00e0i li\u1ec7u JSON th\u1ec3 hi\u1ec7n \u0111\u1ea7y \u0111\u1ee7 n\u1ed9i dung c\u1ee7a h\u00ecnh \u1ea3nh. T\u1ea5t c\u1ea3 h\u00ecnh \u1ea3nh ch\u1ee9a ch\u1ec9 l\u00e0: t\u00e0i li\u1ec7u JSON c\u00f3 h\u01b0\u1edbng d\u1eabn x\u00e2y d\u1ef1ng c\u00e1c v\u00f9ng ch\u1ee9a t\u01b0\u01a1ng \u1ee9ng.<\/p>\n<p>Sau \u0111\u00e2y l\u00e0 v\u00ed d\u1ee5 v\u1ec1 ph\u1ea7n \u0111\u1ea7u ti\u00ean c\u1ee7a JSON h\u00ecnh \u1ea3nh ch\u1ee9a k\u1ebft qu\u1ea3 t\u1eeb ph\u1ea7n tr\u00ean v\u1ec1 c\u00e1ch t\u1ea1o h\u00ecnh \u1ea3nh t\u1eeb \u0111\u1ea7u:<\/p>\n<pre class=\"wp-block-code\"><code>{\n    \"Type\": \"buildah 0.0.1\",\n    \"FromImage\": \"localhost\/bash-core-image:latest\",\n    \"FromImageID\": \"9ea79588405b48ff7b0572438a81a888c2eb25d95e6526b75b1020108ac11c10\",\n    \"FromImageDigest\": \"sha256:beee0e0603e62647addab15341f1a52361a9684934d8d6ecbe1571fabd083dca\",\n    \"Config\": \"{\\\"created\\\":\\\"2022-07-20T17:34:55.16639723Z\\\",\\\"architecture\\\":\\\"amd64\\\",\\\"os\\\":\\\"linux\\\",\\\"config\\\":{\\\"Labels\\\":{\\\"io.buildah.version\\\":\\\"1.26.1\\\"}},\\\"rootfs\\\":{\\\"type\\\":\\\"layers\\\",\\\"diff_ids\\\":&#91;\\\"sha256:a0282af9505ed0545c7fb82e1408e1b130cad13a9c3393870c7c4a0d5cf06a62\\\"]},\\\"history\\\":&#91;{\\\"created\\\":\\\"2022-07-20T17:34:55.72288433Z\\\",\\\"created_by\\\":\\\"\/bin\/sh\\\"}]}\",\n    \"Manifest\": \"{\\\"schemaVersion\\\":2,\\\"mediaType\\\":\\\"application\/vnd.oci.image.manifest.v1+json\\\",\\\"config\\\":{\\\"mediaType\\\":\\\"application\/vnd.oci.image.config.v1+json\\\",\\\"digest\\\":\\\"sha256:9ea79588405b48ff7b0572438a81a888c2eb25d95e6526b75b1020108ac11c10\\\",\\\"size\\\":324},\\\"layers\\\":&#91;{\\\"mediaType\\\":\\\"application\/vnd.oci.image.layer.v1.tar\\\",\\\"digest\\\":\\\"sha256:a0282af9505ed0545c7fb82e1408e1b130cad13a9c3393870c7c4a0d5cf06a62\\\",\\\"size\\\":108421632}],\\\"annotations\\\":{\\\"org.opencontainers.image.base.digest\\\":\\\"\\\",\\\"org.opencontainers.image.base.name\\\":\\\"\\\"}}\",\n    \"Container\": \"\",\n    \"ContainerID\": \"\",\n    \"MountPoint\": \"\",\n    \"ProcessLabel\": \"\",\n    \"MountLabel\": \"\",\n    \"ImageAnnotations\": {\n        \"org.opencontainers.image.base.digest\": \"\",\n        \"org.opencontainers.image.base.name\": \"\"\n    },\n&#91;...]<\/code><\/pre>\n<h2 id=\"conclusion\">Ph\u1ea7n k\u1ebft lu\u1eadn<a href=\"https:\/\/www.linode.com\/docs\/guides\/using-buildah-oci-images\/#conclusion\"><\/a><\/h2>\n<p>Buildah cung c\u1ea5p cho b\u1ea1n m\u1ed9t c\u00f4ng c\u1ee5 \u0111\u01a1n gi\u1ea3n nh\u01b0ng m\u1ea1nh m\u1ebd \u0111\u1ec3 t\u1ea1o h\u00ecnh \u1ea3nh container. N\u00f3 kh\u00f4ng ch\u1ec9 l\u00e0 m\u1ed9t gi\u1ea3i ph\u00e1p thay th\u1ebf cho Docker. Buildah l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 container h\u00f3a \u0111\u1ec3 t\u1ea1o container m\u1edf v\u00e0 h\u00ecnh \u1ea3nh container m\u1ed9t c\u00e1ch an to\u00e0n. V\u1edbi h\u01b0\u1edbng d\u1eabn n\u00e0y, b\u1ea1n c\u00f3 m\u1ecdi th\u1ee9 c\u1ea7n thi\u1ebft \u0111\u1ec3 b\u1eaft \u0111\u1ea7u x\u00e2y d\u1ef1ng h\u00ecnh \u1ea3nh c\u1ee7a ri\u00eang m\u00ecnh v\u00e0 s\u1eed d\u1ee5ng Buildah m\u1ed9t c\u00e1ch t\u1ed1i \u0111a.<\/p>\n<h2 id=\"more-information\">Th\u00f4ng tin th\u00eam<\/h2>\n<p>B\u1ea1n c\u00f3 th\u1ec3 mu\u1ed1n tham kh\u1ea3o c\u00e1c ngu\u1ed3n sau \u0111\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 ch\u1ee7 \u0111\u1ec1 n\u00e0y. M\u1eb7c d\u00f9 ch\u00fang t\u00f4i cung c\u1ea5p v\u1edbi hy v\u1ecdng r\u1eb1ng ch\u00fang s\u1ebd h\u1eefu \u00edch, nh\u01b0ng xin l\u01b0u \u00fd r\u1eb1ng ch\u00fang t\u00f4i kh\u00f4ng th\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh ch\u00ednh x\u00e1c ho\u1eb7c t\u00ednh k\u1ecbp th\u1eddi c\u1ee7a c\u00e1c t\u00e0i li\u1ec7u \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef b\u00ean ngo\u00e0i.<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/containers\/buildah\/blob\/main\/docs\/tutorials\/01-intro.md\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub &#8211; Buildah: H\u01b0\u1edbng d\u1eabn Buildah<\/a><\/li>\n<li><a href=\"https:\/\/www.redhat.com\/sysadmin\/building-buildah\" target=\"_blank\" rel=\"noreferrer noopener\">Red Hat: X\u00e2y d\u1ef1ng v\u1edbi Buildah &#8211; Dockerfiles, D\u00f2ng l\u1ec7nh ho\u1eb7c Scripts<\/a><\/li>\n<li><a href=\"https:\/\/developers.redhat.com\/blog\/2019\/08\/14\/best-practices-for-running-buildah-in-a-container#\" target=\"_blank\" rel=\"noreferrer noopener\">Nh\u00e0 ph\u00e1t tri\u1ec3n Red Hat: C\u00e1c ph\u01b0\u01a1ng ph\u00e1p hay nh\u1ea5t \u0111\u1ec3 ch\u1ea1y Buildah trong Container<\/a><\/li>\n<li><a href=\"https:\/\/computingforgeeks.com\/how-to-build-oci-docker-container-images-with-buildah\/\" target=\"_blank\" rel=\"noreferrer noopener\">M\u00e1y t\u00ednh cho d\u00e2n chuy\u00ean nghi\u1ec7p: C\u00e1ch x\u00e2y d\u1ef1ng OCI &amp; Docker Container Images v\u1edbi Buildah<\/a><\/li>\n<\/ul>\n<p>Ngu\u1ed3n: https:\/\/www.linode.com\/docs\/guides\/using-buildah-oci-images\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Buildah l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 ch\u1ee9a m\u00e3 ngu\u1ed3n m\u1edf c\u00f3 kh\u1ea3 n\u0103ng t\u1ea1o h\u00ecnh \u1ea3nh t\u1eeb \u0111\u1ea7u, Dockerfiles ho\u1eb7c Containerfiles. N\u00f3 c\u0169ng tu\u00e2n theo c\u00e1c th\u00f4ng s\u1ed1 k\u1ef9 thu\u1eadt c\u1ee7a S\u00e1ng ki\u1ebfn \u200b\u200bch\u1ee9a m\u1edf (OCI), gi\u00fap h\u00ecnh \u1ea3nh Buildah v\u1eeba linh ho\u1ea1t v\u1eeba m\u1edf. T\u00ecm hi\u1ec3u c\u00e1ch c\u00e0i \u0111\u1eb7t v\u00e0 b\u1eaft \u0111\u1ea7u s\u1eed d\u1ee5ng Buildah<\/p>\n","protected":false},"author":1,"featured_media":36304,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[108],"tags":[],"class_list":["post-35060","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-containers"],"_links":{"self":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/35060","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/comments?post=35060"}],"version-history":[{"count":0,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/35060\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media\/36304"}],"wp:attachment":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media?parent=35060"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/categories?post=35060"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/tags?post=35060"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}