logo

Đang load dữ liệu

logo devmaster

VIỆN CÔNG NGHỆ VÀ ĐÀO TẠO DEVMASTER

Đào tạo - Phần mềm - Cho thuê nhân sự

  • 0969.609.003
  • 0978.611.889
  • Trang chủ
  • Các khoá đào tạo
    • Chuyên đề WEB - PHP

      • Lập trình web với HTML5 - CSS3- JQuery - Bootstrap - Ajax - [36 giờ]
      • Lập trình web frontend - reactjs - [75 giờ]
      • Lập trình web với mã nguồn mở PHP&MYSQL - PHP FRAMEWORK [126 giờ]

      Chuyên đề Mobile

      • Lập trình Games/Apps trên nền tảng Android - [120 giờ]
      • Lập trình Games/Apps trên nền tảng IOS - [120 giờ]

      Chuyên đề JAVA

      • Ngôn ngữ lập trình hướng đối tượng với java - [40 giờ]
      • Lập trình ứng dụng với java - [100 giờ]
      • Lập trình web site với java framework (JPA, HIBERNATE, SPRING MVC, SPRINGBOOT) - [276 giờ]

      Chuyên đề NETWORK/SECURITY

      • Khoá học Quản trị hạ tầng mạng CCNA v6 - [72 giờ]
      • Khoá học quản trị hệ thống với Windows SERVER 2012- [72 giờ]
      • Chuyên gia bảo mật hệ thống CompTIA + - [110 giờ]

      Chuyên đề .NET

      • Nền tảng lập trình hướng đối tượng với C# - [40 giờ]
      • Lập trình ứng dụng WINDOWS FORM - [100 giờ]
      • Lập trình Web với ASP.NET MVC 5, WebAPI - [145 giờ]

      Chuyên đề khác

      • Ngôn ngũ lập trình C/C++ - [80 giờ]
  • Lập trình cho trẻ em
  • Dịch vụ
    • Đào tạo theo như cầu
    • Cung cấp thiết bị - Phần mềm
    • Tư vấn - Thiết kế mạng hạ tầng
    • Tư vấn - Triển khai dịch vụ mạng
    • Tư vấn - Tư vấn, triển khai giám sát hệ thống
    • Thực tập dự án
  • Lịch khai giảng
  • Tin tức
    • Tin tức và sự kiện
    • Tin hoạt động
    • Tin công nghệ
    • Hội thảo, workshop, Codecam
    • Thông tin việc làm
    • Cẩm nang chia sẻ kiến thức
  • Tiện ích
  • Liên hệ

Cẩm nang chia sẻ kiến thức

May - 2019

31

Docker và những câu hỏi phổ biến

Cẩm nang chia sẻ kiến thức

Docker và những câu hỏi phổ biến

 

Docker là gì và sử dụng để làm gì?

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

Nghe có vẻ trừu tượng và khó hiểu. Hãy tưởng tượng như này, vào một ngày đẹp trời bạn được phân công vào một dự án PHP mới, bạn hứng khởi bay ngay vào vọc code và đọc file Readme.md thì ôi thôi… Dự án yêu cầu cài cắm một đống thứ như là PHP, MySql, Nginx, Redis …vân vân và mây mây. Còn chưa kể phiên bản PHP và MySql lại hoàn toàn khác so với phiên bản trong máy của bạn, cứ thế mà dùng có được không hay lại sinh ra những bug trên trời vì conflict phiên bản? Vậy lối đi nào cho em. 😦. Có cách nào để chạy code mà không cần cài cắm cái đống nhì nhằng đó không….. Giải pháp chính là Docker. Với Docker, mọi thứ trở lên đơn giản hơn nhiều, chỉ với vài dòng lệnh, bạn có thể nhanh chóng tạo được môi trường ảo hóa chứa đầy đủ những cài đặt cần thiết để chạy project rồi. :3 Vậy Docker là gì?

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

Hãy cùng tìm hiểu nhé…

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

Hypervisors là gì?

Hypervisor là 1 ứng dụng phần mềm chịu trách nhiệm chạy nhiều máy ảo trên 1 hệ thống, mỗi máy ảo đều chạy những OS riêng, nó trực tiếp tương tác với tài nguyên phần cứng . Một số cái tên sử dụng công nghệ này như VitualBox, hay VMware có lẽ bạn đã nghe đến rồi.

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

Hypervisors

  • Khi sử dụng cần thêm một máy ảo sử dụng một hệ điều hành riêng biệt, đồng thời phải cấp cho nó một dung lượng ổ cứng và Ram nhất định. Đồng nghĩa với việc kể cả khi không làm gì nhưng máy host vẫn phải phân phát tài nguyên dẫn đến lãng phí.
  • Thời gian khởi động và shutdown cũng khá lâu, tùy vào độ mạnh của máy, thậm chí có thể lên tới vài phút.

