docker-la-gi

Docker là một trong những requirement xuất hiện liên tục trong những JD tuyển dụng backend developer trong những năm gần đây. Rồi nào là DepOps, rồi SRE, CI/CD đều cần phải biết Docker. Qua bài viết này mình hy vọng sẽ giúp các bạn hiểu được một chút về Docker và lý do tại sao lại cần nó như thế.

Docker là gì

Docker là một nền tảng mở để phát triển và triển khai ứng dụng dễ dàng hơn bằng cách sử dụng các “container”. Qua đó, Docker giúp các nhà phát triển có thể dễ dàng phân tách được ứng dụng khỏi sự lệ thuộc với hạ tầng ( phần cứng máy chủ, mạng, ổ đĩa ..)

Docker hiện tại là mã nguồn mở với Golang là ngôn ngữ chính. Chi tiết lại https://github.com/docker.

Docker-1024x512-1
 

Khi chưa có Docker

Khi cài đặt các phần mềm vào máy tính cá nhân, có package phù hợp và có cái không phù hợp, thậm chí bạn còn phải cài thêm OS mới vào … Có nhiều cách để chúng ta giải quyết chuyện này. Hoặc tạo hẳn phân vùng ổ cứng mới rồi cài OS cần thiết cùng các phần mềm hoặc dùng qua một hệ thống ảo hoá (VNWare hoặc Virtual Box).

Nhưng dù có dùng cách nào thì mình cũng mất rất nhiều thời gian để nghĩ xem là cấp bao nhiêu Ram, số core CPU và ổ cứng. Cấp ít quá thì nó không đủ dùng mà cấp nhiều quá thì lãng phí. Các công cụ ảo hoá giúp mình làm tốt hơn vì có thể dễ dàng cấu hình lại mà không cần cài đặt lại từ đầu. Nhưng nhìn chung, chúng đều mất thời gian để setup, cấu hình và tinh chỉnh.

Docker thời đó xuất hiện như là một lời giải cho bài toán trên.

docker-vs-virtual-machine-1024x467

Docker hoạt động ra sao

Docker nổi tiếng với việc điều hành và quản lý “ảo hoá” các Container. Nhưng thực tế là công nghệ container đã có từ lâu, nổi tiếng có Linux Container ( Docker sử dụng trong giai đoạn đầu). Sau đó, Docker đã phát triển và tách hẳn phần lõi container là containerd. Điều khiến Docker phát triển rực rỡ là các thành phần và công cụ hỗ trợ để giúp các nhà phát triển sử dụng Container nhanh chóng, dễ dàng và an toàn hơn.

Nói ngắn gọ thì Container là tất cả nhưng gì cần thiết để một ứng dụng, một service có thể chạy lên được mà chúng không cần phải lo lắng về hệ điều hành, loại ổ đĩa và những thư việc có liên quan. Khi không còn nhu cầu sử dụng, ta có thể bỏ cái container đó đi là xong.

  • Docker Engine: là thành phần chính của Docker, đây có thể xem là một “công xưởnh” để hỗ trợ đóng gói và vận hành các ứng dung thông qua các container.
  • Docker Hub: là một cái hub, chứa tất cả các images Docker. Các image này được build và đóng gói sẵn bởi rất nhiều nhà phát triển trên thế giới.
  • Images: là một khuôn mẫu để chạy lên thành container. Có thể hình dung image như một cái đĩa game, bạn muốn cài đặt thì phải có cái đĩa này, thậm chí chia sẻ cho nhiều máy khác cài đặt nữa.
  • Container: image khi run sẽ là container, chúng ta có thể có nhiều container chạy cùng lúc từ một image.
  • Docker Client: là nơi chúng ta có thể giao tiếp với Docker thông qua các câu lệnh.
  • Docker Daemon: là một service chạy ngầm, tiếp nhận tất cả yêu cầu từ Docker Client để quản lý các đối tượng như Container , Image, Network và Volumes. Các Docker Daemon cũng giao tiếp với nhau để quản lý các Docker Service.
  • Dockerfile: là một file bao gồm các chỉ dẫn để build một image.
  • Volumes: là cơ chế lưu trữ dữ liệu khi các container vận hành.

Docker nên dùng khi nào

  1. Phát triển các ứng dụng, dịch vụ yêu cầu cài đặt quá nhiều thứ liên quan, hoặc có version không tương thích với máy chủ hiện tại.
  2. Khi có nhu cầu scale, mở rộng linh hoạt để đáp ứng nhanh: bật/ tắt nhanh các container để hỗ trợ tăng tải cho hệ thống.
  3. Phù hợp với Microsericé, mình chắc rằng bạn sẽ không muốn chạy từng service nhỏ lên và cấu hình bằng tay.
  4. Tăng tốc, hỗ trợ CI/CD tốt hơn. Vì lúc này automation server chỉ cần quan tâm Docker thay vì phải cài đặt đủ thứ vào.
  5. Dễ thay đổi, di chuyển hơn vì mọt thứ ở trong container. Bản thân Docker vẫn có version control cho các Image, từ đó dễ dàng up/down version ứng dụng hơn.
  6. An toàn hơn vì mỗi container là một môi trường hoàn toàn độc lập với bên ngoài. 

Kết

Mình hy vọng đã giúp các bạn hiểu hơn phần nào về Docker.