You are on page 1of 7

Docker > dockerfile --build image –push--> container

Dockerfile: Công thức, file


Image: Tài nguyên của app: code, library, os
Container: thành phẩm
I. Docker la gì ? and Container là gì ?
II. Install Docker
III. Manager Docker Containers
IV. Manage Docker Images
V. Docker compose
VI. Docker Swarm
Docker là nền tảng phần mềm cho phép bạn dựng, kiểm thử và triển khai ứng
dụng một cách nhanh chóng. Docker đóng gói phần mềm vào các đơn vị tiêu
chuẩn hóa được gọi là container có mọi thứ mà phần mềm cần để chạy, trong đó
có thư viện, công cụ hệ thống, mã và thời gian chạy.
Dockerfile là một tệp văn bản chứa một tập hợp các hướng dẫn để xây dựng một Docker
image. Nó mô tả cách Docker image nên được tạo ra và chứa thông tin về cơ sở hạ tầng, mã
nguồn, cấu hình, và các tác vụ khác.

Docker image là một gói đóng gói chứa mọi thứ cần thiết để chạy một ứng dụng,
bao gồm mã nguồn, thư viện, biên dịch, cấu hình, và các phụ thuộc khác. Một image
có thể được tạo từ một Dockerfile hoặc được tải từ một registry như Docker Hub.
Docker container là một phiên bản chạy của một Docker image. Nó là một quy trình
độc lập chứa tất cả những gì cần thiết để chạy ứng dụng, bao gồm cả hệ điều hành,
mã nguồn, và các thư viện.

Vì theo một cách nào đó, images chỉ là các mẫu, bạn không thể start hoặc run
chúng. Những gì bạn có thể làm là sử dụng mẫu đó làm cơ sở để xây dựng một
container. Một container cuối cùng chỉ là một image đang chạy. Khi bạn tạo một
container, nó sẽ thêm một lớp có thể ghi lên trên image bất biến, nghĩa là bây giờ
bạn có thể sửa đổi nó.

Image mà ở đó bạn tạo một container tồn tại riêng biệt và không thể thay đổi.
Khi bạn chạy một môi trường containerized, về cơ bản, bạn tạo một bản sao đọc-
ghi của image bên trong container. Lúc này nó sẽ thêm một Container Layer cho
phép sửa đổi toàn bộ bản sao của image.

Do đó, Docker image có thể bao gồm một loạt các layer, mỗi layer khác nhau
nhưng cũng có nguồn gốc từ layer trước. Các image layer đại diện cho các
readonly-file mà chứa thêm các container layer mỗi khi bạn sử dụng nó để khởi
động một virtual environment.

Docker Container la gì ?

- Docker container là một run-time environment mà ở đó người dùng có thể


chạy một ứng dụng độc lập. Những container này rất gọn nhẹ và cho phép
bạn chạy ứng dụng trong đó rất nhanh chóng và dễ dàng.
- Một tính năng quan trọng của container là tính chuẩn xác cho việc chạy
các ứng dụng trong container. Không chỉ đảm bảo cho ứng dụng hoạt
động như nhau trong các môi trường giống nhau, nó còn làm đơn giản
việc cài đặt và chia sẻ cài đặt này cho các thành viên trong team.
- Vì container hoạt động độc lập, nó đảm bảo không làm ảnh hưởng xấu
đến các container khác, cũng như server mà nó đang chạy trong đó.
Docker được cho là "tạo ra sự độc lập tuyệt vời". Vì vậy, bạn sẽ không
cần lo lắng việc máy tính của bạn bị xung đột do ứng dụng đang được
phát triển được chạy trong container.
- Không giống như máy ao (VM) nơi mà sự ảo hóa (virtualization) xảy ra ở
tầng phần cứng (hardware level), container chỉ ảo hóa ở lớp ứng dụng
(app level). Nó có thể dùng 1 máy, chia sẻ kernel và giả môi trường để
chạy process độc lập. Điều này làm cho container cực kì nhẹ, không
chiếm nhiều tài nguyên của máy.

- Sự khác nhau giữa Docker image và container


Khi thảo luận về sự khác nhau giữa image và container, nó không đúng khi cho
răng nó là 2 thực thể đối lập. Cả 2 khá giống nhau và là 1 phần của system được
đưa ra bởi Docker platform. Nếu bạn đã đọc 2 section phía trước định nghĩa về
image và container, bạn chắc chắn đã có những hiểu biết nhất định về cách
chúng tạo ra mối liên hệ.

Image có thể tồn tại mà không cần container, trong khi container chạy thì
cần có image đã tồn tại. Vì vậy, container phụ thuộc vào image và sử dụng nó
để tạo ra run-time environment và chạy ứng dụng trên đó.

Cả image và container đều là thành phần quan trọng để tạo ra 1 running


