Docker là gì?
Docker là một nền tảng phần mềm mã nguồn mở giúp tự động hóa việc triển khai ứng dụng trong các container. Docker giúp bạn tạo ra môi trường phát triển đồng nhất, giảm thiểu sự khác biệt giữa các môi trường và tăng tốc độ triển khai ứng dụng.
Docker giúp bạn đóng gói các ứng dụng của mình thành các container riêng biệt, có thể chạy trên bất kỳ máy chủ hoặc nền tảng đám mây nào có cài đặt Docker.
Docker đã trở thành một nền tảng quan trọng cho developers và sysadmin để develop, deploy và run application với container. Docker không chỉ giúp tăng hiệu suất làm việc, mà còn giúp tiết kiệm thời gian và tài nguyên.
Lịch sử ra đời của Docker
Docker được tạo ra vào năm 2013 bởi Solomon Hykes khi anh đang làm việc tại dotCloud, một công ty cung cấp dịch vụ lưu trữ đám mây. Ban đầu, Docker được xây dựng như một công cụ nội bộ nhằm giúp việc phát triển và triển khai ứng dụng trở nên dễ dàng hơn.
Các Docker containers được xây dựng dựa trên các Linux containers, một công nghệ đã xuất hiện từ đầu những năm 2000. Tuy nhiên, chúng không được sử dụng rộng rãi cho đến khi Docker tạo ra một nền tảng đơn giản và dễ sử dụng để chạy các containers. Nền tảng này nhanh chóng thu hút sự quan tâm của các nhà phát triển và quản trị viên hệ thống.
Vào tháng 3 năm 2014, Docker đã công bố mã nguồn mở của mình và trở thành một trong những dự án phổ biến nhất trên GitHub, thu hút hàng triệu USD từ các nhà đầu tư ngay sau đó.
Trong một khoảng thời gian ngắn, Docker đã trở thành một trong những công cụ phổ biến nhất để phát triển và triển khai phần mềm. Docker được rất nhiều người trong cộng đồng DevOps áp dụng!
Lợi ích của Docker
- Docker giúp Start và Stop các ứng dụng chỉ trong vài giây, nhanh hơn nhiều so với máy ảo.
- Bạn có thể khởi chạy các containers trên nhiều hệ thống khác nhau.
- Xây dựng được môi trường làm việc một cách dễ dàng. Chỉ cần config 1 lần cho môi trường dependencies
- Giúp tiết kiệm được rất nhiều dung lượng ổ đĩa và các tài nguyên hệ thống khác do không cần phải sử dụng “guest OS” cồng kềnh cho mỗi ứng dụng
- Tăng cường bảo mật bằng cách sử dụng API để giao tiếp với các containers
- Sử dụng Docker giúp bạn triển khai nhanh hơn gấp 7 lần so với người không sử dụng docker
Kiến trúc Docker và các khái niệm liên quan
Docker sử dụng kiến trúc client-server. Docker client giao tiếp với Docker daemon, Docker daemon thực hiện các tác vụ build, run và distribute container. Cả Docker client và Docker daemon có thể chạy trên cùng một máy, hoặc có thể kết nối từ xa. Docker Client và daemon giao tiếp thông qua API REST, qua ổ cắm UNIX hoặc giao diện mạng.
Docker Host bao gồm Docker Daemon (dockerd), API Server và các Docker Object như images, containers, networks, và volumes. Daemon cung cấp giao diện dòng lệnh phía máy khách (CLI) cho phép người dùng tương tác với daemon thông qua giao diện lập trình ứng dụng Docker.
Docker Engine là công cụ Client – Server hỗ trợ công nghệ container để xử lý các nhiệm vụ và quy trình công việc liên quan đến việc xây dựng các ứng dụng dựa trên container. Engine tạo ra một quy trình daemon phía máy chủ lưu trữ images, containers, networks, và storage volumes.
Docker daemon
Docker daemon (dockerd
) lắng nghe các yêu cầu API Docker và quản lý các đối tượng Docker như images, containers, networks, and volumes. Daemon cũng có thể giao tiếp với các daemon khác để quản lý các dịch vụ Docker.
Docker client
Docker Client docker
là cách chính mà nhiều người dùng Docker tương tác với Docker. Khi bạn sử dụng các lệnh như docker run
, máy khách(Client) sẽ gửi các lệnh này đến dockerd
, để thực hiện chúng. Lệnh docker
sử dụng API Docker. Docker Client có thể giao tiếp với nhiều daemon.
Docker Desktop
Docker Desktop có thể cài đặt dễ dàng trên môi trường Windows, Mac hoặc Linux, cho phép bạn xây dựng và chia sẻ các ứng dụng và dịch vụ vi mô trong bộ chứa. Docker Desktop bao gồm daemon Docker ( dockerd
), Docker Client ( docker
), Docker Compose, Docker Content Trust, Kubernetes và Trình trợ giúp thông tin xác thực.
Docker Hub
DockerHub có thể được mô tả như một “GitHub for Docker images”. DockerHub chứa hàng ngàn public images được tạo bởi cộng đồng, giúp bạn dễ dàng tìm thấy những image bạn cần. Bạn chỉ cần kéo (pull
) chúng về và sử dụng với một số config mong muốn.
Images
Images trong Docker là một khuôn mẫu được sử dụng để tạo ra các container. Thông thường, một image sẽ được xây dựng dựa trên một image có sẵn với các tùy chỉnh thêm. Ví dụ, bạn có thể xây dựng một image dựa trên image Centos có sẵn để chạy Nginx, cùng với các tùy chỉnh và cấu hình cần thiết để ứng dụng web của bạn có thể hoạt động. Bạn có thể tự xây dựng một image riêng cho mình hoặc sử dụng những image được chia sẻ từ cộng đồng Docker Hub. Một image sẽ được xây dựng dựa trên các chỉ dẫn của Dockerfile.
Containers
Container là một instance của một image. Bạn có thể create, start, stop, move or delete container dựa trên Docker API hoặc Docker CLI.
Docker File
Dockerfile là một tệp tin chứa các chỉ dẫn được sử dụng để build một Docker image.
Docker Volumes
Volumes là phần dữ liệu được tạo ra khi container được khởi tạo.
Quy trình thực thi của một hệ thống sử dụng Docker
Build
Đầu tiên tạo một tệp Dockerfile để chứa code của chúng ta. Dockerfile có thể được build trên bất kỳ máy tính nào có cài đặt Docker Engine. Sau khi build ta sẽ có được Container, trong Container này chứa ứng dụng kèm bộ thư viện của chúng ta.
Push
Sau khi có được container, chúng ta thực hiện đẩy (push) container này lên đám mây và lưu trữ nó tại đó.
Pull/Run
Nếu một máy tính khác muốn sử dụng container của chúng ta, thì máy đó phải thực hiện việc kéo (pull) container này về máy, tất nhiên máy này cũng phải cài Docker Engine. Sau đó, máy sẽ thực hiện chạy (run) container này.
Các lệnh cơ bản trong Docker
List image/container:
$ docker image/container ls
Delete image/container:
$ docker image/container rm <tên image/container >
Delete all image hiện có:
$ docker image rm $(docker images –a –q)
List all container hiện có:
$ docker ps –a
Stop all container:
$ docker stop $(docker ps –a –q)
Run container từ image và thay đổi tên container:
$ docker run –name <tên container> <tên image>
Delete all container hiện có:
$ docker rm $(docker ps –a –q)
Show log a container:
$ docker logs <tên container>
Build một image từ container:
$ docker build -t <tên container>
Tạo một container chạy ngầm:
$ docker run -d <tên image>
Tải một image trên docker hub:
$ docker pull <tên image>
Start một container:
$ docker start <tên container>
Stop a container cụ thể:
$ docker stop <tên container>