Nếu bạn đang làm việc hoặc tiếp xúc nhiều trong lĩnh vực công nghệ thông tin thì có lẽ, bạn đã nghe nói nhiều về Docker. Theo khảo sát của Stack Overflow 2019, đây là platform mà các lập trình viên bầu chọn rằng họ muốn sử dụng nhất khi phát triển các ứng dụng. Điều này cũng cho thấy, phần mềm này rất hữu ích. Để hiểu rõ về nó hơn, hãy cùng chúng tôi tìm hiểu vài điều về Docker cơ bản nhất nhé!

DOCKER LÀ GÌ?

Flatform Docker đang ngày càng trở nên gần gũi với các start-ups cũng như với những tập đoàn kinh tế lớn cho dù nó chỉ là một công cụ còn khá mới.

Cụ thể, về mặt lý thuyết, Docker là một nền tảng cho phép các lập trình viên cũng như các quản trị viên hệ thống có thể đóng gói, triển khai và chạy các ứng dụng trên hệ thống một cách nhanh chóng.

Môi trường làm việc của Docker thì độc lập, do vậy bạn không cần lo lắng rằng quá trình đóng gói hay còn gọi là container trên máy tính sẽ tác động tới môi trường hiện tại của máy tính. Ứng dụng docker chạy trong vùng chứa container có thể chạy trên bất kỳ hệ thống như: máy tính xách tay, hệ thống cơ sở hoặc hệ thống đám mây.

MỘT SỐ KHÁI NIỆM THƯỜNG GẶP KHI LÀM VIỆC TRÊN DOCKER

Một số khái niệm thường gặp khi bạn làm việc trên Doker cơ bản mà bạn nên biết sẽ được liệt kê và giải thích cụ thể dưới đây:

Dockerfile

Là file config cho Docker để build ra image. Nó dùng một image cơ bản để xây dựng lớp image ban đầu. Sau đó nếu có các lớp bổ sung thì nó được xếp chồng lên lớp cơ bản. Cuối cùng một lớp mỏng có thể được xếp chồng lên nhau trên các lớp khác trước đó.

Docker Daemon

Là server Docker cho yêu cầu từ Docker API. Nó quản lý images, containers, networks và volume.

Docker Client

Là cách mà bạn tương tác với docker thông qua command trong terminal. Docker Client sẽ sử dụng API gửi lệnh tới Docker Daemon.

Docker Volumes

Khái niệm này là cách tốt nhất để lưu trữ dữ liệu liên tục cho việc sử dụng và tạo apps.

Docker Image

Image là 1 đối tượng chứa sẵn cấu hình. Ví dụ: image có sẵn hệ điều hành ubuntu, image có sẵn Golang,… Các thao tác có thể sử dụng với image gồm: build, run, remove,…

Đây là một dạng tập hợp các tệp của ứng dụng, được tạo ra bởi Docker engine. Nội dung của các Docker image sẽ không bị thay đổi khi di chuyển. Docker image được dùng để chạy các Docker container.

Docker container

Container là 1 đối tượng mà ứng dụng chạy trong đó. Container được tạo từ image. Các thao tác có thể sử dụng với container là: ps, start, stop, restart, logs, remove,…

Docker container là một dạng runtime của các Docker image, dùng để làm môi trường chạy ứng dụng.

Docker Registry

Là nơi lưu trữ riêng của Docker Images. Images được push vào registry và client sẽ pull images từ registry. Có thể sử dụng registry của riêng bạn hoặc registry của nhà cung cấp như: AWS, Google Cloud hay Microsoft Azure,…

Docker Hub

Là Registry lớn nhất của Docker Images (mặc định). Có thể tìm thấy images và lưu trữ images của riêng bạn trên Docker Hub (miễn phí).

Docker Repository

Là tập hợp các Docker Images cùng tên nhưng khác tags trên phần mềm Docker cơ bản.

Docker Networking

Cho phép kết nối các container lại với nhau. Kết nối này có thể trên 1 host hoặc nhiều host.

Docker Compose

Là công cụ cho phép run app với nhiều Docker containers 1 cách dễ dàng hơn. Docker Compose cho phép bạn config các command trong file docker-compose.yml để sử dụng lại. Công cụ này thì có sẵn khi cài Docker.

