{"id":41196,"date":"2026-05-09T15:44:50","date_gmt":"2026-05-09T08:44:50","guid":{"rendered":"https:\/\/interdata.vn\/blog\/?p=41196"},"modified":"2026-05-09T15:44:50","modified_gmt":"2026-05-09T08:44:50","slug":"dockerfile-la-gi","status":"publish","type":"post","link":"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/","title":{"rendered":"Dockerfile l\u00e0 g\u00ec? 9 l\u1ec7nh c\u01a1 b\u1ea3n &#038; c\u00e1ch t\u1ed1i \u01b0u Image 2026"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-white ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">N\u1ed8I DUNG<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#Dockerfile-la-gi\" >Dockerfile l\u00e0 g\u00ec?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#Co-che-hoat-dong-cua-Dockerfile-Layer-Caching\" >C\u01a1 ch\u1ebf ho\u1ea1t \u0111\u1ed9ng c\u1ee7a Dockerfile (Layer &amp; Caching)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#9-Cau-lenh-Instruction-cot-loi-trong-Dockerfile\" >9 C\u00e2u l\u1ec7nh (Instruction) c\u1ed1t l\u00f5i trong Dockerfile<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#So-sanh-COPY-va-ADD\" >So s\u00e1nh COPY v\u00e0 ADD<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#So-sanh-CMD-va-ENTRYPOINT\" >So s\u00e1nh CMD v\u00e0 ENTRYPOINT<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#Huong-dan-viet-Dockerfile-co-ban-Vi-du-thuc-te-Nodejs\" >H\u01b0\u1edbng d\u1eabn vi\u1ebft Dockerfile c\u01a1 b\u1ea3n (V\u00ed d\u1ee5 th\u1ef1c t\u1ebf Node.js)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#5-loi-khuyen-toi-uu-Dockerfile-chuan-chuyen-gia\" >5 l\u1eddi khuy\u00ean t\u1ed1i \u01b0u Dockerfile chu\u1ea9n chuy\u00ean gia<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#1-Dung-the-Tag-cu-the-tranh-xa-%E2%80%9Clatest%E2%80%9D\" >1. D\u00f9ng th\u1ebb Tag c\u1ee5 th\u1ec3, tr\u00e1nh xa &#8220;latest&#8221;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#2-Su-dung-Base-Image-sieu-nho-Alpine\" >2. S\u1eed d\u1ee5ng Base Image si\u00eau nh\u1ecf (Alpine)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#3-Khai-thac-toi-da-Layer-Caching\" >3. Khai th\u00e1c t\u1ed1i \u0111a Layer Caching<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#4-Tan-dung-Multi-stage-builds\" >4. T\u1eadn d\u1ee5ng Multi-stage builds<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#5-Luon-di-kem-file-dockerignore\" >5. Lu\u00f4n \u0111i k\u00e8m file .dockerignore<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#Cau-hoi-thuong-gap-ve-Dockerfile\" >C\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p v\u1ec1 Dockerfile<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#Khac-biet-giua-Dockerfile-va-docker-composeyml-la-gi\" >Kh\u00e1c bi\u1ec7t gi\u1eefa Dockerfile v\u00e0 docker-compose.yml l\u00e0 g\u00ec?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#Mot-project-co-the-co-nhieu-Dockerfile-khong\" >M\u1ed9t project c\u00f3 th\u1ec3 c\u00f3 nhi\u1ec1u Dockerfile kh\u00f4ng?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#Lam-sao-de-build-Docker-Image-tu-Dockerfile\" >L\u00e0m sao \u0111\u1ec3 build Docker Image t\u1eeb Dockerfile?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#Co-the-chay-Dockerfile-viet-tren-Linux-sang-may-Windows-khong\" >C\u00f3 th\u1ec3 ch\u1ea1y Dockerfile vi\u1ebft tr\u00ean Linux sang m\u00e1y Windows kh\u00f4ng?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#Nen-dung-base-image-nao-cho-Dockerfile\" >N\u00ean d\u00f9ng base image n\u00e0o cho Dockerfile?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#Khi-nao-nen-dung-ENTRYPOINT-thay-vi-CMD\" >Khi n\u00e0o n\u00ean d\u00f9ng ENTRYPOINT thay v\u00ec CMD?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#Tai-sao-qua-trinh-build-Dockerfile-lai-mat-qua-nhieu-thoi-gian\" >T\u1ea1i sao qu\u00e1 tr\u00ecnh build Dockerfile l\u1ea1i m\u1ea5t qu\u00e1 nhi\u1ec1u th\u1eddi gian?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#Loi-%E2%80%9Cno-space-left-on-device%E2%80%9D-khi-build-la-do-dau\" >L\u1ed7i &#8220;no space left on device&#8221; khi build l\u00e0 do \u0111\u00e2u?<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/#Loi-ket\" >L\u1eddi k\u1ebft<\/a><\/li><\/ul><\/nav><\/div>\n<div class=\"summary\">\n<p><strong>T\u00f3m t\u1eaft nhanh:<\/strong> <a href=\"https:\/\/interdata.vn\/blog\/dockerfile-la-gi\/\"><strong>Dockerfile<\/strong><\/a> l\u00e0 m\u1ed9t t\u1eadp tin v\u0103n b\u1ea3n d\u1ea1ng k\u1ecbch b\u1ea3n ch\u1ee9a chu\u1ed7i c\u00e1c l\u1ec7nh li\u00ean ti\u1ebfp m\u00e0 Docker engine \u0111\u1ecdc \u0111\u1ec3 t\u1ef1 \u0111\u1ed9ng \u0111\u00f3ng g\u00f3i m\u00e3 ngu\u1ed3n, m\u00f4i tr\u01b0\u1eddng v\u00e0 th\u01b0 vi\u1ec7n th\u00e0nh m\u1ed9t Docker Image. Hi\u1ec3u \u0111\u01a1n gi\u1ea3n, n\u1ebfu \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n l\u00e0 m\u1ed9t chi\u1ebfc xe, th\u00ec file n\u00e0y ch\u00ednh l\u00e0 b\u1ea3n v\u1ebd k\u1ef9 thu\u1eadt quy \u0111\u1ecbnh chi ti\u1ebft t\u1eebng con \u1ed1c v\u00edt \u0111\u1ec3 b\u1ea5t k\u1ef3 nh\u00e0 m\u00e1y n\u00e0o c\u0169ng l\u1eafp r\u00e1p ra th\u00e0nh ph\u1ea9m gi\u1ed1ng h\u1ec7t nhau.<\/p>\n<ul>\n<li>Dockerfile \u0111\u1ecbnh ngh\u0129a m\u00f4i tr\u01b0\u1eddng t\u1eeb con s\u1ed1 0, ch\u1ea5m d\u1ee9t ho\u00e0n to\u00e0n t\u00ecnh tr\u1ea1ng l\u1ed7i &#8220;ch\u1ea1y \u0111\u01b0\u1ee3c tr\u00ean m\u00e1y t\u00ednh c\u1ee7a t\u00f4i nh\u01b0ng ch\u1ebft tr\u00ean server&#8221;.<\/li>\n<li>M\u1ed7i d\u00f2ng l\u1ec7nh (nh\u01b0 RUN, COPY) t\u1ea1o ra m\u1ed9t l\u1edbp (layer) d\u1ea1ng ch\u1ec9 \u0111\u1ecdc, x\u1ebfp ch\u1ed3ng l\u00ean nhau t\u1ea1o th\u00e0nh c\u1ea5u tr\u00fac ho\u00e0n ch\u1ec9nh.<\/li>\n<li>C\u01a1 ch\u1ebf Build Caching gi\u00fap b\u1ecf qua c\u00e1c b\u01b0\u1edbc kh\u00f4ng thay \u0111\u1ed5i, r\u00fat ng\u1eafn th\u1eddi gian tri\u1ec3n khai t\u1eeb nhi\u1ec1u ph\u00fat xu\u1ed1ng ch\u1ec9 c\u00f2n v\u00e0i gi\u00e2y.<\/li>\n<li>Vi\u1ec7c k\u1ebft h\u1ee3p Alpine Linux v\u00e0 Multi-stage builds l\u00e0 ti\u00eau chu\u1ea9n b\u1eaft bu\u1ed9c \u0111\u1ec3 gi\u1eef dung l\u01b0\u1ee3ng \u1ee9ng d\u1ee5ng \u1edf m\u1ee9c si\u00eau nh\u1eb9 v\u00e0 an to\u00e0n.<\/li>\n<\/ul>\n<\/div>\n<p>Bao nhi\u00eau l\u1ea7n b\u1ea1n ho\u1eb7c \u0111\u1ed3ng nghi\u1ec7p c\u1ee7a m\u00ecnh ph\u1ea3i th\u1ed1t l\u00ean: &#8220;R\u00f5 r\u00e0ng code n\u00e0y ch\u1ea1y b\u00ecnh th\u01b0\u1eddng tr\u00ean m\u00e1y t\u00f4i m\u00e0 sao l\u00ean server l\u1ea1i s\u1eadp?&#8221; N\u1ed7i \u00e1m \u1ea3nh mu\u00f4n thu\u1edf n\u00e0y xu\u1ea5t ph\u00e1t t\u1eeb vi\u1ec7c sai l\u1ec7ch phi\u00ean b\u1ea3n h\u1ec7 \u0111i\u1ec1u h\u00e0nh, thi\u1ebfu h\u1ee5t th\u01b0 vi\u1ec7n hay c\u1ea5u h\u00ecnh bi\u1ebfn m\u00f4i tr\u01b0\u1eddng kh\u00f4ng \u0111\u1ed3ng nh\u1ea5t.<\/p>\n<p>T\u01b0\u1edfng t\u01b0\u1ee3ng b\u1ea1n c\u00f3 m\u1ed9t c\u00f4ng th\u1ee9c n\u1ea5u \u0103n k\u1ef3 di\u1ec7u. D\u00f9 b\u1ea1n \u0111\u01b0a t\u1edd c\u00f4ng th\u1ee9c \u0111\u00f3 cho m\u1ed9t \u0111\u1ea7u b\u1ebfp t\u1ea1i Vi\u1ec7t Nam hay m\u1ed9t ng\u01b0\u1eddi nghi\u1ec7p d\u01b0 \u1edf M\u1ef9, n\u1ea5u \u1edf c\u0103n b\u1ebfp gia \u0111\u00ecnh hay nh\u00e0 h\u00e0ng 5 sao, m\u00f3n \u0103n ra l\u00f2 c\u0169ng c\u00f3 h\u01b0\u01a1ng v\u1ecb gi\u1ed1ng h\u1ec7t nhau 100%. Dockerfile ch\u00ednh l\u00e0 t\u1edd c\u00f4ng th\u1ee9c \u0111\u00f3 trong th\u1ebf gi\u1edbi l\u1eadp tr\u00ecnh hi\u1ec7n \u0111\u1ea1i.<\/p>\n<p>S\u1ef1 xu\u1ea5t hi\u1ec7n c\u1ee7a c\u00f4ng ngh\u1ec7 \u0111\u00f3ng g\u00f3i \u1ee9ng d\u1ee5ng \u0111\u00e3 thay \u0111\u1ed5i v\u0129nh vi\u1ec5n c\u00e1ch ch\u00fang ta ph\u00e1t tri\u1ec3n ph\u1ea7n m\u1ec1m. B\u00e0i vi\u1ebft d\u01b0\u1edbi \u0111\u00e2y t\u1eeb <a href=\"https:\/\/interdata.vn\/\" target=\"_blank\" rel=\"noopener\"><strong>InterData<\/strong><\/a> s\u1ebd \u0111i s\u00e2u ph\u00e2n t\u00edch Dockerfile l\u00e0 g\u00ec, gi\u1ea3i ph\u1eabu chi ti\u1ebft \u00fd ngh\u0129a c\u1ee7a t\u1eebng d\u00f2ng l\u1ec7nh c\u1ed1t l\u00f5i, \u0111\u1ed3ng th\u1eddi h\u01b0\u1edbng d\u1eabn b\u1ea1n c\u00e1ch vi\u1ebft m\u1ed9t k\u1ecbch b\u1ea3n t\u1ed1i \u01b0u nh\u1ea5t \u0111\u1ec3 tri\u1ec3n khai d\u1ef1 \u00e1n th\u1ef1c t\u1ebf.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Dockerfile-la-gi\"><\/span>Dockerfile l\u00e0 g\u00ec?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Dockerfile<\/strong> l\u00e0 m\u1ed9t t\u1ec7p v\u0103n b\u1ea3n thu\u1ea7n t\u00fay (plain text) kh\u00f4ng c\u00f3 ph\u1ea7n m\u1edf r\u1ed9ng, ch\u1ee9a t\u1eadp h\u1ee3p c\u00e1c ch\u1ec9 th\u1ecb (instructions) \u0111\u01b0\u1ee3c vi\u1ebft theo c\u00fa ph\u00e1p quy chu\u1ea9n m\u00e0 Docker Engine s\u1eed d\u1ee5ng \u0111\u1ec3 t\u1ef1 \u0111\u1ed9ng x\u00e2y d\u1ef1ng n\u00ean m\u1ed9t Docker Image. \u0110\u00e2y l\u00e0 b\u01b0\u1edbc \u0111\u1ea7u ti\u00ean v\u00e0 quan tr\u1ecdng nh\u1ea5t trong quy tr\u00ecnh container h\u00f3a m\u1ed9t \u1ee9ng d\u1ee5ng.<\/p>\n<p>Theo <a href=\"https:\/\/docs.docker.com\/build\/concepts\/dockerfile\/\" target=\"_blank\" rel=\"nofollow noopener\">t\u00e0i li\u1ec7u ch\u00ednh th\u1ee9c t\u1eeb Docker Docs<\/a>, h\u1ec7 th\u1ed1ng s\u1ebd \u0111\u1ecdc l\u1ea7n l\u01b0\u1ee3t c\u00e1c c\u00e2u l\u1ec7nh t\u1eeb tr\u00ean xu\u1ed1ng d\u01b0\u1edbi. M\u1ed7i d\u00f2ng l\u1ec7nh \u0111\u1ea1i di\u1ec7n cho m\u1ed9t thao t\u00e1c c\u1ee5 th\u1ec3: t\u1eeb vi\u1ec7c t\u1ea3i h\u1ec7 \u0111i\u1ec1u h\u00e0nh g\u1ed1c, thi\u1ebft l\u1eadp bi\u1ebfn m\u00f4i tr\u01b0\u1eddng, sao ch\u00e9p m\u00e3 ngu\u1ed3n, cho \u0111\u1ebfn khai b\u00e1o c\u1ed5ng m\u1ea1ng c\u1ea7n m\u1edf. Thay v\u00ec b\u1ea1n ph\u1ea3i SSH v\u00e0o m\u1ed9t m\u00e1y ch\u1ee7 tr\u1ed1ng v\u00e0 g\u00f5 th\u1ee7 c\u00f4ng h\u00e0ng ch\u1ee5c l\u1ec7nh c\u00e0i \u0111\u1eb7t, k\u1ecbch b\u1ea3n n\u00e0y t\u1ef1 \u0111\u1ed9ng h\u00f3a to\u00e0n b\u1ed9 qu\u00e1 tr\u00ecnh \u0111\u00f3 v\u1edbi \u0111\u1ed9 ch\u00ednh x\u00e1c tuy\u1ec7t \u0111\u1ed1i.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-41199\" src=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/05\/Dockerfile.jpg\" alt=\"Dockerfile\" width=\"699\" height=\"522\" title=\"\" srcset=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/05\/Dockerfile.jpg 699w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/05\/Dockerfile-300x224.jpg 300w\" sizes=\"auto, (max-width: 699px) 100vw, 699px\" \/><\/p>\n<p>\u0110\u1ec3 hi\u1ec3u r\u00f5 h\u01a1n, ch\u00fang ta c\u1ea7n ph\u00e2n bi\u1ec7t ba kh\u00e1i ni\u1ec7m n\u1ec1n t\u1ea3ng th\u01b0\u1eddng g\u00e2y nh\u1ea7m l\u1eabn trong <a href=\"https:\/\/interdata.vn\/blog\/docker-la-gi\/\" target=\"_blank\" rel=\"noopener\">h\u1ec7 sinh th\u00e1i Docker<\/a>:<\/p>\n<ul>\n<li><strong>Dockerfile<\/strong> \u2014 B\u1ea3n thi\u1ebft k\u1ebf ho\u1eb7c k\u1ecbch b\u1ea3n chi ti\u1ebft.<\/li>\n<li><strong>Docker Image<\/strong> \u2014 Th\u00e0nh ph\u1ea9m d\u1ea1ng n\u00e9n (template) \u0111\u01b0\u1ee3c t\u1ea1o ra sau khi ch\u1ea1y b\u1ea3n thi\u1ebft k\u1ebf tr\u00ean. N\u00f3 ch\u1ee9a m\u1ecdi th\u1ee9 c\u1ea7n thi\u1ebft \u0111\u1ec3 \u1ee9ng d\u1ee5ng ho\u1ea1t \u0111\u1ed9ng.<\/li>\n<li><strong>Docker Container<\/strong> \u2014 Phi\u00ean b\u1ea3n th\u1ef1c th\u1ec3 \u0111ang ch\u1ea1y (running instance) c\u1ee7a Image. B\u1ea1n c\u00f3 th\u1ec3 kh\u1edfi \u0111\u1ed9ng h\u00e0ng tr\u0103m Container \u0111\u1ed9c l\u1eadp t\u1eeb ch\u1ec9 m\u1ed9t Image duy nh\u1ea5t.<\/li>\n<\/ul>\n<p>Kh\u00e1c v\u1edbi c\u00e1c bash script th\u00f4ng th\u01b0\u1eddng v\u1ed1n hay b\u1ecb l\u1ed7i n\u1ebfu ch\u1ea1y l\u1ea1i nhi\u1ec1u l\u1ea7n tr\u00ean c\u00f9ng m\u1ed9t m\u00e1y, t\u1eadp tin n\u00e0y s\u1edf h\u1eefu t\u00ednh b\u1ea5t bi\u1ebfn (idempotent) c\u1ef1c cao nh\u1edd c\u01a1 ch\u1ebf l\u01b0u tr\u1eef \u0111\u1ec7m ph\u00e2n l\u1edbp.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Co-che-hoat-dong-cua-Dockerfile-Layer-Caching\"><\/span>C\u01a1 ch\u1ebf ho\u1ea1t \u0111\u1ed9ng c\u1ee7a Dockerfile (Layer &amp; Caching)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>B\u1ea3n ch\u1ea5t k\u1ef9 thu\u1eadt \u0111\u1eb1ng sau qu\u00e1 tr\u00ecnh build l\u00e0 ki\u1ebfn tr\u00fac ph\u00e2n l\u1edbp (Layered Architecture). Docker Engine bi\u00ean d\u1ecbch n\u1ed9i dung t\u1ec7p t\u1eeb tr\u00ean xu\u1ed1ng d\u01b0\u1edbi (Top-down) v\u00e0 x\u1eed l\u00fd ri\u00eang bi\u1ec7t t\u1eebng ch\u1ec9 th\u1ecb.<\/p>\n<p>M\u1ed7i c\u00e2u l\u1ec7nh l\u00e0m thay \u0111\u1ed5i h\u1ec7 th\u1ed1ng t\u1eadp tin (ch\u1eb3ng h\u1ea1n nh\u01b0 <code>RUN<\/code>, <code>COPY<\/code>, <code>ADD<\/code>) s\u1ebd t\u1ea1o ra m\u1ed9t Read-only layer (l\u1edbp ch\u1ec9 \u0111\u1ecdc). C\u00e1c l\u1edbp n\u00e0y x\u1ebfp ch\u1ed3ng l\u00ean nhau m\u1ed9t c\u00e1ch tu\u1ea7n t\u1ef1. Mi\u1ebfng gh\u00e9p cu\u1ed1i c\u00f9ng \u0111\u01b0\u1ee3c th\u00eam v\u00e0o khi b\u1ea1n ch\u1ea1y \u1ee9ng d\u1ee5ng ch\u00ednh l\u00e0 m\u1ed9t Writable layer (l\u1edbp c\u00f3 th\u1ec3 ghi), n\u01a1i ch\u1ee9a c\u00e1c d\u1eef li\u1ec7u t\u1ea1m th\u1eddi sinh ra trong qu\u00e1 tr\u00ecnh v\u1eadn h\u00e0nh.<\/p>\n<p>M\u1ed7i layer trong Dockerfile gi\u1ed1ng nh\u01b0 m\u1ed9t mi\u1ebfng Lego n\u1eb1m trong m\u1ed9t t\u00f2a th\u00e1p. N\u1ebfu b\u1ea1n ch\u1ec9 mu\u1ed1n thay \u0111\u1ed5i m\u00e0u s\u1eafc c\u1ee7a mi\u1ebfng Lego \u1edf tr\u00ean c\u00f9ng (v\u00ed d\u1ee5: s\u1eeda m\u1ed9t d\u00f2ng code), h\u1ec7 th\u1ed1ng \u0111\u1ee7 th\u00f4ng minh \u0111\u1ec3 kh\u00f4ng th\u00e1o d\u1ee1 to\u00e0n b\u1ed9 n\u1ec1n m\u00f3ng b\u00ean d\u01b0\u1edbi (nh\u01b0 b\u01b0\u1edbc c\u00e0i \u0111\u1eb7t h\u1ec7 \u0111i\u1ec1u h\u00e0nh hay t\u1ea3i th\u01b0 vi\u1ec7n). \u0110\u00f3 ch\u00ednh l\u00e0 Build Caching.<\/p>\n<p>Vi\u1ec7c t\u1eadn d\u1ee5ng Cache \u0111\u00fang c\u00e1ch mang l\u1ea1i l\u1ee3i th\u1ebf kh\u1ed5ng l\u1ed3 v\u1ec1 m\u1eb7t t\u1ed1c \u0111\u1ed9. D\u1eef li\u1ec7u th\u1ef1c t\u1ebf cho th\u1ea5y, m\u1ed9t d\u1ef1 \u00e1n Node.js quy m\u00f4 trung b\u00ecnh c\u00f3 th\u1ec3 m\u1ea5t 3-5 ph\u00fat \u0111\u1ec3 x\u00e2y d\u1ef1ng l\u1ea7n \u0111\u1ea7u. Tuy nhi\u00ean, \u1edf nh\u1eefng l\u1ea7n c\u1eadp nh\u1eadt m\u00e3 ngu\u1ed3n ti\u1ebfp theo, n\u1ebfu b\u1ea1n vi\u1ebft k\u1ecbch b\u1ea3n t\u1ed1i \u01b0u, th\u1eddi gian n\u00e0y gi\u1ea3m xu\u1ed1ng ch\u1ec9 c\u00f2n kho\u1ea3ng 2-4 gi\u00e2y do Engine t\u00e1i s\u1eed d\u1ee5ng 90% c\u00e1c layer \u0111\u00e3 l\u01b0u \u0111\u1ec7m t\u1eeb tr\u01b0\u1edbc.<\/p>\n<figure id=\"attachment_41200\" aria-describedby=\"caption-attachment-41200\" style=\"width: 700px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-41200\" src=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/05\/So-do-co-che-hoat-dong-cua-Dockerfile.jpg\" alt=\"S\u01a1 \u0111\u1ed3 c\u01a1 ch\u1ebf ho\u1ea1t \u0111\u1ed9ng c\u1ee7a Dockerfile\" width=\"700\" height=\"466\" title=\"\" srcset=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/05\/So-do-co-che-hoat-dong-cua-Dockerfile.jpg 1000w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/05\/So-do-co-che-hoat-dong-cua-Dockerfile-300x200.jpg 300w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/05\/So-do-co-che-hoat-dong-cua-Dockerfile-768x511.jpg 768w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><figcaption id=\"caption-attachment-41200\" class=\"wp-caption-text\">S\u01a1 \u0111\u1ed3 c\u01a1 ch\u1ebf ho\u1ea1t \u0111\u1ed9ng c\u1ee7a Dockerfile<\/figcaption><\/figure>\n<h2><span class=\"ez-toc-section\" id=\"9-Cau-lenh-Instruction-cot-loi-trong-Dockerfile\"><\/span>9 C\u00e2u l\u1ec7nh (Instruction) c\u1ed1t l\u00f5i trong Dockerfile<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>D\u00f9 d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n \u0111\u01a1n gi\u1ea3n hay ph\u1ee9c t\u1ea1p, vi\u1ec7c n\u1eafm v\u1eefng b\u1ea3ng t\u1eeb v\u1ef1ng c\u00fa ph\u00e1p l\u00e0 \u0111i\u1ec1u b\u1eaft bu\u1ed9c. D\u01b0\u1edbi \u0111\u00e2y l\u00e0 9 ch\u1ec9 th\u1ecb th\u00f4ng d\u1ee5ng nh\u1ea5t, xu\u1ea5t hi\u1ec7n trong h\u1ea7u h\u1ebft c\u00e1c k\u1ecbch b\u1ea3n th\u1ef1c t\u1ebf.<\/p>\n<ul>\n<li><strong>FROM<\/strong> \u2014 Ch\u1ec9 \u0111\u1ecbnh Image g\u1ed1c (Base Image) \u0111\u1ec3 b\u1eaft \u0111\u1ea7u. \u0110\u00e2y lu\u00f4n l\u00e0 c\u00e2u l\u1ec7nh b\u1eaft bu\u1ed9c v\u00e0 ph\u1ea3i \u0111\u1ee9ng \u0111\u1ea7u ti\u00ean trong t\u1ec7p.<\/li>\n<li><strong>WORKDIR<\/strong> \u2014 Thi\u1ebft l\u1eadp th\u01b0 m\u1ee5c l\u00e0m vi\u1ec7c m\u1eb7c \u0111\u1ecbnh b\u00ean trong container. C\u00e1c l\u1ec7nh ch\u1ea1y sau \u0111\u00f3 s\u1ebd l\u1ea5y th\u01b0 m\u1ee5c n\u00e0y l\u00e0m m\u1ed1c.<\/li>\n<li><strong>RUN<\/strong> \u2014 Th\u1ef1c thi c\u00e1c l\u1ec7nh Linux trong qu\u00e1 tr\u00ecnh x\u00e2y d\u1ef1ng Image (th\u01b0\u1eddng d\u00f9ng \u0111\u1ec3 c\u00e0i \u0111\u1eb7t th\u01b0 vi\u1ec7n nh\u01b0 <code>apt-get install<\/code> hay <code>npm install<\/code>).<\/li>\n<li><strong>ENV<\/strong> \u2014 Khai b\u00e1o c\u00e1c bi\u1ebfn m\u00f4i tr\u01b0\u1eddng c\u1ea5u h\u00ecnh cho h\u1ec7 th\u1ed1ng (v\u00ed d\u1ee5: DB_HOST, PORT).<\/li>\n<li><strong>EXPOSE<\/strong> \u2014 B\u00e1o cho Engine bi\u1ebft container s\u1ebd l\u1eafng nghe tr\u00ean c\u1ed5ng m\u1ea1ng n\u00e0o khi ho\u1ea1t \u0111\u1ed9ng (ch\u1ec9 mang t\u00ednh ch\u1ea5t t\u00e0i li\u1ec7u h\u00f3a, kh\u00f4ng t\u1ef1 \u0111\u1ed9ng m\u1edf c\u1ed5ng tr\u00ean m\u00e1y ch\u1ee7 v\u1eadt l\u00fd).<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"So-sanh-COPY-va-ADD\"><\/span>So s\u00e1nh COPY v\u00e0 ADD<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>C\u1ea3 hai l\u1ec7nh \u0111\u1ec1u d\u00f9ng \u0111\u1ec3 \u0111\u01b0a file t\u1eeb m\u00e1y t\u00ednh g\u1ed1c (host) v\u00e0o b\u00ean trong Image, nh\u01b0ng ch\u00fang c\u00f3 m\u1ee9c \u0111\u1ed9 can thi\u1ec7p kh\u00e1c nhau.<\/p>\n<table>\n<thead>\n<tr>\n<th>Ti\u00eau ch\u00ed<\/th>\n<th>COPY<\/th>\n<th>ADD<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Ch\u1ee9c n\u0103ng ch\u00ednh<\/td>\n<td>Sao ch\u00e9p t\u1ec7p\/th\u01b0 m\u1ee5c c\u1ee5c b\u1ed9 v\u00e0o Image<\/td>\n<td>Sao ch\u00e9p t\u1ec7p, h\u1ed7 tr\u1ee3 th\u00eam t\u1ea3i t\u1eeb URL<\/td>\n<\/tr>\n<tr>\n<td>X\u1eed l\u00fd file n\u00e9n (tar)<\/td>\n<td>Sao ch\u00e9p nguy\u00ean b\u1ea3n file n\u00e9n<\/td>\n<td>T\u1ef1 \u0111\u1ed9ng gi\u1ea3i n\u00e9n file tar v\u00e0o th\u01b0 m\u1ee5c \u0111\u00edch<\/td>\n<\/tr>\n<tr>\n<td>Khuy\u00ean d\u00f9ng<\/td>\n<td>\u01afu ti\u00ean s\u1eed d\u1ee5ng cho 99% tr\u01b0\u1eddng h\u1ee3p<\/td>\n<td>Ch\u1ec9 d\u00f9ng khi th\u1ef1c s\u1ef1 c\u1ea7n t\u00ednh n\u0103ng gi\u1ea3i n\u00e9n t\u1ef1 \u0111\u1ed9ng<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3><span class=\"ez-toc-section\" id=\"So-sanh-CMD-va-ENTRYPOINT\"><\/span>So s\u00e1nh CMD v\u00e0 ENTRYPOINT<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0110\u00e2y l\u00e0 hai l\u1ec7nh d\u1ec5 g\u00e2y nh\u1ea7m l\u1eabn nh\u1ea5t cho ng\u01b0\u1eddi m\u1edbi khi \u0111\u1ecbnh ngh\u0129a h\u00e0nh vi kh\u1edfi ch\u1ea1y \u1ee9ng d\u1ee5ng.<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0110\u1eb7c \u0111i\u1ec3m<\/th>\n<th>CMD<\/th>\n<th>ENTRYPOINT<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>M\u1ee5c \u0111\u00edch<\/td>\n<td>\u0110\u1ecbnh ngh\u0129a l\u1ec7nh\/tham s\u1ed1 m\u1eb7c \u0111\u1ecbnh<\/td>\n<td>\u0110\u1ecbnh ngh\u0129a t\u1eadp tin th\u1ef1c thi c\u1ed1 \u0111\u1ecbnh<\/td>\n<\/tr>\n<tr>\n<td>Ghi \u0111\u00e8 l\u00fac ch\u1ea1y<\/td>\n<td>D\u1ec5 d\u00e0ng b\u1ecb ghi \u0111\u00e8 ho\u00e0n to\u00e0n t\u1eeb terminal<\/td>\n<td>Kh\u00f3 b\u1ecb ghi \u0111\u00e8, tham s\u1ed1 ngo\u00e0i s\u1ebd \u0111\u01b0\u1ee3c n\u1ed1i th\u00eam v\u00e0o \u0111u\u00f4i l\u1ec7nh<\/td>\n<\/tr>\n<tr>\n<td>Tr\u01b0\u1eddng h\u1ee3p s\u1eed d\u1ee5ng<\/td>\n<td>Ch\u1ea1y shell t\u01b0\u01a1ng t\u00e1c ho\u1eb7c app c\u00f3 th\u1ec3 thay \u0111\u1ed5i<\/td>\n<td>Container ho\u1ea1t \u0111\u1ed9ng nh\u01b0 m\u1ed9t c\u00f4ng c\u1ee5 chuy\u00ean bi\u1ec7t (CLI tool)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><span class=\"ez-toc-section\" id=\"Huong-dan-viet-Dockerfile-co-ban-Vi-du-thuc-te-Nodejs\"><\/span>H\u01b0\u1edbng d\u1eabn vi\u1ebft Dockerfile c\u01a1 b\u1ea3n (V\u00ed d\u1ee5 th\u1ef1c t\u1ebf Node.js)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0110\u1ec3 bi\u1ebfn l\u00fd thuy\u1ebft th\u00e0nh kinh nghi\u1ec7m th\u1ef1c h\u00e0nh, ch\u00fang ta s\u1ebd ti\u1ebfn h\u00e0nh \u0111\u00f3ng g\u00f3i m\u1ed9t \u1ee9ng d\u1ee5ng Node.js \u0111\u01a1n gi\u1ea3n. Gi\u1ea3 s\u1eed b\u1ea1n c\u00f3 t\u1ec7p <code>server.js<\/code> v\u00e0 <code>package.json<\/code> trong c\u00f9ng m\u1ed9t th\u01b0 m\u1ee5c.<\/p>\n<p><strong>1\/ T\u1ea1o t\u1ec7p c\u1ea5u h\u00ecnh:<\/strong> T\u1ea1i th\u01b0 m\u1ee5c g\u1ed1c c\u1ee7a d\u1ef1 \u00e1n, b\u1ea1n t\u1ea1o m\u1ed9t t\u1ec7p tr\u1ed1ng v\u00e0 \u0111\u1eb7t t\u00ean ch\u00ednh x\u00e1c l\u00e0 <code>Dockerfile<\/code> (vi\u1ebft hoa ch\u1eef D).<\/p>\n<p><strong>2\/ Vi\u1ebft k\u1ecbch b\u1ea3n:<\/strong> M\u1edf t\u1ec7p v\u1eeba t\u1ea1o v\u00e0 nh\u1eadp v\u00e0o chu\u1ed7i n\u1ed9i dung chu\u1ea9n m\u1ef1c sau \u0111\u00e2y.<\/p>\n<pre><code>FROM node:20-alpine\r\nWORKDIR \/app\r\nCOPY package*.json .\/\r\nRUN npm install\r\nCOPY . .\r\nEXPOSE 3000\r\nCMD [\"npm\", \"start\"]<\/code><\/pre>\n<p><strong>3\/ Th\u1ef1c thi ti\u1ebfn tr\u00ecnh Build:<\/strong> M\u1edf terminal t\u1ea1i th\u01b0 m\u1ee5c \u0111\u00f3 v\u00e0 g\u00f5 l\u1ec7nh <code>docker build -t my-node-app:1.0 .<\/code>. D\u1ea5u ch\u1ea5m \u1edf cu\u1ed1i c\u1ef1c k\u1ef3 quan tr\u1ecdng, n\u00f3 ch\u1ec9 \u0111\u1ecbnh \u0111\u01b0\u1eddng d\u1eabn ng\u1eef c\u1ea3nh (build context) l\u00e0 th\u01b0 m\u1ee5c hi\u1ec7n t\u1ea1i.<\/p>\n<p><strong>4\/ Kh\u1edfi ch\u1ea1y \u1ee9ng d\u1ee5ng:<\/strong> Ch\u1ea1y l\u1ec7nh <code>docker run -p 3000:3000 my-node-app:1.0<\/code> \u0111\u1ec3 kh\u1edfi ch\u1ea1y container. Truy c\u1eadp localhost:3000 tr\u00ean tr\u00ecnh duy\u1ec7t \u0111\u1ec3 th\u1ea5y k\u1ebft qu\u1ea3.<\/p>\n<div style=\"border-left: 4px solid #0f6cbf; background: #f0f7ff; border-radius: 0 8px 8px 0; padding: 20px 24px; margin: 40px 0; max-width: 100%;\">\n<div style=\"display: flex; align-items: center; margin-bottom: 12px;\"><span style=\"font-size: 22px; margin-right: 10px;\">\ud83d\ude80<\/span><br \/>\n<strong style=\"color: #1a3c6e; font-size: 23px; text-transform: uppercase;\">Gi\u1ea3i ph\u00e1p VPS GI\u00c1 R\u1eba, c\u1ea5u h\u00ecnh cao \u2014 InterData<\/strong><\/div>\n<p style=\"color: #333; font-size: 14px; margin: 0 0 16px 0; line-height: 1.6;\">B\u1ea1n \u0111\u00e3 build th\u00e0nh c\u00f4ng Docker Image tr\u00ean m\u00e1y c\u00e1 nh\u00e2n v\u00e0 mu\u1ed1n \u0111\u01b0a l\u00ean Internet \u0111\u1ec3 m\u1ecdi ng\u01b0\u1eddi c\u00f9ng truy c\u1eadp? M\u00f4i tr\u01b0\u1eddng VPS Linux l\u00e0 l\u1ef1a ch\u1ecdn ho\u00e0n h\u1ea3o nh\u1ea5t \u0111\u1ec3 deploy Container.<\/p>\n<p style=\"color: #555; font-size: 13px; margin: 0 0 18px 0;\"><strong style=\"color: #0f6cbf;\">\u2713<\/strong> \u1ed4 c\u1ee9ng NVMe si\u00eau t\u1ed1c, \u0111\u1ecdc ghi d\u1eef li\u1ec7u c\u1ef1c nhanh<br \/>\n<strong style=\"color: #0f6cbf;\">\u2713<\/strong> H\u1ed7 tr\u1ee3 c\u00e0i \u0111\u1eb7t s\u1eb5n Docker\/Docker Compose<br \/>\n<strong style=\"color: #0f6cbf;\">\u2713<\/strong> To\u00e0n quy\u1ec1n qu\u1ea3n tr\u1ecb Root, IPv4 ri\u00eang bi\u1ec7t<\/p>\n<p><a style=\"display: inline-block; background: #0f6cbf; color: #fff; font-size: 16px; font-weight: 600; text-decoration: none; padding: 10px 22px; border-radius: 6px;\" href=\"https:\/\/interdata.vn\/thue-vps\/\" target=\"_blank\" rel=\"noopener\">Thu\u00ea VPS Gi\u00e1 R\u1ebb Ngay \u2192<\/a><\/p>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"5-loi-khuyen-toi-uu-Dockerfile-chuan-chuyen-gia\"><\/span>5 l\u1eddi khuy\u00ean t\u1ed1i \u01b0u Dockerfile chu\u1ea9n chuy\u00ean gia<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>M\u1ed9t k\u1ecbch b\u1ea3n ch\u1ea1y \u0111\u01b0\u1ee3c \u1ee9ng d\u1ee5ng ch\u01b0a h\u1eb3n l\u00e0 m\u1ed9t k\u1ecbch b\u1ea3n t\u1ed1t. Trong m\u00f4i tr\u01b0\u1eddng doanh nghi\u1ec7p, s\u1ef1 c\u1ed3ng k\u1ec1nh v\u00e0 l\u1ed7 h\u1ed5ng b\u1ea3o m\u1eadt l\u00e0 nh\u1eefng r\u1ee7i ro ch\u00ed m\u1ea1ng. D\u01b0\u1edbi \u0111\u00e2y l\u00e0 5 quy t\u1eafc v\u00e0ng m\u00e0 c\u00e1c System Admin t\u1ea1i InterData lu\u00f4n tu\u00e2n th\u1ee7.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"1-Dung-the-Tag-cu-the-tranh-xa-%E2%80%9Clatest%E2%80%9D\"><\/span>1. D\u00f9ng th\u1ebb Tag c\u1ee5 th\u1ec3, tr\u00e1nh xa &#8220;latest&#8221;<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>InterData khuy\u00ean b\u1ea1n tuy\u1ec7t \u0111\u1ed1i kh\u00f4ng d\u00f9ng tag <code>latest<\/code> tr\u00ean m\u00f4i tr\u01b0\u1eddng Production. Phi\u00ean b\u1ea3n n\u00e0y c\u1eadp nh\u1eadt li\u00ean t\u1ee5c, khi\u1ebfn vi\u1ec7c ki\u1ec3m so\u00e1t s\u1ef1 thay \u0111\u1ed5i m\u00f4i tr\u01b0\u1eddng tr\u1edf n\u00ean b\u1ea5t kh\u1ea3 thi. H\u00f4m nay \u1ee9ng d\u1ee5ng ch\u1ea1y t\u1ed1t, nh\u01b0ng ng\u00e0y mai Base Image t\u1ef1 \u0111\u1ed9ng c\u1eadp nh\u1eadt l\u00ean b\u1ea3n m\u1edbi g\u00e2y xung \u0111\u1ed9t th\u01b0 vi\u1ec7n l\u00e0 s\u1ef1 c\u1ed1 c\u1ef1c k\u1ef3 ph\u1ed5 bi\u1ebfn. H\u00e3y d\u00f9ng phi\u00ean b\u1ea3n c\u1ed1 \u0111\u1ecbnh nh\u01b0 <code>python:3.10.12<\/code>.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"2-Su-dung-Base-Image-sieu-nho-Alpine\"><\/span>2. S\u1eed d\u1ee5ng Base Image si\u00eau nh\u1ecf (Alpine)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Thay v\u00ec d\u00f9ng h\u1ec7 \u0111i\u1ec1u h\u00e0nh Ubuntu\/Debian nguy\u00ean b\u1ea3n n\u1eb7ng n\u1ec1, h\u00e3y t\u00ecm c\u00e1c image c\u00f3 h\u1eadu t\u1ed1 <code>-alpine<\/code>. D\u1eef li\u1ec7u th\u1ef1c t\u1ebf cho th\u1ea5y, b\u1ea3n <code>node:18<\/code> m\u1eb7c \u0111\u1ecbnh ng\u1ed1n h\u01a1n 1GB dung l\u01b0\u1ee3ng, trong khi phi\u00ean b\u1ea3n <code>node:18-alpine<\/code> ch\u1ec9 chi\u1ebfm kho\u1ea3ng ~170MB. \u0110i\u1ec1u n\u00e0y kh\u00f4ng ch\u1ec9 gi\u1ea3m chi ph\u00ed l\u01b0u tr\u1eef m\u00e0 c\u00f2n thu h\u1eb9p \u0111\u00e1ng k\u1ec3 b\u1ec1 m\u1eb7t t\u1ea5n c\u00f4ng c\u1ee7a hacker.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"3-Khai-thac-toi-da-Layer-Caching\"><\/span>3. Khai th\u00e1c t\u1ed1i \u0111a Layer Caching<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Nguy\u00ean t\u1eafc v\u00e0ng: \u0110\u01b0a c\u00e1c d\u00f2ng l\u1ec7nh \u00edt b\u1ecb thay \u0111\u1ed5i l\u00ean tr\u00ean c\u00f9ng. Trong v\u00ed d\u1ee5 Node.js ph\u00eda tr\u00ean, ch\u00fang ta sao ch\u00e9p t\u1ec7p `package.json` v\u00e0 ch\u1ea1y c\u00e0i \u0111\u1eb7t th\u01b0 vi\u1ec7n tr\u01b0\u1edbc khi sao ch\u00e9p to\u00e0n b\u1ed9 m\u00e3 ngu\u1ed3n. T\u1ea1i sao? V\u00ec m\u00e3 ngu\u1ed3n c\u1ee7a b\u1ea1n thay \u0111\u1ed5i h\u00e0ng gi\u1edd, c\u00f2n danh s\u00e1ch th\u01b0 vi\u1ec7n r\u1ea5t \u00edt khi th\u00eam m\u1edbi. X\u1ebfp theo th\u1ee9 t\u1ef1 n\u00e0y gi\u00fap c\u00e1c l\u1ea7n s\u1eeda code sau kh\u00f4ng ph\u1ea3i ch\u1ea1y l\u1ea1i l\u1ec7nh <code>npm install<\/code> t\u1ed1n th\u1eddi gian.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"4-Tan-dung-Multi-stage-builds\"><\/span>4. T\u1eadn d\u1ee5ng Multi-stage builds<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>V\u1edbi c\u00e1c ng\u00f4n ng\u1eef bi\u00ean d\u1ecbch nh\u01b0 Go hay Java, b\u1ea1n c\u1ea7n SDK n\u1eb7ng n\u1ec1 \u0111\u1ec3 build m\u00e3 ngu\u1ed3n th\u00e0nh file nh\u1ecb ph\u00e2n (binary), nh\u01b0ng l\u00fac ch\u1ea1y th\u1ef1c t\u1ebf th\u00ec kh\u00f4ng c\u1ea7n ch\u00fang n\u1eefa. Multi-stage build cho ph\u00e9p s\u1eed d\u1ee5ng nhi\u1ec1u c\u00e2u l\u1ec7nh <code>FROM<\/code> trong c\u00f9ng m\u1ed9t file. B\u1ea1n d\u00f9ng m\u00f4i tr\u01b0\u1eddng &#8220;n\u1eb7ng&#8221; \u0111\u1ec3 build \u1edf giai \u0111o\u1ea1n 1, sau \u0111\u00f3 ch\u1ec9 nh\u1eb7t l\u1ea5y file th\u00e0nh ph\u1ea9m n\u00e9m sang giai \u0111o\u1ea1n 2 (m\u1ed9t m\u00f4i tr\u01b0\u1eddng si\u00eau nh\u1eb9) \u0111\u1ec3 ch\u1ea1y. C\u00e1ch t\u1ed1i \u01b0u k\u00edch th\u01b0\u1edbc Docker Image hi\u1ec7u qu\u1ea3 n\u00e0y gi\u00fap \u1ee9ng d\u1ee5ng gi\u1ea3m 90% dung l\u01b0\u1ee3ng r\u00e1c.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"5-Luon-di-kem-file-dockerignore\"><\/span>5. Lu\u00f4n \u0111i k\u00e8m file .dockerignore<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0110\u1eebng bao gi\u1edd \u0111\u1ec3 l\u1ed9 c\u00e1c th\u01b0 m\u1ee5c nh\u01b0 <code>node_modules<\/code>, <code>.git<\/code> hay c\u00e1c file bi\u1ebfn m\u00f4i tr\u01b0\u1eddng ch\u1ee9a m\u1eadt kh\u1ea9u nh\u1ea1y c\u1ea3m (.env) v\u00e0o trong Image. Kh\u1edfi t\u1ea1o m\u1ed9t t\u1ec7p <code>.dockerignore<\/code> b\u00ean c\u1ea1nh k\u1ecbch b\u1ea3n ch\u00ednh \u0111\u1ec3 gi\u1ea3m t\u1ea3i k\u00edch th\u01b0\u1edbc build context v\u00e0 ng\u0103n ch\u1eb7n r\u00f2 r\u1ec9 d\u1eef li\u1ec7u.<\/p>\n<div style=\"border-left: 4px solid #0f6cbf; background: #f0f7ff; border-radius: 0 8px 8px 0; padding: 20px 24px; margin: 40px 0; max-width: 100%;\">\n<div style=\"display: flex; align-items: center; margin-bottom: 12px;\"><span style=\"font-size: 22px; margin-right: 10px;\">\ud83d\ude80<\/span><br \/>\n<strong style=\"color: #1a3c6e; font-size: 23px; text-transform: uppercase;\">CLOUD SERVER hi\u1ec7u n\u0103ng cao \u2014 InterData<\/strong><\/div>\n<p style=\"color: #333; font-size: 14px; margin: 0 0 16px 0; line-height: 1.6;\">Khi \u1ee9ng d\u1ee5ng Docker c\u1ee7a b\u1ea1n ph\u00e1t tri\u1ec3n, ch\u1ea1y \u0111a lu\u1ed3ng ho\u1eb7c s\u1eed d\u1ee5ng ki\u1ebfn tr\u00fac Microservices ph\u1ee9c t\u1ea1p, m\u1ed9t VPS th\u00f4ng th\u01b0\u1eddng c\u00f3 th\u1ec3 tr\u1edf n\u00ean qu\u00e1 t\u1ea3i. H\u00e3y n\u00e2ng c\u1ea5p l\u00ean h\u1ea1 t\u1ea7ng linh ho\u1ea1t h\u01a1n.<\/p>\n<p style=\"color: #555; font-size: 13px; margin: 0 0 18px 0;\"><strong style=\"color: #0f6cbf;\">\u2713<\/strong> Tr\u1ea3i nghi\u1ec7m hi\u1ec7u n\u0103ng v\u01b0\u1ee3t tr\u1ed9i, \u1ed5n \u0111\u1ecbnh 99.99%<br \/>\n<strong style=\"color: #0f6cbf;\">\u2713<\/strong> D\u1ec5 d\u00e0ng scale t\u00e0i nguy\u00ean CPU\/RAM t\u1ee9c th\u00ec kh\u00f4ng gi\u00e1n \u0111o\u1ea1n<br \/>\n<strong style=\"color: #0f6cbf;\">\u2713<\/strong> B\u0103ng th\u00f4ng l\u1edbn, ho\u00e0n h\u1ea3o cho c\u00e1c c\u1ee5m container chuy\u00ean nghi\u1ec7p<\/p>\n<p><a style=\"display: inline-block; background: #0f6cbf; color: #fff; font-size: 16px; font-weight: 600; text-decoration: none; padding: 10px 22px; border-radius: 6px;\" href=\"https:\/\/interdata.vn\/cloud-server\/\" target=\"_blank\" rel=\"noopener\">Thu\u00ea Cloud Server Gi\u00e1 R\u1ebb Ngay \u2192<\/a><\/p>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"Cau-hoi-thuong-gap-ve-Dockerfile\"><\/span>C\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p v\u1ec1 Dockerfile<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"Khac-biet-giua-Dockerfile-va-docker-composeyml-la-gi\"><\/span>Kh\u00e1c bi\u1ec7t gi\u1eefa Dockerfile v\u00e0 docker-compose.yml l\u00e0 g\u00ec?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Dockerfile d\u00f9ng \u0111\u1ec3 \u0111\u00f3ng g\u00f3i m\u00e3 ngu\u1ed3n v\u00e0 m\u00f4i tr\u01b0\u1eddng th\u00e0nh m\u1ed9t Docker Image duy nh\u1ea5t. Trong khi \u0111\u00f3, t\u1ec7p yml \u0111\u1ea1i di\u1ec7n cho c\u00f4ng c\u1ee5 Docker Compose l\u00e0 m\u1ed9t b\u1ea3n thi\u1ebft k\u1ebf c\u1ea5p cao h\u01a1n. N\u00f3 c\u00f3 nhi\u1ec7m v\u1ee5 qu\u1ea3n l\u00fd, c\u1ea5u h\u00ecnh m\u1ea1ng l\u01b0\u1edbi v\u00e0 kh\u1edfi ch\u1ea1y nhi\u1ec1u container c\u00f9ng m\u1ed9t l\u00fac (v\u00ed d\u1ee5: ch\u1ea1y m\u1ed9t app React k\u1ebft n\u1ed1i li\u1ec1n m\u1ea1ch v\u1edbi database PostgreSQL).<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Mot-project-co-the-co-nhieu-Dockerfile-khong\"><\/span>M\u1ed9t project c\u00f3 th\u1ec3 c\u00f3 nhi\u1ec1u Dockerfile kh\u00f4ng?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Ho\u00e0n to\u00e0n c\u00f3 th\u1ec3. Th\u1ef1c t\u1ebf trong m\u00f4i tr\u01b0\u1eddng l\u00e0m vi\u1ec7c nh\u00f3m, c\u00e1c d\u1ef1 \u00e1n lu\u00f4n t\u00e1ch bi\u1ec7t r\u00f5 r\u00e0ng. Ng\u01b0\u1eddi ta th\u01b0\u1eddng d\u00f9ng <code>Dockerfile.dev<\/code> ch\u1ee9a c\u00f4ng c\u1ee5 debug, hot-reload cho l\u1eadp tr\u00ecnh vi\u00ean ph\u00e1t tri\u1ec3n c\u1ee5c b\u1ed9, v\u00e0 <code>Dockerfile.prod<\/code> lo\u1ea1i b\u1ecf m\u1ecdi th\u00e0nh ph\u1ea7n th\u1eeba \u0111\u1ec3 \u0111\u00f3ng g\u00f3i phi\u00ean b\u1ea3n si\u00eau nh\u1eb9 \u0111\u1ea9y l\u00ean m\u00e1y ch\u1ee7 th\u1eadt.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Lam-sao-de-build-Docker-Image-tu-Dockerfile\"><\/span>L\u00e0m sao \u0111\u1ec3 build Docker Image t\u1eeb Dockerfile?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>M\u1edf giao di\u1ec7n d\u00f2ng l\u1ec7nh, \u0111i\u1ec1u h\u01b0\u1edbng v\u00e0o \u0111\u00fang th\u01b0 m\u1ee5c ch\u1ee9a t\u1ec7p v\u00e0 g\u00f5 <code>docker build -t ten_ung_dung:v1 .<\/code> (nh\u1edb \u0111\u1eebng b\u1ecf s\u00f3t d\u1ea5u ch\u1ea5m \u1edf cu\u1ed1i). L\u1ec7nh n\u00e0y ra ch\u1ec9 th\u1ecb cho h\u1ec7 th\u1ed1ng r\u00e0 so\u00e1t \u0111\u01b0\u1eddng d\u1eabn hi\u1ec7n h\u00e0nh, \u0111\u1ecdc c\u00e1c thi\u1ebft l\u1eadp b\u1ea1n \u0111\u00e3 vi\u1ebft v\u00e0 ti\u1ebfn h\u00e0nh n\u00e9n l\u1ea1i th\u00e0nh m\u1ed9t Image mang t\u00ean &#8220;ten_ung_dung&#8221; v\u1edbi phi\u00ean b\u1ea3n &#8220;v1&#8221;.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Co-the-chay-Dockerfile-viet-tren-Linux-sang-may-Windows-khong\"><\/span>C\u00f3 th\u1ec3 ch\u1ea1y Dockerfile vi\u1ebft tr\u00ean Linux sang m\u00e1y Windows kh\u00f4ng?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0110\u00e2y ch\u00ednh l\u00e0 v\u0169 kh\u00ed m\u1ea1nh nh\u1ea5t c\u1ee7a n\u1ec1n t\u1ea3ng n\u00e0y. Th\u00e0nh ph\u1ea9m sinh ra t\u1eeb k\u1ecbch b\u1ea3n c\u1ee7a b\u1ea1n s\u1ebd kh\u1edfi ch\u1ea1y tr\u01a1n tru, bi\u1ec3u hi\u1ec7n h\u00e0nh vi y h\u1ec7t nhau tr\u00ean b\u1ea5t k\u1ef3 h\u1ec7 \u0111i\u1ec1u h\u00e0nh n\u00e0o (Windows, macOS hay Linux). B\u1ea1n ch\u1ec9 c\u1ea7n \u0111\u1ea3m b\u1ea3o m\u00e1y ch\u1ee7 \u0111\u00edch \u0111\u00e3 <a href=\"https:\/\/interdata.vn\/blog\/huong-dan-cai-dat-docker-tren-vps\/\" target=\"_blank\" rel=\"noopener\">c\u00e0i Docker tr\u00ean VPS<\/a> ho\u1eb7c m\u00e1y t\u00ednh c\u00e1 nh\u00e2n l\u00e0 \u0111\u1ee7 \u0111i\u1ec1u ki\u1ec7n v\u1eadn h\u00e0nh.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Nen-dung-base-image-nao-cho-Dockerfile\"><\/span>N\u00ean d\u00f9ng base image n\u00e0o cho Dockerfile?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>N\u00ean \u01b0u ti\u00ean tuy\u1ec7t \u0111\u1ed1i c\u00e1c b\u1ea3n ph\u00e2n ph\u1ed1i h\u1ec7 \u0111i\u1ec1u h\u00e0nh si\u00eau nh\u1ecf c\u00f3 ch\u1ee9a t\u1eeb kh\u00f3a <code>-alpine<\/code>. \u0110\u00e2y l\u00e0 phi\u00ean b\u1ea3n Linux \u0111\u00e3 \u0111\u01b0\u1ee3c tinh g\u1ecdn t\u1ed1i \u0111a (nh\u00e2n h\u1ec7 \u0111i\u1ec1u h\u00e0nh ch\u1ec9 n\u1eb7ng kho\u1ea3ng 5MB theo t\u00e0i li\u1ec7u t\u1eeb Alpine Linux). Quy\u1ebft \u0111\u1ecbnh n\u00e0y gi\u00fap ti\u1ebft ki\u1ec7m b\u0103ng th\u00f4ng t\u1ea3i xu\u1ed1ng, b\u1edbt t\u1ed1n \u1ed5 c\u1ee9ng v\u00e0 khi\u1ebfn tin t\u1eb7c kh\u00f3 t\u00ecm ra c\u00f4ng c\u1ee5 \u0111\u1ec3 khai th\u00e1c l\u1ed7 h\u1ed5ng.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Khi-nao-nen-dung-ENTRYPOINT-thay-vi-CMD\"><\/span>Khi n\u00e0o n\u00ean d\u00f9ng ENTRYPOINT thay v\u00ec CMD?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>D\u00f9ng <code>ENTRYPOINT<\/code> khi \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n b\u1eaft bu\u1ed9c ph\u1ea3i kh\u1edfi ch\u1ea1y b\u1eb1ng m\u1ed9t file c\u1ed1 \u0111\u1ecbnh v\u00e0 b\u1ea1n kh\u00f4ng mu\u1ed1n ng\u01b0\u1eddi d\u00f9ng t\u1ef1 \u00fd ghi \u0111\u00e8 ti\u1ebfn tr\u00ecnh n\u00e0y. Ng\u01b0\u1ee3c l\u1ea1i, <code>CMD<\/code> sinh ra \u0111\u1ec3 cung c\u1ea5p c\u00e1c tham s\u1ed1 m\u1eb7c \u0111\u1ecbnh d\u1ec5 b\u1ecb thay th\u1ebf. C\u00e1c nh\u00e0 ph\u00e1t tri\u1ec3n th\u01b0\u1eddng k\u1ebft h\u1ee3p c\u1ea3 hai: ENTRYPOINT \u0111\u1ec3 kh\u00f3a ch\u1eb7t \u1ee9ng d\u1ee5ng, c\u00f2n CMD ch\u1ee9a c\u00e1c c\u1edd (flags) \u0111i\u1ec1u h\u01b0\u1edbng \u0111i k\u00e8m.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Tai-sao-qua-trinh-build-Dockerfile-lai-mat-qua-nhieu-thoi-gian\"><\/span>T\u1ea1i sao qu\u00e1 tr\u00ecnh build Dockerfile l\u1ea1i m\u1ea5t qu\u00e1 nhi\u1ec1u th\u1eddi gian?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Th\u1ee7 ph\u1ea1m ch\u00ednh l\u00e0 do b\u1ea1n ch\u01b0a t\u1ed1i \u01b0u v\u1ecb tr\u00ed d\u00f2ng l\u1ec7nh ho\u1eb7c qu\u00ean m\u1ea5t vi\u1ec7c che gi\u1ea5u th\u01b0 m\u1ee5c r\u00e1c. N\u1ebfu b\u1ea1n sao ch\u00e9p to\u00e0n b\u1ed9 m\u00e3 ngu\u1ed3n (<code>COPY . .<\/code>) ngay tr\u01b0\u1edbc l\u1ec7nh c\u00e0i th\u01b0 vi\u1ec7n, b\u1ea5t k\u1ef3 thay \u0111\u1ed5i n\u00e0o d\u00f9 ch\u1ec9 l\u00e0 s\u1eeda d\u1ea5u ph\u1ea9y trong file code c\u0169ng l\u00e0m ph\u00e1 v\u1ee1 b\u1ed9 \u0111\u1ec7m (cache). M\u00e1y t\u00ednh s\u1ebd ph\u1ea3i g\u1ed3ng m\u00ecnh t\u1ea3i l\u1ea1i h\u00e0ng tr\u0103m MB th\u01b0 vi\u1ec7n t\u1eeb Internet m\u1ed9t c\u00e1ch v\u00f4 \u00edch.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Loi-%E2%80%9Cno-space-left-on-device%E2%80%9D-khi-build-la-do-dau\"><\/span>L\u1ed7i &#8220;no space left on device&#8221; khi build l\u00e0 do \u0111\u00e2u?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>S\u1ef1 c\u1ed1 n\u00e0y xu\u1ea5t hi\u1ec7n khi \u1ed5 c\u1ee9ng l\u01b0u tr\u1eef c\u1ee7a m\u00e1y t\u00ednh ho\u1eb7c server \u0111\u00e3 c\u1ea1n ki\u1ec7t dung l\u01b0\u1ee3ng. Qu\u00e1 tr\u00ecnh t\u1ea1o Image sinh ra r\u1ea5t nhi\u1ec1u l\u1edbp d\u1eef li\u1ec7u th\u1eeba, c\u00e1c b\u1ea3n nh\u00e1p kh\u00f4ng t\u00ean (dangling images) ho\u1eb7c c\u00e1c container c\u0169 \u0111\u00e3 ng\u1eebng ch\u1ea1y. Ch\u1ec9 c\u1ea7n g\u00f5 l\u1ec7nh d\u1ecdn d\u1eb9p h\u1ec7 th\u1ed1ng <code>docker system prune -a<\/code>, b\u1ea1n s\u1ebd l\u1ea5y l\u1ea1i \u0111\u01b0\u1ee3c h\u00e0ng ch\u1ee5c GB \u1ed5 c\u1ee9ng ngay l\u1eadp t\u1ee9c.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Loi-ket\"><\/span>L\u1eddi k\u1ebft<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Server c\u1ee7a b\u1ea1n l\u00e0 m\u1ed9t v\u00f9ng \u0111\u1ea5t tr\u1ed1ng. M\u1ecdi th\u1ee9 b\u00ean tr\u00ean \u2014 t\u1eeb \u1ee9ng d\u1ee5ng web, l\u01b0\u1ee3ng truy c\u1eadp, cho \u0111\u1ebfn doanh thu c\u1ee7a doanh nghi\u1ec7p \u2014 \u0111\u1ec1u \u0111\u1ee9ng v\u1eefng d\u1ef1a tr\u00ean \u0111\u1ed9 \u1ed5n \u0111\u1ecbnh c\u1ee7a n\u1ec1n m\u00f3ng \u0111\u00f3. Vi\u1ec7c hi\u1ec3u r\u00f5 Dockerfile l\u00e0 g\u00ec kh\u00f4ng ch\u1ec9 gi\u00fap b\u1ea1n ch\u1ea5m d\u1ee9t chu\u1ed7i ng\u00e0y g\u1ee1 l\u1ed7i m\u00f4i tr\u01b0\u1eddng m\u1ec7t m\u1ecfi, m\u00e0 c\u00f2n \u0111\u01b0a k\u1ef9 n\u0103ng tri\u1ec3n khai h\u1ec7 th\u1ed1ng c\u1ee7a b\u1ea1n l\u00ean c\u1ea5p \u0111\u1ed9 c\u1ee7a m\u1ed9t chuy\u00ean gia DevOps th\u1ef1c th\u1ee5.<\/p>\n<p>B\u1eb1ng c\u00e1ch n\u1eafm v\u1eefng c\u00fa ph\u00e1p n\u1ec1n t\u1ea3ng, khai th\u00e1c tri\u1ec7t \u0111\u1ec3 b\u1ed9 \u0111\u1ec7m Layer Caching v\u00e0 \u1ee9ng d\u1ee5ng Multi-stage build, b\u1ea1n ho\u00e0n to\u00e0n c\u00f3 th\u1ec3 t\u1ef1 tay t\u1ea1o ra nh\u1eefng \u1ee9ng d\u1ee5ng si\u00eau nh\u1eb9, b\u1ea3o m\u1eadt v\u00e0 ch\u1ea1y m\u01b0\u1ee3t m\u00e0 \u1edf b\u1ea5t c\u1ee9 \u0111\u00e2u. Kh\u1edfi \u0111\u1ea7u lu\u00f4n c\u1ea7n m\u00f4i tr\u01b0\u1eddng th\u1ef1c h\u00e0nh t\u1ed1t, \u0111\u1eebng qu\u00ean tham kh\u1ea3o h\u1ea1 t\u1ea7ng Cloud Server linh ho\u1ea1t t\u1ea1i InterData \u0111\u1ec3 t\u1ef1 do th\u1eed nghi\u1ec7m c\u00e1c Container do ch\u00ednh b\u1ea1n \u0111\u00f3ng g\u00f3i ngay h\u00f4m nay.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>T\u00f3m t\u1eaft nhanh: Dockerfile l\u00e0 m\u1ed9t t\u1eadp tin v\u0103n b\u1ea3n d\u1ea1ng k\u1ecbch b\u1ea3n ch\u1ee9a chu\u1ed7i c\u00e1c l\u1ec7nh li\u00ean ti\u1ebfp m\u00e0 Docker engine \u0111\u1ecdc \u0111\u1ec3 t\u1ef1 \u0111\u1ed9ng \u0111\u00f3ng g\u00f3i m\u00e3 ngu\u1ed3n, m\u00f4i tr\u01b0\u1eddng v\u00e0 th\u01b0 vi\u1ec7n th\u00e0nh m\u1ed9t Docker Image. Hi\u1ec3u \u0111\u01a1n gi\u1ea3n, n\u1ebfu \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n l\u00e0 m\u1ed9t chi\u1ebfc xe, th\u00ec file n\u00e0y ch\u00ednh<\/p>\n","protected":false},"author":2,"featured_media":41199,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[159],"tags":[],"class_list":["post-41196","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kien-thuc-docker"],"_links":{"self":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts\/41196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/comments?post=41196"}],"version-history":[{"count":3,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts\/41196\/revisions"}],"predecessor-version":[{"id":41201,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts\/41196\/revisions\/41201"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/media\/41199"}],"wp:attachment":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/media?parent=41196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/categories?post=41196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/tags?post=41196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}