Docker là gì? Vì sao DevOps Engineer nên biết?

docker-la-gi-fs

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. Nó cũng đồng thời là cái tên sở hữu vị trí thứ #2 về mức độ yêu thích.

Docker thực chất là gì? Điều gì ở Docker “hot” đến vậy?

Đọ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:

  • Docker là gì? Docker giúp ích cho Developer/DevOps Engineer như thế nào?
  • Khi nào nên dùng Docker? Phân biệt Docker và VPS?
  • Docker có giúp CV xin việc của DevOps Engineer trở nên nổi bật hơn?
  • Những tài liệu tìm hiểu về Docker chất nhất

Xem thêm việc làm DevOps Engineer trên ITviec

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.

Hi anh Thành. Tại sao anh lại quyết định chuyển career path của mình từ System Administrator sang DevOps Engineer vậy ạ?

Thật ra anh rất mê code nhưng làm system thì code rất ít hoặc chỉ chạy những command line trong hệ điều hành, anh thấy như vậy là không đủ. Còn làm DevOps thì đi sâu hơn về lập trình, gần giống như lập trình cho hệ thống vậy.

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.

Vậy anh có nghĩ DevOps Engineer là một công việc thú vị?

Anh thấy nó 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. Nó là sự giao thoa giữa operation và development.

Xem ngay: Công việc của DevOps Engineer là gì?

Là một DevOps Engineer, hẳn anh biết 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 container được rút ngắn đi rất nhiều. 

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 container. Tất cả các thư viện và module sẽ được cài sẵn trong 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 container bị chết thì những container khác vẫn chạy bình thường, không bị ảnh hưởng.

Anh Thành (đứng thứ 3, từ phải sang) cùng đồng nghiệp

Thường thì khi nào sẽ phải sử dụng Docker vậy anh?

Anh nghĩ nó phụ thuộc vào 2 yếu tố: (1) 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 và (2) 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.

Những lợi ích mà Docker mang lại là gì?

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 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.

Song song với Docker, người ta có nhắc đến VPS. Sự khác biệt ở đây là gì vậy anh?

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 container nhanh, xóa cũng dễ dàng
  • Build sẵn configuration (cấu hình) trong image nên khi build 1 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 hoá

DevOps Engineer có bắt buộc phải biết sử dụng Docker không anh?

Anh nghĩ là tùy công ty, quan trọng là công ty có yêu cầu hay không. Vì 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.

Anh có nghĩ biết sử dụng Docker là một lợi thế trong CV xin việc đối với DevOps Engineer?

Docker là một điểm mạnh vì không chỉ ở hiện tại mà xu hướng trong khoảng 1-2 năm nữa, người ta đều sẽ dùng Docker để triển khai dịch vụ/ứng dụng.

Nghề Devops Engineer có dễ tìm việc không anh?

Theo anh là 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.

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).

Việc làm DevOps Engineer tại Hà Nội

Việc làm DevOps Engineer tại Tp. HCM

Sai lầm anh từng mắc phải ở vị trí DevOps Engineer? Và bài học anh rút ra?

Khi xây dựng hệ thống thì một phần công việc của anh là viết các script để backup dữ liệu nhưng mà lần đó script anh viết bị lỗi gì đó 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. Nguyên nhân nằm ở script bị lỗi nói trên.

Chủ yếu là do anh chủ quan, cứ nghĩ rằng script chạy khi nào cũng thành công và anh không cấu hình thêm phần cảnh báo cho script, nên khi chạy có lỗi hay không thì anh cũng không biết.

Mặc dù lỗi lần đó không ảnh hưởng gì đến công ty vì chỉ là dữ liệu backup nhưng cũng ảnh hưởng đến performance phòng công nghệ thông tin nên anh cũng bị sếp la rầy.

Sau này anh thấy, với một công ty thì dữ liệu rất quan trọng. Trước khi làm một thứ gì đó, anh sẽ 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ì anh mới xóa đi. 

Anh 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. 

Ví dụ: Oracle có một công cụ gọi là Job Backup, đó là nơi để backup dữ liệu. Cứ mỗi 8h 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.

Những nguồn resource anh đã từng tìm hiểu về Docker (cũng như resource để theo đuổi con đường DevOps Engineer)?

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. 

Nếu muốn trao đổi thêm với anh Thanh về Docker nói riêng và nghề DevOps Engineer nói chung, bạn có thể truy cập profile của anh tại: http://www.devopstechhub.com/ hoặc  https://stackoverflow.com/story/thanh

Robby2

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.

101 Shares

About the Author:

Social Content Lead
Avatar

Read more...

error: