post-image

Những kiến thức cơ bản về Docker

Docker

1. Docker là gì?

Theo nguồn wikipedia: “Docker là một dự án mã nguồn mở giúp tự động triển khai các ứng dụng Linux và Windows vào trong các container ảo hóa.”

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. Bằng cách sử dụng Docker, bạn có thể nhanh chóng triển khai và thay đổi quy mô ứng dụng vào bất kỳ môi trường nào và biết chắc rằng mã của bạn sẽ chạy được.

Cách thức hoạt động của Docker

Docker hoạt động bằng cách cung cấp phương thức tiêu chuẩn để chạy mã của bạn. Docker là hệ điều hành dành cho container. Cũng tương tự như cách máy ảo ảo hóa (loại bỏ nhu cầu quản lý trực tiếp) phần cứng máy chủ, các container sẽ ảo hóa hệ điều hành của máy chủ. Docker được cài đặt trên từng máy chủ và cung cấp các lệnh đơn giản mà bạn có thể sử dụng để dựng, khởi động hoặc dừng container.

THAM GIA KHÓA HỌC LẬP TRÌNH

Cách thức hoạt động của Docker

Docker bao gồm các thành phần chính:

  • Docker Engine: dùng để tạo ra Docker image và chạy Docker container.
  • Docker Hub: dịch vụ lưu trữ giúp chứa các Docker image.

Một số khái niệm khác:

  • Docker Machine:tạo ra các Docker engine trên máy chủ.
  • Docker Compose: chạy ứng dụng bằng cách định nghĩa cấu hình các Docker container thông qua tệp cấu hình
  • Docker image: 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: một dạng runtime của các Docker image, dùng để làm môi trường chạy ứng dụng.

THAM KHẢO WEBSITE SPRING BOOT

Docker mang lại những giá trị gì

  • Với Docker, chúng ta có thể đóng gói mọi ứng dụng vd như webapp, backend, MySQL, BigData…thành các containers và có thể chạy ở “hầu hết” các môi trường vd như Linux, Mac, Window…
  • Docker Containers có một API cho phép quản trị các container từ bên ngoài. Giúp cho chúng ta có thể dễ dàng quản lí, thay đổi, chỉnh sửa các container.
  • Hầu hết các ứng dụng Linux có thể chạy với Docker Containers.
  • Docker Containers có tốc độ chạy nhanh hơn hẳn các VMs truyền thống (theo kiểu Hypervisor). Điều này là một ưu điểm nổi bật nhất của Docker

2. Sự khác biệt giữa Docker và Hypervisors

Docker và Hypervisors

Hypervisors là gì?

Hypervisor là ảo hỏa nằm ở tầng Hardware (phần cứng), tức là mô phỏng phần cứng và chạy những OS con trên phần cứng đó (Các công cụ Hypervisor như Virtual Box, VMware..)

Sự khác biệt giữa Docker và Hypervisors

Docker: Dùng chung kernel, chạy độc lập trên Host Operating System và có thể chạy trên bất kì hệ điều hành nào cũng như cloud. Khởi động và làm cho ứng dụng sẵn sàng chạy trong 500ms, mang lại tính khả thi cao cho những dự án cần sự mở rộng nhanh.

Virtual Machine(Hypervisors): Cần thêm một Guest OS cho nên sẽ tốn tài nguyên hơn và làm chậm máy thật khi sử dụng. Thời gian khởi động trung bình là 20s có thể lên đến hàng phút, thay đổi phụ thuộc vào tốc độ của ổ đĩa

3. Sự khác biệt giữa Docker Image và Docker Container

Docker Images

Là một template chỉ cho phép đọc, ví dụ một image có thể chứa hệ điều hành Ubuntu và web app. Images được dùng để tạo Docker container. Docker cho phép chúng ta build và cập nhật các image có sẵn một cách cơ bản nhất, hoặc bạn có thể download Docker images của người khác.

Docker Container

Docker container có nét giống với các directory. Một Docker container giữ mọi thứ chúng ta cần để chạy một app. Mỗi container được tạo từ Docker image. Docker container có thể có các trạng thái run, started, stopped, moved và deleted.

