Tìm hiểu về Docker

Chào các bạn, Bài này tôi sẽ giới thiệu cơ bản về Docker và setup một ví dụ mở đầu.

I. TÌM HIỂU VỀ DOCKER

1. Docker là gì?

Có 1 kịch bản mà tôi muốn các bạn nghĩ tới, đó là lúc chúng ta phát triển ứng dụng trên môi trường phát triển và mục tiêu cuối cùng của chúng ta là release sản phẩm, là chạy " ngon lành cành đào" ứng dụng của mình trên môi trường production. Nhưng có 1 vấn đề nảy sinh là môi trường phát triển thực sự khác với môi trường thử nghiệm (testing) và thực sự khác với môi trường production, khi đó chúng ta lấy gì đảm bảo dàng code chúng ta chạy ngon trên môi trườn dev thì cũng chạy ngon trên môi trường testing và cũng sẽ chạy ngon trên production ??? Đừng lo, vì Docker đã ra đời để giúp chúng ta giải quyết bài toán trên. Vậy Docker là gì:

  • Docker là một nền tảng mở cho phát triển, vận chuyển và chạy ứng dụng.
  • Docker cho phép bạn tách các ứng dụng ra khỏi cơ sở hạ tầng của mình để có thể cung cấp phần mềm một cách nhanh chóng.
  • Với Docker, bạn có thể quản lý cơ sở hạ tầng theo cùng cách quản lý ứng dụng của mình.
  • Bằng cách tận dụng các phương pháp của Docker để vận chuyển, thử nghiệm và triển khai mã một cách nhanh chóng, bạn có thể làm giảm đáng kể sự chậm trễ giữa việc viết mã và chạy nó trong sản xuất

2. Docker platform.

Docker cung cấp khả năng đóng gói và chạy một ứng dụng trong một môi trường tách biệt lỏng lẻo gọi là container. Docker giúp cách ly và bảo mật, cho phép bạn chạy nhiều containers đồng thời trên một máy chủ nhất định. Các containes là light weight và chúng không cần tải thêm của một hypervisor, chạy trực tiếp trên kernel của máy chủ. Điều này có nghĩa là bạn có thể chạy nhiều contains hơn trên một kết hợp phần cứng nhất định hơn là nếu bạn đang sử dụng các máy ảo. Bạn thậm chí có thể chạy các container Docker trong máy chủ lưu trữ mà thực sự là các máy ảo!

  • Docker cung cấp công cụ và nền tảng để quản lý vòng đời của các containers của bạn:
  • Phát triển ứng dụng của bạn và các thành phần hỗ trợ bằng cách sử dụng các containers.
  • Các container trở thành đơn vị phân phối và thử nghiệm ứng dụng của bạn.
  • Khi bạn đã sẵn sàng, triển khai ứng dụng của bạn vào môi trường production, dưới dạng container hoặc orchestrated service. Điều này hoạt động giống nhau cho dù môi trường sản xuất của bạn là một trung tâm dữ liệu cục bộ, nhà cung cấp đám mây hay là một tổ hợp của hai.

3. Docker Engine là ứng dụng client-server với các thành phần chính.

  • Một máy chủ là một loại chương trình dài chạy được gọi là quá trình daemon (lệnh dockerd).
  • API REST chỉ định các giao diện mà các chương trình có thể sử dụng để nói chuyện với daemon và hướng dẫn nó làm gì.
  • Giao diện dòng lệnh CLI ( docker command line )
  • CLI sử dụng API của Docker REST để điều khiển hoặc tương tác với daemon Docker thông qua kịch bản hoặc các lệnh CLI trực tiếp. Nhiều ứng dụng Docker khác sử dụng API cơ bản và CLI.

4. Bạn có thể sử dụng Docker cho những gì?

4.1. Phân phối nhanh các ứng dụng của bạn

