Giới thiệu
Tiếp theo phần 1, trong bài này, mình sẽ tiếp tục lan man những chuyện ngoài lề để tập hợp thêm 1 chút kiến thức trước khi build 1 image hoàn chỉnh.
Có một câu nói của Abert Einstein khá hay:
Logic will get you from A to B. Imagination will take you everywhere. – Albert Einstein
(Logic sẽ đưa anh từ điểm A tới điểm B. Trí tưởng tượng sẽ đưa anh tới mọi nơi)
Lúc trước mình tìm hiểu và học về Docker. Người ta dạy sao, mình làm theo như vậy. Tạo được image, run được container thì thấy rất thành công rồi. Nhưng 1 chị trong nhóm bảo Dockerfile rất quan trọng, bảo mình tìm hiểu thêm. Mình mới bắt đầu tìm hiểu về cơ chế để build 1 image. Việc tìm hiểu cơ chế đòi hỏi bạn nên có 1 chút trí tưởng tượng, vì như vậy sẽ giúp bạn hiểu và nhớ nhanh những thứ quan trọng.
Quay lại bài viết này, chúng ta sẽ đi thêm 1 đường vòng trước khi vô bài mới.
- Cài đặt Software
- Linux-Windows
- Tối ưu quá 1 Dockerfile đơn giản
- Multi-layer
- Multi-Stage
- Tối ưu Dockerfile cho multi-project
Do bài viết khá dài, nên mình sẽ viết 4 phần vào Part 3.
Mục đích cuối cùng của chúng ta là hiểu cơ chế và viết 1 Dockerfile tối ưu nhất.
Vấn đề đặt ra là tại sao chúng ta nên làm vậy? M1, M2 nhanh lắm rồi. À quên, mình chưa xài qua vì mình là dân Windows tập tành xài Linux thôi.
Với 1 Dockerfile chưa tối ưu, dung lượng file sẽ lớn. Ví dụ như .NET, dung lượng 800 Mb hơn mà chưa có source compile nào trong đó. Ngoài ra thời gian build ứng dụng sẽ lâu. Nếu dung lượng source của bạn vài GB, mà việc build lên không có cache, thì chắc sẽ tốn cả tiếng nhỉ.
Vì vậy, tối ưu không có nghĩa là chỉ tối ưu về mặt dung lượng mà là tối ưu về nhiều thứ khác, như caching, time-building.
Chúng ta sẽ bắt đầu từ suy nghĩ: “Start small, think big..."
Cài đặt Software
Để hiểu một thứ gì đó phức tạp, chúng ta hình dung từ một thứ đơn giản, dễ hiểu với chúng ta trước.
Các bạn xài Windows (nói Linux thì có vẻ cao siêu quá, mà chắc ít người xài Linux, còn Mac thì mình chưa dùng qua) hẳn đã quen với việc cài đặt Hệ điều hành, rồi cài đặt software dạo.
Giả sử bạn được yêu cầu cài đặt OS, và cài đặt Mozilla Firefox để duyệt web. (Bỏ qua các yếu tố về Key bản quyền, driver card mạng, …), thì các bạn sẽ có các bước sau:
- Chọn và cài đặt 1 hệ điều hành (Windows 11, …)
- Mở trình duyệt Microsoft Edge. Đây là trình duyệt mặc định của Ms Windows.
- Mở trang chủ Mozilla Firefox, tìm kiếm và download file cài đặt
- Mở folder chứa file cài đặt, nhấp đúp cài đặt trình duyệt.
- Mở file “firefox.exe” để thực hiện việc lướt web.
Việc cài đặt chỉ bao gồm 3 bước chính:
- Khai báo Operating System (base image)
- Thực hiện việc cài đặt chương trình
- Khai báo Command để chạy chương trình
Bạn có thể thử lại các bước trên bằng cách sử dụng Chocolatey để cài đặt phần mềm. Các bước khai báo sẽ gần gũi với khai báo Dockerfile hơn.
Giới thiệu 1 chút về Linux
Distro Linux là gì
Ban đầu, Linux chính là một hệ điều hành được tạo bởi Linus Torwalds và sau đó phát triển thành giải pháp hệ điều hành mã nguồn mở, nhằm giảm sự lệ thuộc vào những hệ điều hành đóng, ví dụ như Microsoft Windows.
Hệ điều hành mở cho phép người dùng sử dụng miễn phí, tự do phát triển và định hướng hay tùy chỉnh theo nhu cầu thực tế của mình (được gọi là distro Linux hay distribution Linux). Đây chính là điều hạn chế của các hệ điều hành đóng.
Các bản distro Linux
3 nhánh chính, đó là Debian, Red Hat, Slackware. Đồng thời, tất cả các bản distrolinux đều có Kernel và Linux.
Xét về thị trường: Các distro Linux phổ biến và phát triển hiện nay được chia thành 4 nhóm:
- Arch, Gentoo và Slackware
Các các bản distrolinux này nhắm vào người dùng am hiểu Linux. Do đó, phần lớn các phương thức xây dựng, cũng như cấu hình của hệ thống được thực hiện qua dòng lệnh. - Debian, Fedora
Đối tượng người dùng của nhóm 2 là người am hiểu về hệ thống nhưng chưa thực sự hiểu về Linux. Vì vậy, distro sẽ cung cấp cho họ nhiều công cụ hơn. Nhóm này phù hợp với người dùng mới bắt đầu sử dụng Linux.
Tuy nhiên, các distro của nhóm 2 lại có quy trình phát triển và kiểm tra chất lượng phần mềm khắt khe hơn các nhóm còn lại. Do đó, để trở thành lập trình viên chính thức của nhóm này, bạn buộc phải có thời gian đóng góp dài. Đồng thời, được chứng nhận chất lượng bởi những lập trình viên khác. Vì thế, giới công nghệ luôn đánh giá cao môi trường của nhóm Debian, Fedora. - Centos, RHEL, SUSE EL
Các bản distrolinux nhắm vào thị trường máy chủ, doanh nghiệp, cơ quan… Vì chúng có sự ổn định cao, thời gian ra phiên bản mới lâu, khoảng 3 – 5 năm tùy distrolinux. Ngoài ra, còn có dịch vụ hỗ trợ thương mại cho công ty, hướng dẫn sử dụng sản phẩm. - Ubuntu, Open SUSE, Linux Mint
Đối tượng khách hàng của nhóm 4 là người mới bắt đầu dùng Linux và người dùng cuối. Đặc tính của chúng là phát triển trong thời gian ngắn, ứng dụng các công nghệ mới liên tục, nhiều công cụ đồ họa để thiết kế và cấu hình hệ thống theo nhu cầu sử dụng. Nhóm này cũng rất thân thiện với người dùng mới làm quen Linux.
Xét về triết lý phần mềm (Distro Philosophy)
Triết lý phần mềm là những nguyên tắc, hay định hướng, mục tiêu của người phát triển chúng đặt ra. Vì thế, khi xét về yếu tố này thì distro cũng được phân thành 4 nhóm.
- Nhóm 1: nhóm này có cấu trúc gọn, linh hoạt để các lập trình viên có thể xây dựng theo nhu cầu của mình.
- Nhóm 2: nhóm này nhắm đến sự chuẩn hóa quá trình phát triển phần mềm, nhằm tạo ra hệ thống hoạt động nhịp nhàng và hạn chế tối đa lỗ hỏng bảo mật.
- Nhóm 3: phát triển theo hướng bền vững, chuyên nghiệp, phù hợp cho việc cung cấp dịch vụ/sản phẩm dài hạn, có vòng đời lên tới 7 năm.
- Nhóm 4: đi theo hướng công nghệ. Nhóm này có nhiều công cụ hiệu ứng đồ họa và không cần cấu hình nhiều.
Alpine
Alpine là một distro dựa trên BusyBox. Trên môi trường Docker thì Alpine rất phổ biến cùng với BusyBox, Debian, Ubuntu, CentOS...
Ưu điểm của Alpine là rất nhỏ gọn, chỉ khoảng 5MB so với 60–70MB của Debian, gần 100MB của Ubuntu, hơn 200MB của CentOS.
Nhận xét
Đăng nhận xét