docker
docker
docker đóng gói ứng dụng KÈM cả môi trường chạy của nó, để câu "máy tôi chạy được mà" thôi là một câu vô nghĩa. Bốn chặng, đi từ dùng đồ người khác tới tự đóng gói và đưa lên thật.
15 cột mốc · 0 có bài trong app
Bắt đầu
1Chạy thử đồ của người khác
Dựng được Postgres, Redis, hay bất cứ thứ gì, mà không cài gì lên máy.
- image khác containertự tìm hiểuImage là bản đúc, container là thứ đang chạy đúc ra từ nó. Nhầm hai cái này là nhầm mọi thứ về sau.
- docker runtự tìm hiểuKéo image về rồi chạy. -p nối cổng ra máy thật, -e truyền biến môi trường vào trong.
- ps · logs · exectự tìm hiểuXem cái gì đang chạy, nó in ra gì, và chui hẳn vào bên trong nó bằng một shell.
- Vòng đời containertự tìm hiểuDừng KHÔNG phải là xoá. Container đã dừng vẫn nằm đó chiếm chỗ cho tới khi bị rm.
2Tự đóng gói
Biến chính ứng dụng của bạn thành một image chạy được ở bất cứ đâu.
- Dockerfiletự tìm hiểuCông thức đúc image: bắt đầu từ nền nào, chép gì vào, chạy lệnh gì khi khởi động.
- Layer và cachetự tìm hiểuMỗi dòng là một lớp. Đặt sai thứ tự thì mỗi lần sửa một dòng code là cài lại toàn bộ thư viện.
- build · tagtự tìm hiểuĐặt tên và phiên bản cho image. Cùng một cái tên mà nội dung khác nhau là nguồn của rất nhiều đêm mất ngủ.
- .dockerignoretự tìm hiểuKhông chép node_modules và .git vào image. Cùng lý do với .gitignore, khác chỗ áp dụng.
3Nhiều container cùng sống
Web + database + cache chạy cạnh nhau, gọi được nhau, và dữ liệu không bốc hơi.
- Volumetự tìm hiểuDữ liệu sống lâu hơn container. Không có volume thì xoá container là mất sạch database.
- Networktự tìm hiểuCác container gọi nhau bằng TÊN, không bằng localhost — localhost bên trong container là chính nó.
- docker composetự tìm hiểuMột file YAML mô tả cả cụm, một lệnh dựng hết. Đây là thứ bạn sẽ dùng hằng ngày.
4Đưa lên thật
Image chạy được trên máy người khác, và không nặng 2GB.
- Registrytự tìm hiểuDocker Hub, GHCR… chỗ để đẩy image lên cho máy chủ kéo về. Giống remote của git.
- Multi-stage buildtự tìm hiểuBuild trong một image đầy đủ công cụ, rồi chỉ chép kết quả sang một image trống trơn.
- Kích thước imagetự tìm hiểualpine, slim, distroless. Image nhỏ đi nghĩa là deploy nhanh hơn và ít chỗ để bị tấn công hơn.
- Container không phải máy ảotự tìm hiểuNó dùng chung nhân với máy chủ. Biết điều này là hiểu vì sao nó nhẹ, và vì sao nó không cách ly bằng máy ảo.
Đích
Lộ trình dừng ở đây
Chưa bài nào trong Visual Lab dạy docker — trang này là lộ trình, không phải bài học. Bốn chặng trên đủ để bạn tự đi; phần dưới là những hướng xa hơn, tới lúc cần bạn sẽ biết mình đang tìm gì.
- KubernetesKhi một máy không đủ và bạn cần thứ tự động dựng lại container chết.
- HealthcheckContainer đang chạy không có nghĩa là ứng dụng bên trong còn sống.
- Chạy bằng user thườngMặc định là root. Đó là mặc định tiện, không phải mặc định an toàn.
- Build image trong CIĐóng gói tự động mỗi lần merge, thay vì build tay trên máy ai đó.