container. Docker image là cực kì quan trọng để chi phối và định hình 1 Docker
container.

Từ Docker file đến Image đến Container


Tất cả bất đầu từ 1 script gồm các instruction mà định nghĩa cách để tạo ra 1
Docker image. Đoạn script này được gọi là Docker file. File này chạy 1 loạt các
command và tạo ra 1 Docker image. Câu lệnh để tạo ra 1 image từ Dockerfile
là docker build

Image sau đó được sử dụng như 1 template (base), được các developer copy và
sử dụng để chạy ứng dụng. Ứng dụng cần 1 môi trường độc lập để chạy
container. Môi trường này không chỉ là 1 virtual "space". Nó hoàn toàn dựa trên
image tạo ra nó. Source code, files, dependencies, và binary libraries, tất cả đều
được chứa trong Docker image, cái mà tạo nên container.

Để tạo ra 1 container từ 1 image, sử dụng lệnh docker create

Cuối cùng, sau khi bạn chạy container từ 1 image, bạn start các services trong
container đó và chạy ứng dụng của b

Tạo 1 docker image từ 1 container


Nếu bạn thay đổi 1 vài thứ từ image gốc và muốn giữ sự thay đổi đó cho tương
lai, bạn có thể lưu cái image đã được modify này bằng cách tạo ra 1 screenshot
cho trạng thái hiện tại của container. Bằng cách đó bạn attach container layer
mới trên image gốc, cuối cùng tạo ra 1 image mới (đương nhiên là immutable).
Kết quả là bạn có 2 Docker image mà đều kế thừa từ chung các filesystem.

Kiến trúc của Docker Swarm

Kiến trúc Swarm bao gồm một tập hợp các node có ít nhất một nút chính
(Manager-Leader) và một số node worker có thể là máy ảo hoặc vật lý.

 Swarm: là một cluster của một node trong chế độ Swarm, thay vì phải
chạy các container bằng câu lệnh thì ta sẽ thiết lập các services để phân
bổ các bản replicas tới các node.
 Manager Node: Là node nhận các define service từ user, quản lý theo dõi
các service và tác vụ đang chạy trong Swarm, điều phối và chỉ định các
node worker làm việc
 Worker Node: là một máy vật lý hay máy ảo chạy các tác vụ được chỉ
định bới node manager
 Task: là các Docker containers thực thi các lệnh bạn đã định nghĩa trong
service. Tác vụ này sẽ do node Manager phân bổ xuống, và sau khi việc
phân bổ này task không thể chuyển sang một worker khác. Nếu task thất
bại, node Manager sẽ chỉ định một phiên bản mới của tác vụ đó cho một
node có sẵn khác trong Swarm.
 Service: Một service xác định image của container và số lượng các
replicas (bản sao) mong muốn khởi chạy trong Swarm.

II. Basic of kubernets


1. Kubernets là gì ?
Kubernetes (viết tắt là K8s) là một hệ thống mã nguồn mở được thiết kế để
quản lý và tự động hóa việc triển khai, mở rộ, và quản lý ứng dụng chứa
container. Nó cung cấp một giải pháp để giải quyết các thách thức liên quan đến
quản lý ứng dụng phức tạp và có thể mở rộ trên các môi trường đám mây và on-
premises.

2. Phân biệt docker và kubernets

Việc chạy ứng dụng trên môi trường production ngày càng phổ biến, để quản lý
tốt hệ thống containeziration chúng ta sử dụng kubernet để giải quyết vấn đề đó.
Nodes
Một node ở đây có thể hiểu là một máy ảo hoặc máy vật lý chạy Kubernetes.

Bạn hãy tưởng tượng khi bạn có ứng dụng với nhiều microservices khác nhau.
Để tránh trường hợp tất cả services đều chết, hoặc scale về CPU và RAM thì bạn
phải kết hợp rất nhiều máy ảo hay các máy vật lý với các host khác nhau. Điều
này gây khó khăn việc quản lý, khi làm việc chỉ với một máy, sẽ gặp các vấn đề
như không đủ tài nguyên, không thể backup khi sự cố xảy ra chẳng hạn. CHúng
ta sẽ nghĩ ngay tới join các host, máy ảo ... với nhau để phục vụ được mục đích
của chúng ta.

Pod
Pod ở đây là tập hợp các container xử lý với mục đích nào đó, chia sẻ không
gian lưu trữ, địa chỉ IP với nhau. Một Node có thể có nhiều Pods.

Để dễ hiểu hơn mình có ví dụ sau:

 backend: Flask, Nginx, uwsgi


 frontend: Node:10 alpine, nginx

- Docker is a software development platform to deploy apps


- Apps are packaged in containers that can be run on any OS
- Use cases: microservices architecture,…

You might also like