- vừa được xem lúc

Docker - những kiến thức cơ bản phần 1

0 0 65

Người đăng: Nguyễn Văn Quy

Theo Viblo Asia

Giới thiệu

Nếu bạn đang làm ở một công ty công nghệ thông tin, chắc rằng bạn đã được nghe nói về Docker. Thậm chí trong số các công nghệ "hot" nhất hiện nay như PostgreSQL, MongoDB, Apache Spark, Bash shell, AWS, Kafka, Jenkins, thì Docker vẫn nổi bật nhất. Các doanh nghiệp đều muốn Docker. Docker ngày càng trở nên gần gũi với các start-ups cũng như với những tập đoàn kinh tế lớn cho dù nó chỉ đang là một công cụ rất mới.

Mục lục

  1. Docker là gì?
  2. Sự khác biệt giữa Docker và Hypervisors
  3. Sự khác biệt giữa Docker Image và Docker Container
  4. Làm thế nào để tạo ra một Docker Image bằng Dockerfile

Nội dung

1. Docker là gì?

Docker là gi?

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."

Theo các trang mạng: "Docker là một open platform cung cấp cho người sử dụng những công cụ và service để người sử dụng có thể đóng gói và chạy chương trình của mình trên các môi trường khác nhau một cách nhanh nhất."

Lại có định nghĩa rằng: "Docker là một phương thức để đóng gói và sắp xếp phần mềm."

Chúng ta sẽ thiết lập cho app của mình các môi trường cần thiết với docker. Khi ai đó muốn chạy app đó thì chỉ cần chạy docker mà không cần phải cài môi trường cho app nữa vì docker đã giúp ta rồi. Bạn không cần phải biết về laravel, ruby on rails hay thậm chí là java cũng như các môi trường của nó mà vẫn chạy được app, thật là đơn giản đúng không nào!

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.

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

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

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"]
#! bin/sh echo hello world, from a script file!

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:
$ docker run --name test 73dfa9b63cd8. hello world, from a script file!

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

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.

Lời kết

Trong phần 1 này cơ bản chúng ta đã hiểu về docker cùng một số khái niệm quan trọng như Dockerfile, Docker Images, Docker Container...Mong được sự góp ý từ mọi người, hãy quan tâm và theo dõi phần sau cũng như series 2018 - Cùng nhau học Docker nhé ???

Nguồn:

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 500

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 374

- vừa được xem lúc

Đặt tên commit message sao cho "tình nghĩa anh em chắc chắn bền lâu"????

. Lời mở đầu. .

1 1 701

- vừa được xem lúc

Tìm hiểu về Resource Controller trong Laravel

Giới thiệu. Trong laravel, việc sử dụng các route post, get, group để gọi đến 1 action của Controller đã là quá quen đối với các bạn sử dụng framework này.

0 0 335

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 421

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 414