Docker là một nền tảng để cung cấp cách để building, deploying và running ứng dụng dễ dàng hơn bằng cách sử dụng các containers (trên nền tảng ảo hóa). Ban đầu viết bằng Python, hiện tại đã chuyển sang Golang.
Open source project
Giúp đóng gói các ứng dụng vào trong các thùng chứa (container) để building và run ứng dụng một cách dễ dàng và tiện lợi, không phụ thuộc vào môi trường
Các lập trình viên trên thế giới đều có một nhận xét chung và tích cực nhất về docker là “nhanh”,“nhẹ” và “gọn”
Lịch sử ra đời
Solomon Hykes bắt đầu tạo ra Docker khi làm việc ở Pháp trong một dự án nội bộ của dotCloud, (theo wikipedia)
Bản Release open source đầu tiên ra mắt vào 03/2013
Vào ngày 13 năm 2014, với phiên bản 0.9, Docker bỏ đi LXC và thay thế nó với thư viện của mình là libcontainer được viết bằng ngôn ngữ Go (Golang)
Docker Engine: bộ open source mô phỏng hóa container kết hợp với tools để build và run container
Docker Image: Thành phần cốt lõi của docker là phần cơ bản để build lên container và từ các container sẽ build lên các application, các docker image sẽ được share lên docker hub
Docker Container: được tạo ra từ docker images
Cách tạo 1 container từ command :
Docker run ubuntu:18.04
Ở đây mình chạy 1 container để build hệ điều hành ubuntu phiên bản 18.04
Nếu trong máy tính cá nhân thì docker sẽ chạy container và build lên hệ điều hành ubuntu.
Nếu không có docker sẽ tự pull image ubuntu từ docker hub về và build
Dockerfile:
Là file config cho Docker để build ra image. Nó dùng một image cơ bản để xây dựng lớp image ban đầu. Một số image cơ bản: python, unbutu and alpine. Sau đó nếu có các lớp bổ sung thì nó được xếp chồng lên lớp cơ bản. Cuối cùng một lớp mỏng có thể được xếp chồng lên nhau trên các lớp khác trước đó.
Là một file chứa các thông tin hệ thống để build ra 1 image để chạy container và đóng gói my application
Đây là nội dung của 1 file dockerfile
Docker Hub: Là kho chứa của docker dùng để chứa các image để build container
Docker Cloud
Docker orchestration
3. Các config trong dockerfile
FROM — chỉ định image gốc: python, unbutu, alpine…
LABEL — cung cấp metadata cho image. Có thể sử dụng để add thông tin maintainer. Để xem các label của images,
dùng lệnh docker inspect.
ENV — thiết lập một biến môi trường.
RUN — Có thể tạo một lệnh khi build image. Được sử dụng để cài đặt các package vào container.
COPY — Sao chép các file và thư mục vào container.
ADD — Sao chép các file và thư mục vào container.
CMD — Cung cấp một lệnh và đối số cho container thực thi. Các tham số có thể được ghi đè và chỉ có một CMD.
WORKDIR — Thiết lập thư mục đang làm việc cho các chỉ thị khác như: RUN, CMD, ENTRYPOINT, COPY, ADD,…
ARG — Định nghĩa giá trị biến được dùng trong lúc build image.
ENTRYPOINT — cung cấp lệnh và đối số cho một container thực thi.
EXPOSE — khai báo port lắng nghe của image.
VOLUME — tạo một điểm gắn thư mục để truy cập và lưu trữ data.