Docker Swarm

Để phối hợp triển khai container.

Docker Services

Là các containers trong production. 1 service chỉ run 1 image nhưng nó mã hoá cách thức để run image — sử dụng port nào, bao nhiêu bản sao container run để service có hiệu năng cần thiết và ngay lập tức.

ƯU VÀ NHƯỢC ĐIỂM CỦA PHẦN MỀM DOCKER

Những ưu điểm của phần mềm Docker

  • Tính đồng nhất: Tính đồng nhất được xem là ưu điểm nổi bật nhất khi phát triển docker. Trong trường hợp nhiều người cùng phát triển một dự án trong môi trường, docker có thể hạn chế được sự sai khác nhất định giữa thành viên.
  • Đóng gói: Bạn có thể ẩn vào môi trường các app vào trong container. Bên cạnh đó, người dùng có thể kiểm tra thường xuyên các container. Lúc này việc bỏ đi hãy giữ lại container là công việc hết sức dễ dàng.
  • Tính nhất quán: Các bước thực hiện test container được dùng để phát triển bằng CI. Có thể deploy container đã được test bằng CI lên server. Ngoài ra người dùng cũng có thể thực hiện scale container đã được deploy.
  • Bạn có thể khởi chạy container trên mỗi hệ thống mà bạn muốn.
  • Dễ dàng thiết lập môi trường làm việc. Chỉ cần config 1 lần duy nhất và không bao giờ phải cài đặt lại các dependencies. Nếu bạn thay đổi máy hoặc có người mới tham gia vào project thì bạn chỉ cần lấy config đó và đưa cho họ.

Những hạn chế khi sử dụng phần mềm Docker

  • Docker thời gian đầu sẽ chạy khá thoải mái và người dùng cảm giác họ đang làm chủ tất cả. Tuy nhiên sau một thời gian sử dụng sẽ xuất hiện khá nhiều vấn đề. Do đó bạn cần phải có thời gian nghiên cứu và học biết về docker để có thể giải quyết vấn đề khi chúng xảy ra bất ngờ với dự án của bạn.
  • Bạn cần phải biết viết code ở môi trường này, điều này quan trọng không kém so với việc viết code trên local.

KHÔNG NÊN SỬ DỤNG DOCKER TRONG NHỮNG TRƯỜNG HỢP NÀO?

Không sử dụng Docker nếu bạn cần tăng tốc

Docker container nhỏ hơn và yêu cầu ít tài nguyên hơn máy ảo với máy chủ và cơ sở dữ liệu. Đồng thời, Docker sẽ sử dụng nhiều tài nguyên hệ thống như bộ lập lịch kernel của máy chủ sẽ cho phép. Bạn không nên mong đợi Docker tăng tốc ứng dụng theo bất kỳ cách nào.

Không sử dụng Docker nếu bạn ưu tiên bảo mật

Ưu điểm bảo mật lớn nhất của Docker cơ bản là nó chia ứng dụng thành các phần nhỏ hơn. Nếu bảo mật của một phần bị xâm phạm, phần còn lại sẽ không bị ảnh hưởng.

Tuy nhiên, trong khi các quy trình riêng biệt trong các container hứa hẹn cải thiện bảo mật, tất cả các container đều chia sẻ quyền truy cập vào một hệ điều hành máy chủ duy nhất. Bạn có nguy cơ chạy các container Docker với sự cô lập không đầy đủ. Bất kỳ mã độc hại nào cũng có thể có quyền truy cập vào bộ nhớ máy tính của bạn.

Không sử dụng Docker nếu bạn phát triển ứng dụng GUI trên máy tính để bàn

Docker không phù hợp với các ứng dụng yêu cầu giao diện người dùng phong phú. Docker chủ yếu dành cho các container bị cô lập với các ứng dụng dựa trên bảng điều khiển. Các ứng dụng dựa trên GUI không phải là ưu tiên, hỗ trợ của chúng sẽ dựa vào trường hợp và từng ứng dụng cụ thể.

Không sử dụng Docker nếu bạn muốn làm sáng tỏ sự phát triển và gỡ lỗi