Docker hợp lý hóa vòng đời phát triển bằng cách cho phép các nhà phát triển làm việc trong các môi trường chuẩn hóa sử dụng các bộ chứa cục bộ cung cấp các ứng dụng và dịch vụ của bạn. Các containers rất lý tưởng cho việc tích hợp liên tục và quá trình phát triển liên tục (CI / CD). Xem xét các kịch bản ví dụ sau đây:

  • Developer viết code ở máy local và chia sẻ công việc của họ với các đồng nghiệp bằng cách sử dụng các container Docker.
  • Họ sử dụng Docker để đẩy ứng dụng của họ vào môi trường thử nghiệm và thực hiện các bài kiểm tra tự động và thủ công.
  • Khi sản phẩm có lỗi, dev có thể fixed chúng trên môi trường phát triển và deploy lại chúng trên môi trường thử nghiệm để kiểm tra và xác nhận.
  • Khi thử nghiệm hoàn tất, việc deploy cho khách hàng đơn giản chỉ cần cách đẩy image được cập nhật lên môi trường production.

4.2. Môi trường chạy và khả năng mở rộng.

  • Docker platform cho phép giải quyết khối lượng công việc 1 cách rất portable. Docker contains có thể chạy trên laptop, trên các máy ảo hoặc ảo trong trung tâm dữ liệu, các nhà cung cấp đám mây hoặc trong một hỗn hợp các môi trường.
  • Docker rất portable và light weight làm cho việc quản lý khối lượng công việc linh động, dễ dàng scaling tùy theo tính chất các ứng dụng và dịch vụ của sản phẩm.

5. Kiến trúc Docker.

  • Docker client trao đổi với Docker daemon thông qua REST API

  • Docker daemon Docker daemon (dockerd) nghe các yêu cầu từ Docker API và quản lý các đối tượng Docker như =images, containers, network và volumn. Một daemon cũng có thể giao tiếp với các daemon khác để quản lý các Docker services.

  • Docker registries Các Docker image có thể được đăng ký lưu trữ một cách dẽ dàng qua Docker Hub và Docker Cloud để bạn có thể đẩy lên vào kéo về dễ dàng các images.

  • Docker objects Khi bạn sử dụng Docker là lúc mà bạn tạo ra các images, containers, networks, volume, plugins và các other objects.

    • IMAGE: là các template read-only hướng dẫn cách tạo ra các Docker container. image được sử dụng để đóng gói ứng dụng và các thành phần phụ thuộc của ứng dụng. Image có thể được lưu trữ ở local hoặc trên một registry. Ví dụ ban có thể xây dựng 1 image trên ubuntu, cài Apache server , cũng như cấu hình chi tiết nhưng thứ cần thiết cho viêc running ứng dụng của bạn.

    • CONTAINERS: 1 Container là 1 runable instance của image. Bạn có thể create, run, stop, delete or move container sử dụng Docker API or CLI. Bạn có thể kết nối 1 hoặc nhiều network, lưu trữ nó, hoặc thậm chí tạo ra 1 image mới dựa trên trạng thái của nó. Default thì một container được cách ly tương đối với các container và host machine. Bạn có thể control được việc cách ly network, storage, hoặc các sub system khác nằm dưới các containers hoặc các host machine.

    • SERVICES: Service cho phép bạn mở rộng các contaners thông qua Docker daemons, chúng làm việc với nhau như 1 nhóm (swarm) với machine manager và workers. Mỗi một member của swarm là 1 daemon Docker giao tiếp với nhau bằng cách sử dụng Docker API. Theo mặc định thì service được cân bằng tải trên các nodes.

    • NETWORK: Cung cấp một private network mà chỉ tồn tại giữa container và host.

    • VOLUME: volume được thiết kể để lưu trữ các dữ liệu độc lập với vòng đời của container. Biểu đồ minh họa các lệnh phổ biến của Docker Client và mối quan hệ giữa các thành phần trên:

II. SETUP

  • Để bắt đầu với chương trình Docker đầu tiên, bạn cần install theo với phiên bản phù hợp với máy của bạn tại https://docs.docker.com/engine/installation/
  • Sau khi cài đặt xong, ta mở màn hình command line và nhập: docker run hello-world nhận được kết quả:
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

  • Kiểm tra phiên bản docker sử dụng: docker --version
Docker version 17.03.1-ce, build c6d412e

III. TỔNG KẾT

Trong bài này tôi đã giới thiệu với các bạn các thành phần cơ bản của Docker và setup 1 ví dụ đơn giản đầu tiên.Bài sau tôi sẽ hướng dẫn các bạn sử dụng Docker để setup load-balancing cho ứng dụng.