4. Làm thế nào để tạo ra một Docker Image bằng Dockerfile

Dockerfile là gì?

Dockerfile là một tập tin dạng text chứa một tập các câu lệnh để tạo mới một Image trong Docker.

Một số lệnh trong Dockerfile:

  • FROM <base_image>:<phiên_bản>: đây là câu lệnh bắt buộc phải có trong bất kỳ Dockerfile nào. Nó dùng để khai báo base Image mà chúng ta sẽ build mới Image của chúng ta.
  • MAINTAINER <tên_tác_giả>: câu lệnh này dùng để khai báo trên tác giả tạo ra Image, chúng ta có thể khai báo nó hoặc không.
  • RUN <câu_lệnh>: chúng ta sử dụng lệnh này để chạy một command cho việc cài đặt các công cụ cần thiết cho Image của chúng ta.
  • CMD <câu_lệnh>: trong một Dockerfile thì chúng ta chỉ có duy nhất một câu lệnh CMD, câu lệnh này dùng để xác định quyền thực thi của các câu lệnh khi chúng ta tạo mới Image.
  • ADD <src> <dest>: câu lệnh này dùng để copy một tập tin local hoặc remote nào đó (khai báo bằng <src>) vào một vị trí nào đó trên Container (khai báo bằng dest).
  • ENV <tên_biến>: định nghĩa biến môi trường trong Container.
  • ENTRYPOINT <câu_lệnh>: định nghĩa những command mặc định, cái mà sẽ được chạy khi container running.
  • VOLUME <tên_thư_mục>: dùng để truy cập hoặc liên kết một thư mục nào đó trong Container.

Ví dụ về Dockerfile

$ sudo apt-get update
$ sudo apt-get install docker.io
Code language: JavaScript (javascript)

Kiểm tra để chắc chắn đã cài thành công docker

$ docker -v
Docker version 17.12.0-ce, build c97c6d6
  • Tạo một folder bằng lệnh như bên dưới
$ mkdir docker-image
$ cd docker-image
$ touch Dockerfile
$ touch script.sh
  • Trong file Dockerfile
FROM alpine

MAINTAINER QUY

COPY script.sh /script.sh

CMD ["/script.sh"]
Code language: JavaScript (javascript)
#! bin/sh

echo hello world, from a script file!
Code language: JavaScript (javascript)

Sau khi đã tạo cái file xong, chạy lệnh sau:

$ docker build .
Sending build context to Docker daemon  3.072kB
Step 1/4 : FROM alpine
 ---> 3fd9065eaf02
Step 2/4 : MAINTAINER QUY
 ---> Using cache
 ---> 4759e0f7f56d
Step 3/4 : COPY script.sh /script.sh
 ---> 420fa86d8721
Step 4/4 : CMD ["/script.sh"]
 ---> Running in f03416259b47
Removing intermediate container f03416259b47
 ---> 73dfa9b63cd8
Successfully built 73dfa9b63cd8
```markdown
Sau khi build thành công, thực hiện run image:
Code language: JavaScript (javascript)
$ docker run --name test  73dfa9b63cd8.

hello world, from a script file!
Code language: JavaScript (javascript)

Ngoài ra, bạn có thể kiểm tra các container đã build từ image

$ docker ps -a
CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS                     PORTS                    NAMES
a3bdcee1a850        73dfa9b63cd8                      "/script.sh"             7 minutes ago       Exited (0) 7 minutes ago                            quy
4c4d6861c295        6eb882774c34                      "/script.sh"             8 minutes ago       Up 8 minutes                                        test
9fefbc7c63b3        ubuntu                            "/bin/bash"              9 days ago          Exited (0) 9 days ago                               stupefied_ramanujan
Code language: JavaScript (javascript)

Vậy là chúng ta đã xây dựng xong 1 Dockerfile build và run một Docker Image đơn giản, tuy nhiên cần tìm hiểu kỹ hơn để áp dụng cho các dự án.

Happy learning!!!

Leave a Reply

Your email address will not be published. Required fields are marked *