Docker được tạo ra bởi các nhà phát triển và cho các nhà phát triển, vì thế đặc điểm của nó là cung cấp sự ổn định môi trường. Điều này giúp loại bỏ vấn đề của phiên bản chương trình khác nhau trong các môi trường khác nhau.

Với sự giúp đỡ của Docker, bạn có thể dễ dàng thêm một phụ thuộc mới vào ứng dụng của mình. Không có nhà phát triển nào trong nhóm của bạn phải lặp lại thao tác này trên máy của họ. Tất cả mọi thứ sẽ được lên và chạy trong container và phân phối cho toàn đội.

Đồng thời, bạn phải thực hiện một số thiết lập bổ sung để mã hóa ứng dụng của mình trong Docker. Cùng với đó, muốn gỡ lỗi Docker, bạn phải cấu hình đầu ra nhật ký và thiết lập các cổng gỡ lỗi.

Tóm lại, nếu bạn có một quy trình triển khai phức tạp và tẻ nhạt, Docker sẽ giúp bạn rất nhiều. Còn nếu bạn có một ứng dụng đơn giản, sử dụng Docker chỉ khiến các công đoạn trở nên phức tạp hơn mà thôi.

Không sử dụng Docker nếu bạn cần sử dụng các hệ điều hành hoặc nhân khác nhau

Với các máy ảo, trình ảo hóa có thể trừu tượng hóa toàn bộ thiết bị. Bạn có thể sử dụng Microsoft Azure để chạy cả hai phiên bản Windows Server và Linux Server cùng một lúc. Yêu cầu mà nó cần chỉ là bạn phải có cùng 1 hệ điều hành giống với cái nó được tạo ra.

Docker cơ bản có một cơ sở dữ liệu lớn về hình ảnh container Docker – Docker Hub. Tuy nhiên, nếu một hình ảnh được tạo trên Linux Ubuntu, nó sẽ chỉ chạy trên cùng một Ubuntu.

Không sử dụng Docker nếu bạn có nhiều dữ liệu có giá trị để lưu trữ

Theo thiết kế, tất cả các tệp Docker được tạo bên trong một thùng chứa và được lưu trữ trên một lớp chứa có thể ghi. Vì vậy, bạn sẽ khó để có thể lấy dữ liệu ra khỏi container nếu một quy trình khác cần.

Bên cạnh đó, lớp chứa có thể ghi của một container được kết nối với máy chủ mà container đang chạy, nếu bạn cần di chuyển dữ liệu đi nơi khác, bạn không thể làm điều đó một cách dễ dàng. Và với đó, tất cả dữ liệu được lưu trữ bên trong một container sẽ bị mất mãi mãi sau khi container bị tắt.

Không sử dụng Docker nếu bạn đang tìm kiếm công nghệ dễ quản lý

Được giới thiệu vào năm 2012, đến nay, Docker vẫn là một công nghệ mới. Là nhà phát triển, bạn có thể phải cập nhật các phiên bản Docker thường xuyên. Các tùy chọn giám sát mà Docker cung cấp cũng khá kém. Bạn có thể có được một cái nhìn cụ thể và nhanh chóng vào một số thống kê đơn giản, tuy nhiên, nếu bạn muốn xem một số tính năng giám sát nâng cao, Docker sẽ không giúp được điều đó.

Ngoài ra, trong trường hợp ứng dụng lớn và phức tạp, việc triển khai Docker phải mất phí. Xây dựng và duy trì liên lạc giữa nhiều container trên nhiều máy chủ sẽ tốn rất nhiều thời gian và công sức.

Đặc biệt, hệ sinh thái Docker cũng khá rạn nứt – không phải tất cả các sản phẩm container hỗ trợ đều hoạt động tốt với nhau.

Trong khi Docker cơ bản là đang thu hút sự quan tâm của nhiều người, qua những thông tin trên, có lẽ bạn cũng đã có cái nhìn rõ nét hơn về loại phần mềm đang gây sốt này. Hy vọng những kiến thức trên đã hữu ích cho bạn, giúp bạn xác định được tính ứng dụng của Docker đối với dự án của mình.

Xem thêm: Khám phá cấu trúc dữ liệu ngăn xếp Stack