[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"academy-settings":3,"nav-course-tabs":225,"blog-article-docker-la-gi-huong-dan-cho-nguoi-moi":282},{"site":4,"home":19,"footer":172,"payment":214,"promo":221},{"name":5,"tagline":6,"url":7,"logoUrl":8,"primaryColor":9,"contactEmail":10,"hotline":11,"facebookUrl":12,"youtubeUrl":13,"kungfutechUrl":14,"announcement":15},"MelyDemy","Học lập trình thực chiến từ con số 0","https:\u002F\u002Fmelydemy.io.vn","\u002Fimages\u002Fbrand\u002Flogo.svg?v=3","#dc2626","techmely.creation@gmail.com","","https:\u002F\u002Fwww.facebook.com\u002Fmelydemy.techmely\u002F","https:\u002F\u002Fwww.youtube.com\u002Fc\u002FTechMely?sub_confirmation=1","https:\u002F\u002Fkungfutech.io.vn",{"enabled":16,"text":17,"link":18},true,"Ưu đãi Mely 29k — học lập trình trọn đời chỉ từ 29.000đ","\u002Fkhoa-hoc\u002F29k",{"seo":20,"hero":26,"banners":49,"sectionCopy":60,"categories":78,"features":100,"onlyMelyDemy":117,"aboutUs":130,"testimonials":142,"newsletter":167},{"title":21,"description":22,"keywords":23},"MelyDemy - Khoá học lập trình thực chiến dành cho bạn","MelyDemy cung cấp khoá học lập trình Frontend, Backend, DevOps và AI thực chiến bằng tiếng Việt, học trọn đời chỉ từ 29.000đ.",[24,5,25],"Khoá học lập trình","Thực chiến lập trình",{"badge":27,"title":28,"highlight":29,"description":30,"primaryCta":31,"secondaryCta":34,"stats":36},"Nền tảng học lập trình #1 cho người Việt","Học kỹ năng công nghệ","thực chiến, trọn đời","Hơn 40 khoá học Frontend, Backend, DevOps và AI — video bài bản, source code đi kèm, học mọi lúc mọi nơi.",{"label":32,"to":33},"Khám phá khoá học","\u002Fkhoa-hoc",{"label":35,"to":18},"Ưu đãi 29k",[37,40,43,46],{"value":38,"label":39},"40+","Khoá học",{"value":41,"label":42},"15.000+","Học viên",{"value":44,"label":45},"4.8\u002F5","Đánh giá",{"value":47,"label":48},"Trọn đời","Truy cập",[50,56],{"badge":51,"title":52,"description":53,"link":54,"color":55},"Xu hướng 2026","Lộ trình AI thực chiến","Prompt, workflow và tích hợp công cụ — học theo bài lab, áp dụng ngay vào dự án.","\u002Fkhoa-hoc\u002Fai","#7c3aed",{"badge":57,"title":58,"description":59,"link":18,"color":9},"Mely 29k","Học lập trình từ 29.000đ","Video trọn đời, source code đi kèm — bắt đầu Frontend, Backend hoặc DevOps hôm nay.",{"courses":61,"onlyMelyDemy":64,"about":67,"community":70,"blog":74},{"title":62,"subtitle":63},"Khoá học nổi bật","Các khoá học xây dựng bài bản, đáp ứng nhu cầu thực tế của thị trường",{"title":65,"subtitle":66},"Chỉ có tại MelyDemy","Khoá học chất lượng với mức giá dễ tiếp cận nhất",{"title":68,"subtitle":69},"Lộ trình học trên MelyDemy","Ba lộ trình cốt lõi — Full-stack, DevOps và AI — giúp bạn áp dụng ngay vào dự án thực tế.",{"headline":71,"title":72,"subtitle":73},"Được học viên tin tưởng","Học viên nói gì về MelyDemy","Hàng nghìn học viên đã học lập trình thực chiến — từ sinh viên, fresher đến người chuyển ngành.",{"title":75,"subtitle":76,"listPageSubtitle":77},"Blog","Tin tức, kiến thức công nghệ mới nhất từ MelyDemy","Tổng hợp tin tức AI và công nghệ mới nhất — kiến thức thực chiến cho lập trình viên.",[79,84,88,93,97],{"label":80,"to":81,"icon":82,"color":83},"Frontend","\u002Fkhoa-hoc\u002Fkhoa-hoc-frontend","i-lucide-layout-template","#f97316",{"label":85,"to":86,"icon":87,"color":9},"Backend","\u002Fkhoa-hoc\u002Fkhoa-hoc-backend","i-lucide-server",{"label":89,"to":90,"icon":91,"color":92},"DevOps","\u002Fkhoa-hoc\u002Fkhoa-hoc-devops","i-lucide-container","#0ea5e9",{"label":94,"to":54,"icon":95,"color":96},"AI","i-lucide-sparkles","#8b5cf6",{"label":57,"to":18,"icon":98,"color":99},"i-lucide-ticket-percent","#16a34a",[101,105,109,113],{"title":102,"description":103,"icon":104},"Video trọn đời","Mua một lần, học mãi mãi — cập nhật nội dung miễn phí.","i-lucide-infinity",{"title":106,"description":107,"icon":108},"Source code đi kèm","Mỗi bài học đều có code mẫu để bạn thực hành ngay.","i-lucide-code-xml",{"title":110,"description":111,"icon":112},"Tiếng Việt dễ hiểu","Giảng viên giải thích rõ ràng, ví dụ sát dự án thật.","i-lucide-languages",{"title":114,"description":115,"icon":116},"Cộng đồng hỗ trợ","Hỏi đáp nhanh cùng cộng đồng KungFuTech và mentor.","i-lucide-users-round",[118,122,126],{"title":119,"description":120,"image":121},"Giới thiệu chương trình","\u003Cp>Học lập trình với khoá học chất lượng: video bài giảng, source code và quyền truy cập trọn đời.\u003C\u002Fp>","\u002Fimages\u002Fhome\u002F49k-section-1.jpg",{"title":123,"description":124,"image":125},"Học dễ dàng, chi phí thấp","\u003Cp>Khoá học ngắn gọn, thực tế với mức giá chỉ từ 29K. Theo dõi thường xuyên để cập nhật ưu đãi.\u003C\u002Fp>","\u002Fimages\u002Fhome\u002F49k-section-2.jpg",{"title":127,"description":128,"image":129},"Chọn khoá học và bắt đầu","\u003Cp>Khám phá khoá học Frontend, Backend, DevOps, Mobile và AI — bắt đầu hành trình của bạn hôm nay.\u003C\u002Fp>","\u002Fimages\u002Fhome\u002F49k-section-3.jpg",[131,136,139],{"title":132,"description":133,"icon":134,"image":135},"Backend & Frontend","Xây dựng ứng dụng web từ giao diện đến hệ thống phía sau với công nghệ hiện đại.","i-lucide-layers","\u002Fimages\u002Fhome\u002Fabout-track-1.jpg",{"title":89,"description":137,"icon":91,"image":138},"Triển khai, vận hành và tối ưu hệ thống để ứng dụng chạy ổn định, mở rộng dễ dàng.","\u002Fimages\u002Fhome\u002Fabout-track-2.jpg",{"title":94,"description":140,"icon":95,"image":141},"Xây dựng ứng dụng tích hợp AI, tự động hoá workflow và phát triển sản phẩm thông minh.","\u002Fimages\u002Fhome\u002Fabout-track-3.jpg",[143,147,151,155,159,163],{"fullname":144,"role":145,"description":146},"Nguyễn Minh Anh","Sinh viên CNTT — Đại học Bách Khoa TP.HCM","Rất nhiều khoá học bổ ích từ Frontend, Backend đến DevOps — mình chọn lộ trình phù hợp mà không bị lạc. Video và source trọn đời, ôn lại rất tiện.",{"fullname":148,"role":149,"description":150},"Trần Hoàng Nam","Kế toán chuyển ngành IT — Hà Nội","Khoá AI giúp mình hiểu prompt, workflow và cách tích hợp công cụ vào việc học code hằng ngày. Bài ngắn, học buổi tối không bị quá tải.",{"fullname":152,"role":153,"description":154},"Lê Thị Hương","Fresher Frontend — FPT Software Đà Nẵng","Khoá TypeScript làm rõ type, interface và cách refactor code cũ — mình tự tin review PR và làm task trong dự án thật.",{"fullname":156,"role":157,"description":158},"Phạm Quốc Bảo","Kỹ sư cơ khí — tự học lập trình buổi tối","Lộ trình DevOps (CI\u002FCD, Docker) giúp mình hiểu pipeline deploy thay vì chỉ code local. Checklist từng tuần giữ nhịp học ổn định.",{"fullname":160,"role":161,"description":162},"Võ Thanh Tú","Intern Backend — startup tại TP.HCM","Khoá Node.js và thiết kế API giúp mình nắm REST, validation và database qua bài lab thực tế. Slide đính kèm tiện ôn phỏng vấn.",{"fullname":164,"role":165,"description":166},"Đặng Kim Ngân","Designer chuyển sang UI Developer","Khoá HTML\u002FCSS Grid & Flexbox giúp mình chuyển layout Figma sang markup chuẩn, responsive đúng spec.",{"title":168,"description":169,"placeholder":170,"buttonLabel":171},"Nhận tin khoá học & ưu đãi","Đăng ký email để cập nhật lộ trình mới, workshop và chương trình Mely 29k.","Email của bạn","Đăng ký",{"brandLine":173,"description":174,"columns":175},"MELYDEMY — Học lập trình từ con số 0","Nền tảng khoá học lập trình thực chiến thuộc hệ sinh thái KungFuTech.",[176,184,204],{"title":39,"links":177},[178,180,182],{"label":179,"to":33},"Tất cả khoá học",{"label":181,"to":18},"Ưu đãi Mely 29k",{"label":183,"to":54},"Khoá học AI",{"title":185,"links":186},"Tài nguyên",[187,189,192,195,198,201],{"label":75,"to":188},"\u002Fblog",{"label":190,"to":191},"Giới thiệu","\u002Fgioi-thieu",{"label":193,"to":194},"Liên hệ","\u002Flien-he",{"label":196,"to":197},"Câu hỏi thường gặp","\u002Fcau-hoi-thuong-gap",{"label":199,"to":200},"Điều khoản","\u002Fterms-and-conditions",{"label":202,"to":203},"Chính sách bảo mật","\u002Fprivacy-policy",{"title":205,"links":206},"Hệ sinh thái",[207,209,212],{"label":208,"href":14},"KungFuTech",{"label":210,"href":211},"TechMely YouTube","https:\u002F\u002Fwww.youtube.com\u002Fc\u002FTechMely",{"label":213,"href":12},"Facebook MelyDemy",{"bankName":215,"bankCode":216,"accountNumber":217,"accountName":218,"qrTemplate":219,"note":220},"MB Bank","MBBank","0680126400005","PHAM NGOC HOA","https:\u002F\u002Fqr.sepay.vn\u002Fimg?acc={accountNumber}&bank={bankCode}&amount={amount}&des={paymentCode}","Khoá học sẽ được gửi vào email của bạn sau khi thanh toán thành công.",{"promo49k":222},{"enabled":16,"displayPrice":223,"title":57,"description":224},29000,"Học lập trình trọn đời chỉ từ 29.000đ",[226,238,249,260,272],{"id":227,"name":228,"slug":229,"title":24,"canonicalSlug":230,"heroDescription":231,"seoTitle":232,"seoDescription":233,"intro":234},1,"Tất cả các khóa học","tat-ca",null,"Khám phá lộ trình Frontend, Backend, DevOps và AI — học thực chiến với video trọn đời.","Khoá học lập trình online tiếng Việt | MelyDemy","Học lập trình online cùng MelyDemy: khoá Frontend, Backend, DevOps và AI thực chiến bằng tiếng Việt, video xem trọn đời, kèm source code dự án.",[235,236,237],"MelyDemy là nền tảng khoá học lập trình bằng video tiếng Việt, tập trung vào kỹ năng làm được việc: mỗi khoá đi từ kiến thức nền tảng đến dự án thực tế, có source code đi kèm để bạn thực hành theo từng bài.","Danh mục gồm bốn nhóm chính. Frontend dành cho người muốn xây giao diện web với HTML, CSS, JavaScript, ReactJS hay Next.js. Backend dạy lập trình API, cơ sở dữ liệu và kiến trúc hệ thống với nhiều ngôn ngữ và framework. DevOps hướng dẫn Docker, CI\u002FCD, cloud và vận hành hệ thống. Nhóm AI giúp bạn dùng các công cụ và agent AI để tăng năng suất làm việc.","Bạn có thể lọc theo nhóm hoặc tìm theo tên công nghệ. Khoá học được mua một lần và xem lại không giới hạn thời gian, phù hợp cho cả người mới bắt đầu lẫn lập trình viên muốn mở rộng kỹ năng. Nếu chưa biết nên bắt đầu từ đâu, hãy chọn nhóm Frontend hoặc Backend và xem phần nội dung chi tiết của từng khoá để đánh giá độ phù hợp.",{"id":239,"name":85,"slug":240,"title":85,"canonicalSlug":241,"heroDescription":242,"seoTitle":243,"seoDescription":244,"intro":245},2,"khoa-hoc-backend","backend","API, database và kiến trúc hệ thống — từ nền tảng đến dự án thực tế.","Khoá học lập trình Backend online | MelyDemy","Học lập trình Backend bằng tiếng Việt: xây dựng API, làm việc với cơ sở dữ liệu và thiết kế hệ thống qua các khoá video thực chiến tại MelyDemy.",[246,247,248],"Lập trình Backend là phần xử lý đằng sau mọi ứng dụng: nhận yêu cầu từ giao diện, xử lý nghiệp vụ, lưu và truy vấn dữ liệu rồi trả kết quả về cho người dùng. Các khoá Backend tại MelyDemy hướng dẫn bạn xây dựng API, làm việc với cơ sở dữ liệu quan hệ và NoSQL, xác thực người dùng và triển khai ứng dụng.","Mỗi khoá bắt đầu từ nền tảng ngôn ngữ và framework, sau đó đi tới các chủ đề thực tế như thiết kế REST API, tối ưu truy vấn, bảo mật và kiểm thử. Bạn học qua video, làm theo source code và hoàn thành dự án cuối khoá để có sản phẩm đưa vào hồ sơ.","Hãy chọn ngôn ngữ phù hợp với mục tiêu công việc của bạn, xem nội dung từng chương trong trang khoá học rồi bắt đầu học theo tốc độ riêng. Học viên có thể xem lại bài giảng không giới hạn thời gian.",{"id":250,"name":80,"slug":251,"title":80,"canonicalSlug":252,"heroDescription":253,"seoTitle":254,"seoDescription":255,"intro":256},3,"khoa-hoc-frontend","frontend","HTML, CSS, JavaScript và framework hiện đại — xây giao diện responsive chuẩn doanh nghiệp.","Khoá học lập trình Frontend online | MelyDemy","Học Frontend bằng tiếng Việt: HTML, CSS, JavaScript, ReactJS, Next.js và nhiều hơn nữa, xây giao diện responsive qua khoá video thực chiến tại MelyDemy.",[257,258,259],"Lập trình Frontend là kỹ năng xây dựng phần giao diện người dùng nhìn thấy và tương tác trên web. Các khoá Frontend tại MelyDemy đi từ HTML, CSS và JavaScript nền tảng đến các framework hiện đại như ReactJS và Next.js, giúp bạn dựng giao diện responsive đạt chuẩn doanh nghiệp.","Nội dung nhấn mạnh thực hành: bạn xây dựng từng thành phần giao diện, quản lý trạng thái, gọi API, tối ưu hiệu năng và SEO, rồi hoàn thiện một dự án hoàn chỉnh. Source code được cung cấp để bạn đối chiếu và tự chỉnh sửa.","Nếu mới bắt đầu, hãy học chắc JavaScript trước khi chuyển sang framework. Nếu đã có nền tảng, bạn có thể chọn thẳng khoá ReactJS hoặc Next.js. Xem mục nội dung trong từng khoá để biết chính xác bạn sẽ học những gì.",{"id":261,"name":262,"slug":263,"title":262,"canonicalSlug":264,"heroDescription":265,"seoTitle":266,"seoDescription":267,"intro":268},4,"Devops","khoa-hoc-devops","devops","CI\u002FCD, container và vận hành hệ thống — triển khai ổn định, mở rộng dễ dàng.","Khoá học DevOps online tiếng Việt | MelyDemy","Học DevOps bằng tiếng Việt: Docker, CI\u002FCD, cloud và vận hành hệ thống qua các khoá video thực chiến, giúp triển khai ứng dụng ổn định tại MelyDemy.",[269,270,271],"DevOps kết nối phát triển và vận hành: tự động hoá việc build, kiểm thử, triển khai và giám sát để phần mềm được đưa đến người dùng nhanh và ổn định hơn. Các khoá DevOps tại MelyDemy hướng dẫn bạn làm quen với Linux, container, pipeline CI\u002FCD và hạ tầng đám mây.","Bạn sẽ thực hành trực tiếp: đóng gói ứng dụng bằng Docker, thiết lập quy trình tự động triển khai, quản lý cấu hình và theo dõi hệ thống khi chạy thật. Mỗi bài đều đi kèm ví dụ có thể làm lại trên máy hoặc máy chủ của bạn.","Nhóm khoá này phù hợp với lập trình viên muốn tự triển khai sản phẩm của mình, hoặc người muốn chuyển hướng sang vai trò DevOps và cloud. Hãy xem nội dung chi tiết từng khoá để chọn lộ trình phù hợp.",{"id":273,"name":94,"slug":274,"title":94,"canonicalSlug":274,"heroDescription":275,"seoTitle":276,"seoDescription":277,"intro":278},5,"ai","Prompt, workflow và tích hợp công cụ AI — học theo bài lab, áp dụng ngay vào dự án.","Khoá học AI ứng dụng cho lập trình | MelyDemy","Học AI ứng dụng bằng tiếng Việt: prompt, workflow tự động và agent AI qua các bài lab thực hành, áp dụng ngay vào công việc và dự án tại MelyDemy.",[279,280,281],"Các khoá AI tại MelyDemy tập trung vào việc ứng dụng: dùng công cụ AI để viết code nhanh hơn, tự động hoá công việc lặp lại và xây dựng agent hỗ trợ công việc hằng ngày, thay vì chỉ giải thích lý thuyết.","Bạn sẽ học cách viết prompt hiệu quả, thiết kế workflow kết nối nhiều công cụ, tự host agent trên máy chủ riêng và tích hợp AI vào quy trình phát triển phần mềm. Mỗi chủ đề có bài lab để bạn làm theo và áp dụng được ngay.","Nhóm khoá này phù hợp với lập trình viên, người làm nội dung và bất kỳ ai muốn tăng năng suất bằng AI. Hãy xem phần nội dung từng khoá để biết công cụ và kết quả bạn sẽ đạt được.",{"id":283,"slug":284,"title":285,"excerpt":286,"createdAt":287,"updatedAt":287,"category":288,"thumbnail":290,"content":291,"head":292,"author":298,"image":301,"same_category":302,"sameCategory":351},"7c434cb2-05ed-4956-8b5c-a72eac7b2d64","docker-la-gi-huong-dan-cho-nguoi-moi","Docker là gì? Image, container và Docker Compose","Docker là gì, khác máy ảo ra sao, các khái niệm image, container, Dockerfile, Compose và ví dụ chạy ứng dụng đầu tiên.","2026-11-03T15:03:45",{"name":75,"slug":289,"description":11},"blog",{"url":11,"alt":285},"\u003Cp>\u003Cstrong>Docker là gì?\u003C\u002Fstrong> Docker là nền tảng giúp đóng gói ứng dụng cùng toàn bộ thư viện, cấu hình và môi trường cần thiết vào một đơn vị gọi là \u003Cstrong>container\u003C\u002Fstrong>. Nhờ vậy ứng dụng chạy giống nhau trên máy lập trình viên, máy kiểm thử và máy chủ thật, giải quyết tình huống quen thuộc “máy em chạy được mà”. Bài viết giải thích các khái niệm image, container, Dockerfile, Docker Compose và hướng dẫn chạy ứng dụng đầu tiên.\u003C\u002Fp>\n\n\u003Ch2>Vì sao cần Docker?\u003C\u002Fh2>\n\u003Cp>Trước khi có container, việc cài một ứng dụng lên server thường gồm nhiều bước thủ công: cài đúng phiên bản ngôn ngữ, cài thư viện hệ thống, cấu hình biến môi trường, cài database… Chỉ cần lệch một phiên bản là ứng dụng có thể lỗi. Docker giải quyết các vấn đề sau:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Môi trường nhất quán:\u003C\u002Fstrong> mọi thứ ứng dụng cần được mô tả trong một file và đóng gói cùng nhau.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Cài đặt nhanh:\u003C\u002Fstrong> người mới vào dự án chỉ cần vài lệnh để chạy toàn bộ hệ thống.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Cô lập:\u003C\u002Fstrong> nhiều ứng dụng dùng các phiên bản khác nhau (ví dụ Node 18 và Node 22) vẫn chạy song song trên cùng một máy.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Dễ triển khai và mở rộng:\u003C\u002Fstrong> container là nền tảng của các hệ thống như Kubernetes và các dịch vụ cloud hiện đại.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>Docker khác máy ảo (VM) như thế nào?\u003C\u002Fh2>\n\u003Cp>Máy ảo giả lập toàn bộ một máy tính, bao gồm cả hệ điều hành riêng. Container thì dùng chung nhân (kernel) hệ điều hành của máy chủ và chỉ đóng gói phần ứng dụng cần.\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\u003Ctr>\u003Cth>Tiêu chí\u003C\u002Fth>\u003Cth>Máy ảo (VM)\u003C\u002Fth>\u003Cth>Container (Docker)\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>Hệ điều hành\u003C\u002Ftd>\u003Ctd>Mỗi VM có một hệ điều hành đầy đủ\u003C\u002Ftd>\u003Ctd>Dùng chung kernel của máy chủ\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Kích thước\u003C\u002Ftd>\u003Ctd>Thường hàng GB\u003C\u002Ftd>\u003Ctd>Thường nhỏ hơn nhiều, có thể chỉ vài chục MB\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Thời gian khởi động\u003C\u002Ftd>\u003Ctd>Tính bằng phút\u003C\u002Ftd>\u003Ctd>Thường chỉ vài giây\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Mức độ cô lập\u003C\u002Ftd>\u003Ctd>Rất cao\u003C\u002Ftd>\u003Ctd>Cao, nhưng thấp hơn VM\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Dùng khi\u003C\u002Ftd>\u003Ctd>Cần hệ điều hành khác hẳn, cô lập tuyệt đối\u003C\u002Ftd>\u003Ctd>Đóng gói và triển khai ứng dụng\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>Trong thực tế, hai công nghệ thường dùng cùng nhau: các máy chủ cloud là máy ảo, và trên đó chạy nhiều container.\u003C\u002Fp>\n\n\u003Ch2>Các khái niệm cốt lõi\u003C\u002Fh2>\n\u003Ch3>Image\u003C\u002Fh3>\n\u003Cp>Image là “bản mẫu” chỉ đọc chứa hệ điều hành tối giản, runtime, thư viện và mã nguồn ứng dụng. Image được xây dựng theo từng lớp (layer); lớp nào không đổi sẽ được dùng lại từ cache giúp build nhanh hơn.\u003C\u002Fp>\n\u003Ch3>Container\u003C\u002Fh3>\n\u003Cp>Container là một phiên bản đang chạy của image. Từ một image bạn có thể chạy nhiều container. Có thể hình dung image giống như class, còn container giống như object trong lập trình.\u003C\u002Fp>\n\u003Ch3>Dockerfile\u003C\u002Fh3>\n\u003Cp>Dockerfile là file văn bản mô tả từng bước tạo image: dùng image gốc nào, copy file gì, cài thư viện nào, chạy lệnh gì khi khởi động.\u003C\u002Fp>\n\u003Ch3>Registry và Docker Hub\u003C\u002Fh3>\n\u003Cp>Registry là nơi lưu trữ và chia sẻ image. Docker Hub là registry công khai phổ biến nhất, chứa image chính thức của nhiều phần mềm như Node.js, Python, MySQL, Nginx.\u003C\u002Fp>\n\u003Ch3>Volume và network\u003C\u002Fh3>\n\u003Cp>Dữ liệu bên trong container sẽ mất khi container bị xoá. \u003Cstrong>Volume\u003C\u002Fstrong> giúp lưu dữ liệu bền vững (ví dụ dữ liệu database). \u003Cstrong>Network\u003C\u002Fstrong> cho phép các container giao tiếp với nhau bằng tên dịch vụ.\u003C\u002Fp>\n\n\u003Ch2>Cài đặt Docker\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>Windows và macOS:\u003C\u002Fstrong> cài Docker Desktop từ trang chính thức docker.com. Trên Windows nên bật WSL 2.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Linux:\u003C\u002Fstrong> cài Docker Engine theo hướng dẫn trong tài liệu chính thức cho từng bản phân phối.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Kiểm tra cài đặt bằng lệnh:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>docker --version\ndocker run hello-world\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch2>Ví dụ: đóng gói ứng dụng Node.js\u003C\u002Fh2>\n\u003Cp>Giả sử bạn có một ứng dụng Express với file \u003Ccode>package.json\u003C\u002Fcode> và \u003Ccode>index.js\u003C\u002Fcode>. Tạo file \u003Ccode>Dockerfile\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>FROM node:22-alpine\nWORKDIR \u002Fapp\nCOPY package*.json .\u002F\nRUN npm ci --omit=dev\nCOPY . .\nEXPOSE 3000\nCMD [\"node\", \"index.js\"]\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Build và chạy:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>docker build -t my-app .\ndocker run -d -p 3000:3000 --name my-app my-app\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Truy cập \u003Ccode>http:\u002F\u002Flocalhost:3000\u003C\u002Fcode> để xem kết quả. Lệnh \u003Ccode>-p 3000:3000\u003C\u002Fcode> ánh xạ cổng 3000 của máy bạn vào cổng 3000 của container.\u003C\u002Fp>\n\u003Cp>Nên tạo thêm file \u003Ccode>.dockerignore\u003C\u002Fcode> để loại bỏ \u003Ccode>node_modules\u003C\u002Fcode>, \u003Ccode>.git\u003C\u002Fcode> và file \u003Ccode>.env\u003C\u002Fcode> khỏi image, giúp image nhỏ hơn và không lộ thông tin bí mật.\u003C\u002Fp>\n\n\u003Ch2>Docker Compose là gì?\u003C\u002Fh2>\n\u003Cp>Ứng dụng thực tế thường gồm nhiều thành phần: backend, database, cache. Docker Compose cho phép mô tả tất cả trong một file \u003Ccode>compose.yaml\u003C\u002Fcode> và khởi động chỉ bằng một lệnh.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>services:\n  app:\n    build: .\n    ports:\n      - \"3000:3000\"\n    environment:\n      DB_HOST: db\n    depends_on:\n      - db\n  db:\n    image: mysql:8\n    environment:\n      MYSQL_ROOT_PASSWORD: example\n      MYSQL_DATABASE: app\n    volumes:\n      - db-data:\u002Fvar\u002Flib\u002Fmysql\nvolumes:\n  db-data:\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cpre>\u003Ccode>docker compose up -d\ndocker compose logs -f app\ndocker compose down\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Trong ví dụ trên, ứng dụng kết nối tới database bằng tên dịch vụ \u003Ccode>db\u003C\u002Fcode> thay vì địa chỉ IP. Mật khẩu chỉ dùng để thử nghiệm; trong dự án thật hãy dùng file \u003Ccode>.env\u003C\u002Fcode> hoặc cơ chế quản lý secret.\u003C\u002Fp>\n\n\u003Ch2>Các lệnh Docker hay dùng\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\u003Ctr>\u003Cth>Lệnh\u003C\u002Fth>\u003Cth>Tác dụng\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Ccode>docker ps\u003C\u002Fcode> \u002F \u003Ccode>docker ps -a\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>Liệt kê container đang chạy \u002F tất cả\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Ccode>docker images\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>Liệt kê image\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Ccode>docker logs -f &lt;tên&gt;\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>Xem log của container\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Ccode>docker exec -it &lt;tên&gt; sh\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>Mở shell bên trong container\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Ccode>docker stop\u003C\u002Fcode> \u002F \u003Ccode>docker rm\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>Dừng \u002F xoá container\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Ccode>docker rmi\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>Xoá image\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Ccode>docker system prune\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>Dọn tài nguyên không dùng (cẩn thận khi chạy)\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n\u003Ch2>Best practice khi viết Dockerfile\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>Dùng image gốc chính thức và nhỏ gọn (ví dụ bản \u003Ccode>alpine\u003C\u002Fcode> hoặc \u003Ccode>slim\u003C\u002Fcode>), ghi rõ phiên bản thay vì \u003Ccode>latest\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Copy file khai báo thư viện trước, cài thư viện, sau đó mới copy mã nguồn để tận dụng cache.\u003C\u002Fli>\n\u003Cli>Dùng multi-stage build để tách bước build và bước chạy, giúp image cuối nhỏ hơn.\u003C\u002Fli>\n\u003Cli>Không chạy ứng dụng bằng user root khi không cần thiết.\u003C\u002Fli>\n\u003Cli>Không đưa mật khẩu, API key vào Dockerfile hay image.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>Sau Docker nên học gì?\u003C\u002Fh2>\n\u003Cp>Khi đã quen Docker, bước tiếp theo thường là học cách vận hành nhiều container trên nhiều máy với \u003Ca href=\"\u002Fblog\u002Fkubernetes-la-gi\">Kubernetes\u003C\u002Fa>, tự động build và deploy với CI\u002FCD, và giám sát hệ thống. Toàn bộ con đường này được trình bày trong bài \u003Ca href=\"\u002Fblog\u002Flo-trinh-hoc-devops\">lộ trình học DevOps\u003C\u002Fa>. Nếu bạn là lập trình viên web, Docker cũng là một phần của giai đoạn deploy trong \u003Ca href=\"\u002Fblog\u002Flo-trinh-hoc-lap-trinh-web-cho-nguoi-moi\">lộ trình học lập trình web\u003C\u002Fa>.\u003C\u002Fp>\n\n\u003Ch2>Multi-stage build: image nhỏ và an toàn hơn\u003C\u002Fh2>\n\u003Cp>Với ứng dụng cần bước build (React, Next.js, TypeScript, Go, Java), multi-stage build cho phép dùng một image đầy đủ công cụ để build, rồi chỉ copy kết quả sang một image gọn để chạy:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>FROM node:22-alpine AS build\nWORKDIR \u002Fapp\nCOPY package*.json .\u002F\nRUN npm ci\nCOPY . .\nRUN npm run build\n\nFROM nginx:1.27-alpine\nCOPY --from=build \u002Fapp\u002Fdist \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\nEXPOSE 80\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Image cuối chỉ chứa Nginx và file tĩnh đã build, không có mã nguồn, \u003Ccode>node_modules\u003C\u002Fcode> hay công cụ build. Kết quả là image nhẹ hơn, deploy nhanh hơn và bề mặt tấn công nhỏ hơn.\u003C\u002Fp>\n\n\u003Ch2>Debug container khi có lỗi\u003C\u002Fh2>\n\u003Cp>Khi container không chạy như mong đợi, hãy kiểm tra theo thứ tự:\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cstrong>Xem log:\u003C\u002Fstrong> \u003Ccode>docker logs &lt;tên&gt;\u003C\u002Fcode>, đa số lỗi (thiếu biến môi trường, sai cổng, không kết nối được database) hiện ngay ở đây.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Kiểm tra trạng thái:\u003C\u002Fstrong> \u003Ccode>docker ps -a\u003C\u002Fcode> để xem container có bị thoát (Exited) và mã thoát là gì.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Vào bên trong:\u003C\u002Fstrong> \u003Ccode>docker exec -it &lt;tên&gt; sh\u003C\u002Fcode> để kiểm tra file, biến môi trường, thử gọi dịch vụ khác.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Kiểm tra cấu hình:\u003C\u002Fstrong> \u003Ccode>docker inspect &lt;tên&gt;\u003C\u002Fcode> để xem cổng, volume, network thực tế.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Kiểm tra mạng:\u003C\u002Fstrong> trong Compose, các dịch vụ gọi nhau bằng tên dịch vụ, không phải \u003Ccode>localhost\u003C\u002Fcode>. Đây là lỗi rất phổ biến của người mới.\u003C\u002Fli>\n\u003C\u002Fol>\n\n\u003Ch2>Câu hỏi thường gặp\u003C\u002Fh2>\n\u003Ch3>Docker có miễn phí không?\u003C\u002Fh3>\n\u003Cp>Docker Engine là mã nguồn mở và miễn phí. Docker Desktop miễn phí cho cá nhân, giáo dục và doanh nghiệp nhỏ; doanh nghiệp lớn cần xem điều khoản giấy phép trên trang chính thức.\u003C\u002Fp>\n\u003Ch3>Docker có chạy được trên Windows không?\u003C\u002Fh3>\n\u003Cp>Có, thông qua Docker Desktop kết hợp WSL 2. Phần lớn container phổ biến là container Linux.\u003C\u002Fp>\n\u003Ch3>Docker và Kubernetes khác nhau thế nào?\u003C\u002Fh3>\n\u003Cp>Docker dùng để tạo và chạy container. Kubernetes dùng để điều phối nhiều container trên nhiều máy: tự khởi động lại khi lỗi, mở rộng số lượng, cân bằng tải.\u003C\u002Fp>\n\u003Ch3>Lập trình viên frontend có cần học Docker không?\u003C\u002Fh3>\n\u003Cp>Không bắt buộc, nhưng biết Docker cơ bản giúp bạn chạy backend và database của dự án dễ dàng mà không phải cài thủ công.\u003C\u002Fp>\n\u003Ch3>Dữ liệu trong container có bị mất không?\u003C\u002Fh3>\n\u003Cp>Dữ liệu ghi bên trong container sẽ mất khi xoá container. Hãy dùng volume cho dữ liệu cần lưu lâu dài như database.\u003C\u002Fp>\n\n\u003Ch2>Kết luận\u003C\u002Fh2>\n\u003Cp>Docker giúp đóng gói ứng dụng thành container chạy nhất quán ở mọi nơi và đã trở thành kỹ năng cơ bản của lập trình viên backend lẫn DevOps. Hãy bắt đầu bằng việc đóng gói một ứng dụng nhỏ của chính bạn, sau đó thử Docker Compose với database. Nếu muốn học bài bản, tham khảo \u003Ca href=\"\u002Fkhoa-hoc\u002Fkhoa-hoc-docker\">khoá học Docker: container hoá ứng dụng\u003C\u002Fa> và tiếp theo là \u003Ca href=\"\u002Fkhoa-hoc\u002Fkhoa-hoc-kubernetes\">khoá học Kubernetes\u003C\u002Fa>.\u003C\u002Fp>\n",{"description":286,"keywords":293},[294,295,296,294,297],"Docker","Image,","container","Compose",{"fullname":299,"avatar":11,"position":300,"quote":11},"Mely Demy","Editor",{"url":11,"alt":285},[303,311,319,327,335,343],{"id":304,"slug":305,"title":306,"excerpt":307,"createdAt":308,"updatedAt":308,"category":309,"thumbnail":310},"9aa1bf78-82ec-4bf0-b0ff-7b0a7bf4b22a","hoc-ai-bat-dau-tu-dau","Học AI bắt đầu từ đâu? Lộ trình cho dev và người mới","Lộ trình học AI: dùng công cụ AI, Python, toán nền, machine learning, deep learning, LLM và AI agent.","2026-11-03T15:09:31",{"name":75,"slug":289,"description":11},{"url":11,"alt":306},{"id":312,"slug":313,"title":314,"excerpt":315,"createdAt":316,"updatedAt":316,"category":317,"thumbnail":318},"f3ad15b5-1753-46e0-ab87-ab9f767c8030","chung-chi-aws-nen-thi-cai-nao","Chứng chỉ AWS nên thi cái nào? Lộ trình từ cơ bản","So sánh Cloud Practitioner, Solutions Architect Associate\u002FProfessional, Developer Associate; lộ trình và cách ôn.","2026-11-03T15:09:08",{"name":75,"slug":289,"description":11},{"url":11,"alt":314},{"id":320,"slug":321,"title":322,"excerpt":323,"createdAt":324,"updatedAt":324,"category":325,"thumbnail":326},"d7e50156-ec43-4afc-b097-1979e02e8d8a","typescript-la-gi","TypeScript là gì? Vì sao dev JavaScript nên học","TypeScript là gì, khác JavaScript thế nào, kiểu dữ liệu, interface, generic và cách dùng với React.","2026-11-03T15:08:43",{"name":75,"slug":289,"description":11},{"url":11,"alt":322},{"id":328,"slug":329,"title":330,"excerpt":331,"createdAt":332,"updatedAt":332,"category":333,"thumbnail":334},"f6d8e6c9-7289-4c91-a5f5-f5f66c9bc5dc","kubernetes-la-gi","Kubernetes là gì? Pod, Node, Service giải thích dễ hiểu","Kubernetes (K8s) là gì, khi nào cần, các khái niệm pod, node, deployment, service và so với Docker.","2026-11-03T15:08:20",{"name":75,"slug":289,"description":11},{"url":11,"alt":330},{"id":336,"slug":337,"title":338,"excerpt":339,"createdAt":340,"updatedAt":340,"category":341,"thumbnail":342},"59f770d8-1fad-4707-99e0-780fc7b997e1","lo-trinh-hoc-devops","Lộ trình học DevOps bắt đầu từ đâu cho người mới","DevOps bắt đầu từ đâu: Linux, Git, Docker, CI\u002FCD, Kubernetes, cloud AWS và giám sát với Grafana.","2026-11-03T15:07:57",{"name":75,"slug":289,"description":11},{"url":11,"alt":338},{"id":344,"slug":345,"title":346,"excerpt":347,"createdAt":348,"updatedAt":348,"category":349,"thumbnail":350},"94151f16-08e8-47d6-95f1-599aeceaec4c","hoc-sql-co-ban","Học SQL cơ bản: SELECT, JOIN, GROUP BY kèm ví dụ","SQL cơ bản cho người mới: truy vấn, lọc, JOIN, GROUP BY, index và bài tập với MySQL.","2026-11-03T15:07:33",{"name":75,"slug":289,"description":11},{"url":11,"alt":346},[352,355,358,361,364,367],{"id":304,"slug":305,"title":306,"excerpt":307,"createdAt":308,"updatedAt":308,"category":353,"thumbnail":354},{"name":75,"slug":289,"description":11},{"url":11,"alt":306},{"id":312,"slug":313,"title":314,"excerpt":315,"createdAt":316,"updatedAt":316,"category":356,"thumbnail":357},{"name":75,"slug":289,"description":11},{"url":11,"alt":314},{"id":320,"slug":321,"title":322,"excerpt":323,"createdAt":324,"updatedAt":324,"category":359,"thumbnail":360},{"name":75,"slug":289,"description":11},{"url":11,"alt":322},{"id":328,"slug":329,"title":330,"excerpt":331,"createdAt":332,"updatedAt":332,"category":362,"thumbnail":363},{"name":75,"slug":289,"description":11},{"url":11,"alt":330},{"id":336,"slug":337,"title":338,"excerpt":339,"createdAt":340,"updatedAt":340,"category":365,"thumbnail":366},{"name":75,"slug":289,"description":11},{"url":11,"alt":338},{"id":344,"slug":345,"title":346,"excerpt":347,"createdAt":348,"updatedAt":348,"category":368,"thumbnail":369},{"name":75,"slug":289,"description":11},{"url":11,"alt":346}]