Union File System là một khối xây dựng nền tảng cho một container. Đây là một dịch vụ file system được phát triển cho Linux để cho phép các hhej thống file khác nhau được xếp chồng lên nhau(hay chuyên ngành gọi là overlaid) để tạo ra một tổ hợp hoặc union của các file khác nhau qua đó tạo ra một đại diện hợp nhất duy nhất của nội dung. Nếu bạn đã từng làm việc với phần mềm chỉnh sửa ảnh, điều này có thể sẽ có ý nghĩa với bạn. Giả sử bạn muốn xóa ai đó hoặc thứ gì đó khỏi ảnh( như người yêu cũ mà bạn không bao giờ nhắc đến). Bạn lấy hình ảnh cơ sở và sau đó thêm các pixel cho đến khi bạn có một bức ảnh hoàn toàn mới. Nếu bạn muốn loại bỏ các layer(lớp) đã tạo, bạn chỉ cần bóc chúng trở lại để lộ hình ảnh trước đó. Mỗi layer bạn thêm vào trên cùng sẽ được ưu tiên hơn so với các layer bên dưới nó. Về bản chất, đây là cách union file system hoạt động và đó là một trong những lý do chính khiến file system rất hiệu quả trong việc lưu trữ. Mỗi layer chỉ bao gồm những gì mới và không có gì được sao chép từ một layer trước đó. Các layer được read-only, có nghĩa là chúng bị khóa tại chỗ. Có một layer đọc / ghi nằm trên cùng mà bạn có thể sử dụng để tương tác với file system, nhưng không có thứ gì bạn làm sẽ được duy trì trừ khi bạn lưu thay đổi của mình. Nếu bạn muốn thực hiện các thay đổi của mình vĩnh viễn, bạn phải đặt một layer khác lên trên union file system. Điều này được gọi là thao tác copy-on-write. Hình 13-24 cho thấy một ví dụ về một container image và các layer của nó.
Hình 13-24 Các Layer Container Image Sử dụng Union File System
Khía cạnh read-only này của một container là một điều quan trọng cần được hiểu. Bạn cũng có thể nghe thấy thuật ngữ immutable(bất biến) được sử dụng để mô tả container file system; nó chỉ đơn giản có nghĩa là không thay đổi theo thời gian. Nói cách khác, một container không được vá; thay vào đó, nó được tạo lại với các layer mới được thêm vào. Trong Hình 13-24, bạn có thể thấy một image layer cơ sở của Ubuntu Linux đã được thêm OpenSSL lên trên nó thông qua một lớp khác. Trên đó là web server Apache. Hãy nghĩ về các layer này chỉ đơn giản là chạy lệnh apt-get và thêm một gói phần mềm mới. Điều gì xảy ra nếu bạn cần cập nhật layer OpenSSL vì lỗ hổng bảo mật? Bạn chỉ cần xây dựng lại container với phiên bản mới nhất của phần mềm. Không có bản vá với một container; bạn phá hủy cái cũ và tạo lại cái mới với code được cập nhật. Ở phần sau của phần này, bạn sẽ tìm hiểu cách thức hoạt động của tính năng này thông qua Dockerfile, đó là cách Docker xây dựng các container image.
KIẾN TRÚC DOCKER
Cũng giống như động cơ của bạn trên ô tô, Docker Engine là thành phần trung tâm của kiến trúc Docker. Docker là một ứng dụng client/server cài đặt trên hệ điều hành Linux, Mac hoặc Windows và cung cấp tất cả các công cụ để quản lý môi trường container. Nó bao gồm Docker daemon và Docker client. Docker cho phép bạn đóng gói một ứng dụng với tất cả các phần phụ thuộc của nó (mã nhị phân, thư viện và code) thành một gói được tiêu chuẩn hóa để phát triển phần mềm.
Kiến trúc Docker bao gồm ba phần chính: client, Docker hosts, và docker registry (xem Hình 13-25).
Hình 13-25 Kiến Trúc Docker
Docker client là một command-line hữu dụng (chạy bằng lệnh docker) nói chuyện với REST API của Docker daemon để quản trị viên có thể phát hành các lệnh cho các hoạt động và quản lý các Docker container. Phía client có thể giao tiếp với phiên bản Docker cục bộ hoặc từ xa.
Docker host là nơi cư trú của Docker daemon. Docker daemon(dockerd) là một dịch vụ chạy trên hệ điều hành máy chủ và giao tiếp với nhân hệ điều hành để cho phép các container hoạt động. Máy client giao tiếp với Docker daemon thông qua REST API. Docker host chứa các container đang chạy và cũng giao tiếp với registry để kéo các container image được đặt ở đó. Khi các container được khởi chạy, daemon sẽ tìm kiếm các local image của nó và nếu image thích hợp có ở đó, nó sẽ khởi chạy container; nếu không tìm được image thích hợp, daemon yêu cầu registry cho file image và sau đó lưu trữ nó ở dạng cục bộ.
Registry là nơi lưu trữ các container image; nó cũng được biết đến như là một kho lưu trữ cho cơ sở hạ tầng của container. Bạn có thể kéo image từ registry để chạy hoặc đẩy image mới mà bạn tự tạo vào registry để lưu trữ. Sau đó các host khác trong cùng môi trường container của bạn có thể sử dụng image mà bạn đã đẩy lên. Một registry có thể là private(riêng tư), chỉ dành cho một tổ chức duy nhất, hoặc cũng có thể là public(công khai), như trong trường hợp của Docker Hub.
SỬ DỤNG DOCKER
Cách tốt nhất để làm quen với Docker là sử dụng nó. Tải phiên bản Docker thích hợp cho máy tính của bạn và khởi chạy các container của nó. Nó có sẵn cho cả macOS, Windows và Linux cho phép bạn cài đặt Docker engine và các tools command-line trực tiếp trên máy cục bộ của mình.
Lệnh docker chạy tiến trình client, tiến trình này giao tiếp với Docker daemon. Khi bạn gõ docker và nhấn Enter, bạn sẽ thấy một danh sách dài các lệnh có sẵn. Ví dụ 13-1 hiển thị phiên bản rút gọn của danh sách này.
Ví dụ 13-1 Danh sách lệnh Docker
Trong Ví dụ 13-1, hãy để ý danh sách các lệnh quản lý. Chúng đại diện cho hệ thống phân cấp mới mà Docker nhóm các lệnh con. Đối với các lệnh hoạt động trên các container, bạn có thể nhập docker container và sau đó nhập thao tác bạn muốn thực hiện. Bất cứ lúc nào, bạn có thể nhập --help để biết thêm chi tiết về những lệnh nào có sẵn, như được minh họa trong Ví dụ 13-2.
Ví dụ 13-2 Docker Container Help
Bạn cũng có thể chạy lệnh docker container COMMAND –help để có thêm thông tin về một lệnh nào đó
Đối với mục đích của kỳ thi 200-901 DevNet Associate DEVASC, bạn phải biết cách sử dụng các Docker image trong môi trường nhà phát triển cục bộ. Điều này có nghĩa là bạn không được mong đợi là một chuyên gia về mọi thứ trong Docker, nhưng bạn cần biết cách build, khởi chạy và quản lý container trên máy cục bộ của mình trước đã. Các lệnh quản lý bạn sẽ sử dụng nhiều nhất để khởi chạy và làm việc với Docker nằm trong các danh mục container và image. Nếu bạn đang làm việc với một container image, bạn sử dụng các lệnh dưới phần image, và nếu bạn muốn chạy hoặc dừng một container, bạn sử dụng các lệnh dưới container. Miễn là bạn biết những gì bạn muốn làm việc, ánh xạ nó vào lệnh là khá đơn giản.
Hình 13-24 Các Layer Container Image Sử dụng Union File System
Khía cạnh read-only này của một container là một điều quan trọng cần được hiểu. Bạn cũng có thể nghe thấy thuật ngữ immutable(bất biến) được sử dụng để mô tả container file system; nó chỉ đơn giản có nghĩa là không thay đổi theo thời gian. Nói cách khác, một container không được vá; thay vào đó, nó được tạo lại với các layer mới được thêm vào. Trong Hình 13-24, bạn có thể thấy một image layer cơ sở của Ubuntu Linux đã được thêm OpenSSL lên trên nó thông qua một lớp khác. Trên đó là web server Apache. Hãy nghĩ về các layer này chỉ đơn giản là chạy lệnh apt-get và thêm một gói phần mềm mới. Điều gì xảy ra nếu bạn cần cập nhật layer OpenSSL vì lỗ hổng bảo mật? Bạn chỉ cần xây dựng lại container với phiên bản mới nhất của phần mềm. Không có bản vá với một container; bạn phá hủy cái cũ và tạo lại cái mới với code được cập nhật. Ở phần sau của phần này, bạn sẽ tìm hiểu cách thức hoạt động của tính năng này thông qua Dockerfile, đó là cách Docker xây dựng các container image.
KIẾN TRÚC DOCKER
Cũng giống như động cơ của bạn trên ô tô, Docker Engine là thành phần trung tâm của kiến trúc Docker. Docker là một ứng dụng client/server cài đặt trên hệ điều hành Linux, Mac hoặc Windows và cung cấp tất cả các công cụ để quản lý môi trường container. Nó bao gồm Docker daemon và Docker client. Docker cho phép bạn đóng gói một ứng dụng với tất cả các phần phụ thuộc của nó (mã nhị phân, thư viện và code) thành một gói được tiêu chuẩn hóa để phát triển phần mềm.
Kiến trúc Docker bao gồm ba phần chính: client, Docker hosts, và docker registry (xem Hình 13-25).
Hình 13-25 Kiến Trúc Docker
Docker client là một command-line hữu dụng (chạy bằng lệnh docker) nói chuyện với REST API của Docker daemon để quản trị viên có thể phát hành các lệnh cho các hoạt động và quản lý các Docker container. Phía client có thể giao tiếp với phiên bản Docker cục bộ hoặc từ xa.
Docker host là nơi cư trú của Docker daemon. Docker daemon(dockerd) là một dịch vụ chạy trên hệ điều hành máy chủ và giao tiếp với nhân hệ điều hành để cho phép các container hoạt động. Máy client giao tiếp với Docker daemon thông qua REST API. Docker host chứa các container đang chạy và cũng giao tiếp với registry để kéo các container image được đặt ở đó. Khi các container được khởi chạy, daemon sẽ tìm kiếm các local image của nó và nếu image thích hợp có ở đó, nó sẽ khởi chạy container; nếu không tìm được image thích hợp, daemon yêu cầu registry cho file image và sau đó lưu trữ nó ở dạng cục bộ.
Registry là nơi lưu trữ các container image; nó cũng được biết đến như là một kho lưu trữ cho cơ sở hạ tầng của container. Bạn có thể kéo image từ registry để chạy hoặc đẩy image mới mà bạn tự tạo vào registry để lưu trữ. Sau đó các host khác trong cùng môi trường container của bạn có thể sử dụng image mà bạn đã đẩy lên. Một registry có thể là private(riêng tư), chỉ dành cho một tổ chức duy nhất, hoặc cũng có thể là public(công khai), như trong trường hợp của Docker Hub.
SỬ DỤNG DOCKER
Cách tốt nhất để làm quen với Docker là sử dụng nó. Tải phiên bản Docker thích hợp cho máy tính của bạn và khởi chạy các container của nó. Nó có sẵn cho cả macOS, Windows và Linux cho phép bạn cài đặt Docker engine và các tools command-line trực tiếp trên máy cục bộ của mình.
Lệnh docker chạy tiến trình client, tiến trình này giao tiếp với Docker daemon. Khi bạn gõ docker và nhấn Enter, bạn sẽ thấy một danh sách dài các lệnh có sẵn. Ví dụ 13-1 hiển thị phiên bản rút gọn của danh sách này.
Ví dụ 13-1 Danh sách lệnh Docker
Trong Ví dụ 13-1, hãy để ý danh sách các lệnh quản lý. Chúng đại diện cho hệ thống phân cấp mới mà Docker nhóm các lệnh con. Đối với các lệnh hoạt động trên các container, bạn có thể nhập docker container và sau đó nhập thao tác bạn muốn thực hiện. Bất cứ lúc nào, bạn có thể nhập --help để biết thêm chi tiết về những lệnh nào có sẵn, như được minh họa trong Ví dụ 13-2.
Ví dụ 13-2 Docker Container Help
Bạn cũng có thể chạy lệnh docker container COMMAND –help để có thêm thông tin về một lệnh nào đó
Đối với mục đích của kỳ thi 200-901 DevNet Associate DEVASC, bạn phải biết cách sử dụng các Docker image trong môi trường nhà phát triển cục bộ. Điều này có nghĩa là bạn không được mong đợi là một chuyên gia về mọi thứ trong Docker, nhưng bạn cần biết cách build, khởi chạy và quản lý container trên máy cục bộ của mình trước đã. Các lệnh quản lý bạn sẽ sử dụng nhiều nhất để khởi chạy và làm việc với Docker nằm trong các danh mục container và image. Nếu bạn đang làm việc với một container image, bạn sử dụng các lệnh dưới phần image, và nếu bạn muốn chạy hoặc dừng một container, bạn sử dụng các lệnh dưới container. Miễn là bạn biết những gì bạn muốn làm việc, ánh xạ nó vào lệnh là khá đơn giản.