Docker

  • Sử dụng công nghệ containerlization, bằng cách sử dụng công nghệ này, trên một máy chủ ta có thể sinh ra được nhiều máy con, nhưng khác với Hypervisors là các máy con này sử dụng chung phần nhân của máy mẹ và chia sẻ tài nguyên của máy mẹ. Bởi vậy sẽ không xảy ra việc lãng phí tài nguyên, máy con cần bao nhiêu thì được cấp bấy nhiêu, thời gian khởi động cũng nhanh hơn nhiều.

Docker Image và Docker Container ?

Docker Image

Docker Image là nền tảng của Container, giúp định hình được Container Một Image bao gồm hệ điều hành ( ubuntu, debian, windows) và các môi trường lập trình chuyên dụng cài sẵn ( PHP, MySQL, Nginx, Python, Rail….) . Người sử dụng có thể tự tạo riêng cho mình một Image, hoặc sử dụng những Image của người khác trên kho chứa Docker Hub.

Docker Container

Docker Container có thể nói nó tương tự như một máy ảo, có được bằng cách sử dụng câu lệnh khởi chạy Image. Có thể hiểu Container như một cái thùng, trong cái thùng đó chứa tất cả những môi trường mà lập trình viên cần sử dụng để chạy project, mọi hoạt động trong cái thùng đó đều không ảnh hưởng tới môi trường bên ngoài.

  Một cái nhìn tổng quan nhất về Nodejs

Làm thế nào để tạo ra một Docker Image ?

Như trên mình cũng đã nhắc đến, Docker Hub là một kho chứa, nơi lưu trữ và chia sẻ các Image, rất đơn giản, bạn chỉ cần lên trang chủ Docker Hub và gõ Image bạn muốn tìm ( ở đây mình ví dụ Image MySQL) Để lấy về ta chỉ cần gõ câu lệnh: docker pull mysql

Làm thế nào để tạo ra một Docker Image ?

Và sau đó kiểm tra danh sách image bằng câu lệnh: docker images

Vậy làm cách nào để có thể tạo một Image và public lên Docker Hub?

  Tất tần tật về Node.js cho người mới bắt đầu

Chúng ta cần sử dụng Dockerfile: Dockerfile là một file dạng text không có đuôi. File này chứa danh sách các câu lệnh giúp thiết lập cấu trúc cho Image, quy định lên Image được khởi tạo từ đâu, bao gồm những môi trường nào. Để tạo ra một Docker Image, ta cần những file sau:

File script.sh chứa những câu lệnh được chạy khi bật container, File Dockerfile có nội dung như sau:

FROM ubuntu
MAINTAINER TuanPL<tuanphamle112@gmail.com>
 
RUN apt-get update
 
RUN apt-get install -y nginx
 
WORKDIR /venv
 
COPY script.sh /venv
 
