Docker và những kiến thức cơ bản
Trong thời gian gần đây, Docker có rất nhiều bài báo, blog, ... thảo luận và gây được nhiều chú ý trong cộng đồng công nghệ trong nước cũng như trên thế giới. Vậy Docker là gì? Hãy cùng tìm hiểu cùng mình nhé Docker là gì? Docker là một nền tảng cho phép bạn đóng gói, triển khai và chạy ...
Trong thời gian gần đây, Docker có rất nhiều bài báo, blog, ... thảo luận và gây được nhiều chú ý trong cộng đồng công nghệ trong nước cũng như trên thế giới. Vậy Docker là gì? Hãy cùng tìm hiểu cùng mình nhé
Docker là gì?
Docker là một nền tảng cho phép bạn đóng gói, triển khai và chạy các ứng dụng một cách nhanh chóng. Ứng dụng Docker chạy trong vùng chứa (container) có thể được sử dụng trên bất kỳ hệ thống nào: máy tính xách tay của nhà phát triển, hệ thống trên cơ sở hoặc trong hệ thống đám mây. Và là một công cụ tạo môi trường được "đóng gói" (còn gọi là Container) trên máy tính mà không làm tác động tới môi trường hiện tại của máy, môi trường trong Docker sẽ chạy độc lập.
Docker được tạo ra để làm việc trên nền tảng Linux , nhưng đã mở rộng để cung cấp hỗ trợ lớn hơn cho các hệ điều hành không phải Linux, bao gồm Microsoft Windows và Apple OS X
Các thành phần cơ bản của Docker
Docker Engine
Docker Engine là công cụ Client - Server hỗ trợ công nghệ container để xử lý các nhiệm vụ và quy trình công việc liên quan đến việc xây dựng các ứng dụng dựa trên vùng chứa (container). Engine tạo ra một quy trình daemon phía máy chủ lưu trữ images, containers, networks và storage volumes. Daemon cũng cung cấp giao diện dòng lệnh phía máy khách (CLI) cho phép người dùng tương tác với daemon thông qua giao diện lập trình ứng dụng Docker.
Các bạn thắc mắc images, containers, network và volumes mình nhắc tới ở trên là gì? Đôn wua rì :v 4 đối tượng đó là 4 đối tượng của Engine và chúng đều có ID để xác định. Và bằng một cách thần kì nào đó chúng phối hợp với nhau để chúng ta có thể build, ship và run application ở bất cứ đâu
- Images: là thành phần để đóng gói ứng dụng và các thành phần mà ứng dụng phụ thuộc để chạy. Và image được lưu trữ ở trên local hoặc trên một Registry (là nơi lưu trữ và cung cấp kho chứa các image)
- Containers: là một instance của image, và nó hoạt động như một thư mục, chứa tất cả những thứ cần thiết để chạy một ứng dụng
- Network: cung cấp một private network chỉ tồn tại giữa container và host
- volume: Volume trong Docker được dùng để chia sẻ dữ liệu cho container Sau đây là hình ảnh minh họa cho các mối liên hệ giữa các thành phần trên:
Distribution tools
Là các công cụ phân tán giúp chúng ta lưu trữ và quản lý các Docker Images như: Docker Registry, Docker Trusted Registry, Docker Hub
Ở đây mình sẽ giới thiệu về Docker Hub. Docker Hub là gì ?
Docker Hub là một công cụ phần mềm như một dịch vụ cho phép người dùng public hay private các images của chúng ta. Dịch vụ cung cấp hơn 100.000 ứng dụng có sẵn công khai, cũng như các cơ quan đăng ký container công cộng và tư nhân
Orchestration tools
- Docker Machine: Machine tạo Docker Engine trên laptop của bạn hoặc trên bất cứ dịch vụ cloud phổ biến nào như AWS, Azure, Google Cloud, Softlayer hoặc trên hệ thống data center như VMware, OpenStack. Docker Machine sẽ tạo các máy ảo và cài Docker Engine lên chúng và cuối cùng nó sẽ cấu hình Docker Client để giao tiếp với Docker Engine một cách bảo mật
- Docker Compose: là công cụ giúp định nghĩa và khởi chạy multi-container Docker applications
- Docker Swarm: là một công cụ giúp chúng ta tạo ra một clustering Docker. Nó giúp chúng ta gom nhiều Docker Engine lại với nhau và ta có thể "nhìn" nó như duy nhất một virtual Docker Engine
Một số thành phần khác
- Dockerfile: như một script dùng để build các image trong container. Dockerfile bao gồm các câu lệnh liên tiếp nhau được thực hiện tự động trên một image gốc để tạo ra một image mới. Dockerfile giúp đơn giản hóa tiến trình từ lúc bắt đầu đến khi kết thúc
- Docker Toolbox: Bởi vì Docker Engine dùng một số feature của kernel Linux nên ta sẽ không thể chạy Docker Engine natively trên Windows hoặc BSD được. Ở các phiên bản trước đây thì ta sẽ cần một máy ảo cài một phiên bản Linux nào đó và sau đó cài Docker Engine lên máy ảo đó
Kiến trúc của Docker
Docker sử dụng kiến trúc client-server. Docker client sẽ liên lạc với các Docker daemon, các Docker daemon sẽ thực hiện các tác vụ build, run và distribuing các Docker container. Cả Docker client và Docker daemon có thể chạy trên cùng 1 máy, hoặc có thể kết nối theo kiểu Docker client điều khiển các docker daemon như hình trên. Docker client và daemon giao tiếp với nhau thông qua socket hoặc RESTful API
Docker daemon chạy trên các máy host. Người dùng sẽ không tương tác trực tiếp với các daemon, mà thông qua Docker Client.
Thực hành
Lý thuyết là thế vậy thực tế sẽ như thế nào? Sau đây mình có một ví dụ nho nhỏ với Docker
Cài đặt Docker
Sau đây, mình sẽ hướng dẫn các bạn cài đặt trên ubuntu
Cài đặt Docker sử dụng repository Thiết lập repository
- Update ubuntu
$ sudo apt-get update
- Cài đặt các gói để cho phép apt sử dụng repository qua HTTPS:
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
- Thêm key chính thức của Docker:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- Thêm Repositories stable:
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
Sau khi thực hiện các bước trên tiến hành cài đặt Docker nào. Ở đây, mình cài đặt Docker CE
- Update lần nưã
$ sudo apt-get update
- Cài đặt Docker CE phiên bản mới nhất:
$ sudo apt-get install docker-ce
Để test thử thành công hay khồng chúng ta mở terminal thử chạy một image kinh điển : hello-world