Nội dung chính
Docker là một nền tảng ở tầng OS (operating system) phục vụ cho việc chạy ảo hóa các dịch vụ/ứng dụng một cách nhanh chóng. Thông qua những chia sẻ từ chính Senior DevOps Engineer trong ngành IT, bài viết sau đây cho giúp bạn hiểu hơn về Docker là gì.
Docker là platform đứng thứ #1 trong danh sách bảng xếp hạng các platform mà Developer muốn sử dụng nhiều nhất khi phát triển ứng dụng, theo khảo sát của Stack Overflow 2019. Đây cũng là cái tên đứng thứ #2 về độ yêu thích. Vậy thì, thật chất Docker là gì? Cùng đọc bài phỏng vấn của ITviec với anh Nguyễn Văn Thành – Senior DevOps Engineer tại PYCO Group để biết nhé!
Docker là gì?
Docker là một platform ở tầng OS (operating system) có thể tinh chỉnh được, phục vụ cho việc chạy ảo hóa các dịch vụ/ ứng dụng một cách nhanh chóng.
Ngày xưa, mọi người hay dùng máy ảo (hay còn gọi tắt là VMs – Virtual Machines) để triển khai ứng dụng, việc này mất rất nhiều thời gian. Khi chuyển sang sử dụng Docker thì thời gian triển khai một ứng dụng nằm trong Docker container được rút ngắn đi rất nhiều.
Lợi ích của việc sử dụng Docker
- Thứ nhất là tính tiện lợi, nhanh chóng. Nếu như trước đây triển khai dịch vụ/ứng dụng trên VMs tốn vài chục phút thì với Docker, nó sẽ giảm xuống chỉ còn vài phút.
- Thứ hai là tiết kiệm resource (tài nguyên). Mỗi docker container sử dụng bao nhiêu resource thì sẽ tốn bấy nhiêu, không sử dụng thì resource sẽ được trả về cho máy chủ host.
- Thứ ba là hệ thống có mức độ tự động mở rộng cao hơn để đáp ứng nhu cầu phục vụ người dùng. Việc khởi tạo và tắt đi của một docker container diễn ra khá dễ dàng và dựa trên các metric của hệ thống.
- Thứ tư là dễ dàng automate (tự động hóa) việc quản lý các docker container thông qua Kubernetes hoặc Docker Swarm.
Chẳng hạn khi có 1 docker container chết đi thì hệ thống sẽ tự động khởi tạo 1 docker container tương tự như vậy trong cluster và trả về thông báo. DevOps Engineer không cần phải kiểm tra thủ công.
Ngoài ra, anh Thành còn chia sẻ rằng Docker sẽ là một điểm sáng trong CV của DevOps vì không chỉ ở hiện tại mà xu hướng trong khoảng 1-2 năm tới, người ta đều sẽ dùng Docker để triển khai dịch vụ/ứng dụng.
Khi nào cần dùng Docker?
Trước khi quyết định có nên sử dụng Docker, anh Thành đưa ra lời khuyên rằng bạn có thể thử trả lời 2 câu hỏi này:
- Mức độ tiếp xúc của lập trình viên với Docker như thế nào, lập trình viên đã làm việc với Docker hay chưa?
- Hệ thống mà DevOps Engineer đang làm có yêu cầu scalability (khả năng mở rộng) cao hay không?
Nếu 2 câu trả lời đều là “có” thì ta sẽ dùng Docker.
Tuy nhiên, anh Thành cũng bổ sung thêm rằng DevOps Engineer không nhất thiết phải biết sử dụng Docker mà còn tùy công ty, quan trọng là công ty có yêu cầu hay không. Vẫn còn rất nhiều công ty vẫn đang dùng máy chủ ảo VPS. Hiện tại thì chắc chỉ dừng ở mức độ “nên biết sử dụng Docker” chứ không phải bắt buộc.
Cách Docker hoạt động
Chỉ cần viết 1 dockerfile (một file text tổng hợp nhiều dòng lệnh) để tạo nên image, sau đó khởi chạy nó là đã tạo được một docker container. Tất cả các thư viện và module sẽ được cài sẵn trong docker container này. Khi khởi tạo một docker container thì dịch vụ được đóng gói bên trong cũng được khởi tạo theo.
Tham khảo thêm: Hướng dẫn chuyển đổi VM thành Docker image
Một ứng dụng phần mềm sẽ có nhiều dịch vụ khác nhau như: phần đăng nhập, phần xác thực, các API, phần thông báo… Mỗi dịch vụ sẽ chạy trên một docker container khác nhau. Khi một docker container bị chết thì những docker container khác vẫn chạy bình thường, không bị ảnh hưởng.
Phân biệt Docker và VPS
VPS (Virtual Private Server) là máy chủ riêng, nghĩa là người ta sẽ tạo ra nhiều máy chủ ảo, chạy trên cùng một server vật lý. Những công ty làm về hosting thì thường dùng VPS này. Hiểu đơn giản thì VPS cũng tương tự như VMs.
So với VPS thì Docker ưu việt hơn rất nhiều:
- Khởi tạo docker container nhanh, xóa cũng dễ dàng
- Build sẵn configuration (cấu hình) trong image nên khi build một docker container thì nó sẽ tự động tải xuống
- Quy trình triển khai ứng dụng gọn, nhẹ, không tốn nhiều thời gian
- Khả năng mở rộng cao, phục vụ cho việc tự động hóa
Những tài liệu hữu ích khi tìm hiểu về Docker là gì
Trong quá trình tìm hiểu về Docker là gì, bạn ắt hẳn sẽ có rất nhiều thắc mắc, câu hỏi, dưới đây là những nguồn tài liệu hữu ích cho bạn trong quá trình học hỏi:
- https://www.docker.com/: Trình bày các bước cơ bản để build image, viết dockerfile và launch container… Từ đó ta có thể tích hợp các dịch vụ chạy các ngôn ngữ lập trình khác nhau vào docker container.
- https://www.jenkins.io/ và https://www.jetbrains.com/teamcity/: Tìm hiểu về bộ công cụ CI/CD khá phổ biến. Ngoài ra, nếu làm việc trên AWS thì cũng nên tìm hiểu về Codecommit, Codebuild, CodeDeploy và CodePipeline.
- https://kubernetes.io hoặc https://docs.docker.com/engine/swarm/: Bộ quản lý container cluster
- https://www.terraform.io: Bộ triển khai tự động hạ tầng
- https://stackoverflow.com/: Nguồn dữ liệu vô cùng lớn cho developer nói chung cũng như DevOps nói riêng. Ngoài các câu hỏi có tick câu trả lời đúng để tham khảo, DevOps có thể đặt bất kỳ câu hỏi nào nếu gặp vướng mắc trong quá trình tìm hiểu về Docker.
Ngoài những tài liệu kể trên, bạn có thể luyện thêm về Python. Hiện tại Python rất có ích cho DevOps vì chúng dễ học và có tính thực nghiệm cao. Khi code bằng Python, bạn có thể dùng những framework như bộ AWS CDK, BOTO… để triển khai hạ tầng hoàn chỉnh trên AWS một cách tự động.
DevOps Engineer trong ngành nói gì?
Là một người chuyển con đường sự nghiệp từ System Administrator sang DevOps Engineer, anh Thành chia sẻ rằng anh làm vậy vì niềm đam mê với code. Chuyển sang làm DevOps, anh vừa có thể tận dụng được thế mạnh về kinh nghiệm làm việc với system trước kia, vừa được code nhiều hơn, đúng như sở thích.
Sau một thời gian gắn bó với nghề, anh nhận xét DevOps Engineer là một công việc thú vị. Nghề DevOps Engineer phù hợp với những bạn đã có kinh nghiệm làm System Engineer hoặc thích thú với system và có đam mê về coding. Đây là nghề giao thoa giữa operation và development.
Chia sẻ về việc phát triển sự nghiệp DevOps Engineer, anh Thành nhận thấy nghề Devops Engineer dễ tìm việc nhưng để trở thành DevOps Engineer, bạn phải có khoảng 2-3 năm làm việc ở vị trí Network/System Engineer thì mới dễ dàng chuyển qua được.
Đồng thời, bạn phải từng tiếp cận về Linux, Azure, AWS, PowerShell… và bắt buộc phải biết về Bash Script. Ngoài ra, còn phải biết về các công cụ của hệ thống như Ansible, Chef hay Puppet và bộ công cụ CI/CD như Jenkins/TeamCity hay AWS CDK (AWS Cloud Development Kit).
Xem thêm việc làm DevOps Engineer trên ITviec
Khi nói về những sai lầm trong quá trình làm việc, anh cũng thẳng thắn nhận một trong những lỗi lớn nhất mà anh từng mắc phải chính là chủ quan. Anh kể về một lần anh viết script để backup dữ liệu bị lỗi nên không chạy, cũng không có thông báo. Khoảng 10 ngày sau anh mới đăng nhập vào để kiểm tra thì mới phát hiện dữ liệu về những giao dịch liên quan tới ngân hàng trong vòng 10 ngày gần nhất chưa được backup.
Sau sai lầm này, anh rút ra được bài học: Với một công ty, dữ liệu rất quan trọng. Trước khi làm một thứ gì đó, nên backup dữ liệu thành một bản riêng. Khi cảm thấy công việc ổn rồi, không cần dùng đến những dữ liệu này nữa thì mới xóa đi.
Ngoài ra, anh Thành cũng cho chạy script (đã được thiết lập hệ thống cảnh báo nếu xảy ra lỗi) để automate backup dữ liệu hằng ngày hoặc sau mỗi 2 tiếng/lần. Tùy theo mức độ quan trọng của dữ liệu đó như thế nào mà khoảng thời gian backup cũng tương ứng.
Ngoài ra, tùy thuộc dữ liệu nằm trên database nào (ví dụ: MongoDB, Oracle hay MySQL, Postgres…) mà anh sẽ có phương án backup khác nhau.
Oracle có một công cụ gọi là Job Backup, đó là nơi để backup dữ liệu. Cứ mỗi 8 giờ tối hàng ngày thì nó sẽ chạy và lưu dữ liệu vào kho lưu trữ. Mỗi lần như vậy, nó sẽ xuất ra 1 bản có name là ngày backup trên đó. Thường thì sau mỗi 6 tháng, anh sẽ kiểm tra 1 lần và xóa bớt những dữ liệu không cần thiết.
Cảm ơn anh Nguyễn Văn Thành – Senior DevOps Engineer tại PYCO Group và những chia sẻ thú vị của anh đã giúp làm rõ câu hỏi “Docker là gì” và ứng dụng của Docker trong việc lập trình.
Tiểu sử:
Sau khi tốt nghiệp ngành Kỹ thuật viễn thông trường Đại học Giao thông vận tải, anh Thành đầu quân cho FPT với vị trí Network Administrator trong suốt hơn 5 năm. Sau đó, anh gia nhập công ty Software WORX ở cương vị Linux System Administrator.
2 năm sau, anh quyết định chuyển hướng sang làm DevOps Engineer cho một số công ty khác như Tripolis Solutions BV, Proofstack, Alipay, Easy Credit… Hiện tại, anh đang làm Senior DevOps Engineer cho PYCO Group.
Nếu bạn vẫn còn những thắc mắc về “Docker là gì?” nói riêng và nghề DevOps Engineer nói chung muốn trao đổi thêm với anh Thành, bạn có thể truy cập profile của anh tại: http://www.devopstechhub.com/
Bạn thấy bài viết hay và cần thiết với nhiều người? Đừng ngại nhấn nút Share bên dưới nhé.
Và đừng quên tham khảo việc làm DevOps Engineer trên ITviec nhé!