RUN chmod a+x /venv/*
 
ENTRYPOINT ["/venv/script.sh"]
 
EXPOSE 80

File Script.sh:

#!/bin/bash
echo hello world
exec $@
 

Trong đó:

FROM : dùng để khai báo Image cha mà mình sử dụng, sau khi build image và Docker đọc tới câu lệnh này, nó sẽ tìm trong máy xem đã có image đó chưa ( trong ví dụ mình là ubuntu ), nếu chưa có nó sẽ lên Docker hub và tự động pull về.

RUN : Dùng để chạy các câu lệnh trong quá trình build image, ở đây mình sử dụng để cài đặt Nginx và sửa quyền cho thư mục /venv

WORKDIR : định nghĩa thư mục cho CMD bên trong container, ngay sau khi run Imagethành Container và truy cập terminal ở trong Container, ta sẽ ở thư mục này.

COPY : Copy file ở máy host sang thư mục của Container ( ở đây ta copy file script.shsang thư mục venv của Container, để sau khi Container được hình thành sẽ chạy vào file script.sh bên trong Container đó )

ENTRYPOINT : Việc điều hướng Container chạy vào file cript.shkhi Container được khởi tạo

EXPOSE : Container sẽ lắng nghe cổng mạng được chỉ định khi chạy

Xong công đoạn tạo Dockerfile, tiếp theo cùng build image nào:

sudo docker build -t ubuntu-nginx .

Trong đó :

ubuntu-nginx là tên image.

Option -t ở đây chỉ định việc đặt tên tùy chọn 1 tag theo định dạng : name:tag, nếu không chỉ định mặc định sẽ là latest.

Ok rồi, cùng xem thành quả nào : sudo docker images

-> Đã có Image, cùng chạy nó xem sao:

Tarraaaaaa ☀️ , sau khi Container được tạo đã chạy thẳng vào file script.sh, bạn có thể sử dụng file này để chạy các câu lệnh ( thường để start nginx, mysql,redis….)

Các câu lệnh thường sử dụng thao tác với Docker Image và Docker Container ?

Câu lệnh thao tác với Docker Image

  • docker images : Câu lệnh kiểm tra danh sách các image đã cài đặt
  • docker rmi  : Câu lệnh xóa 1 image chưa chạy dựa vào id hoặc tên
  • docker rmi -f  : Câu lệnh xóa 1 image kể cả khi đang chạy dựa vào id hoặc tên

Câu lệnh thao tác với Docker Container

  • docker ps : Câu lệnh liệt kê danh sách các container đang chạy
  • docker ps -a: liệt kê danh sách các container đang chạy và đã tắt
  • docker inspect { container_id } : Xem thông tin chi tiết của container được tạo ra
  • docker logs { container_id } : xem lịch sử container
  • docker rm : xóa 1 container dựa vào id hoặc tên
  • docker rm -f : xóa 1 container kể cả đang chạy
  • docker rm $(docker ps -a -q): xóa tất cả các container

Nguồn: DevmasterAcademy via viblo.asia

Các bài viết cùng chủ đề

BÍ QUYẾT HỌC LẬP TRÌNH CHO CÁC BẠN ĐẦU NĂM HỌC MỚI ❤
BÍ QUYẾT HỌC LẬP TRÌNH CHO CÁC BẠN ĐẦU NĂM HỌC MỚI...
5 Phương pháp hay để mở rộng các dự án React của bạn một cách dễ dàng
5 Phương pháp hay để mở rộng các dự án React của b...
Lab06.1 - Data Access In ASPNET MVC 5
Lab06.1 - Data Access In ASPNET MVC 5
Lab05 - Data Validation and Annotation In ASPNET MVC 5
Lab05 - Data Validation and Annotation In ASPNET M...
Lab 04 - Model in ASP.NET MVC 5 - Phần tự thực hành
Lab 04 - Model in ASP.NET MVC 5 - Phần tự thực hàn...
Lab 04 - Model in ASP.NET MVC 5 - Bài 4.2
Lab 04 - Model in ASP.NET MVC 5 - Bài 4.2

Các khóa đào tạo chuyên đề

Thiết kế và lập trình Website PHP, Laravel chuyên nghiệp - FullStack
Thiết kế và lập trình Website PHP, Laravel chuyên nghiệp - FullStack
Lập trình ứng dụng trên nền tảng android Lập trình ứng dụng trên nền tảng android
Lập trình Ứng dụng với Công nghệ ASP.NET Core MVC, WebAPI, ReactJS - FullStack

Lập trình Ứng dụng với Công nghệ ASP.NET Core MVC, WebAPI, ReactJS - FullStack
Lập trình ứng dụng với WINDOWS FORM Lập trình ứng dụng với WINDOWS FORM
Lập trình ứng dụng với JAVA (FORM) Lập trình ứng dụng với JAVA (FORM)
Thiết kế và lập trình Ứng dụng với công nghệ Java (Java Framework springBoot, hibernate,...) - FullStack
Thiết kế và lập trình Ứng dụng với công nghệ Java (Java Framework springBoot, hibernate,...) - FullStack
Thiết kế và lập trình website với công nghệ HTML5, CSS3, Javascript, Bootstrapt 4, Jquery Thiết kế và lập trình website với công nghệ HTML5, CSS3, Javascript, Bootstrapt 4, Jquery
Lập trình frontend với reacjs (Full) Lập trình frontend với reacjs (Full)
Viện Công Nghệ Và Đào Tạo Devmaster

DEVMASTER ACADEMY

Địa chỉ: Tầng 6 - Tòa nhà VIỆN CÔNG NGHỆ
Số 25, Vũ Ngọc Phan - Láng Hạ - Đống Đa - Hà Nội

Hotline: 0969 609 003 | 0978 611 889

devmaster.contact@gmail.com

hna.tvchung@gmail.com

CÁC KHÓA HỌC CHUYÊN ĐỀ

  • Thiết kế và lập trình Website PHP, Laravel chuyên nghiệp - FullStack
  • Lập trình ứng dụng trên nền tảng android
  • Lập trình Ứng dụng với Công nghệ ASP.NET Core MVC, WebAPI, ReactJS - FullStack
  • Lập trình ứng dụng với WINDOWS FORM
  • Lập trình ứng dụng với JAVA (FORM)
  • Thiết kế và lập trình Ứng dụng với công nghệ Java (Java Framework springBoot, hibernate,...) - FullStack
  • Thiết kế và lập trình website với công nghệ HTML5, CSS3, Javascript, Bootstrapt 4, Jquery
  • Lập trình frontend với reacjs (Full)
Viện Công Nghệ Và Đào Tạo Devmaster

VIỆN CÔNG NGHỆ VÀ ĐÀO TẠO DEVMASTER - Học thực tế * Làm thực tế * Cam kết việc làm
Copyright by Ⓒ DEVMASTER 2015