Giới thiệu về Docker
Docker là một nền tảng công nghệ giúp đơn giản hóa việc xây dựng, triển khai và quản lý ứng dụng bằng cách sử dụng các containers. Nó cho phép bạn đóng gói ứng dụng và tất cả các phụ thuộc của nó vào một container độc lập với môi trường, giúp đảm bảo rằng ứng dụng sẽ hoạt động đúng cách trên mọi máy tính hoặc môi trường máy chủ.
- Lợi ích:
- Đơn giản hóa việc triển khai ứng dụng
- Tiết kiệm tài nguyên
- Dễ dàng thiết lập môi trường làm việc.
- Tạo ra một môi trường độc lập để phát triển.
Cài đặt
-
Docker hỗ trợ nhiều hệ điều hành khác nhau nên bạn có thể tham khảo việc cài đặt docker cho hệ điều hành của bạn ở đây
-
Sau khi cài đặt xong bạn có thể kiểm trả bằng cách kiểm tra trên command line:
docker version
// or
docker info
Một vài khái niệm cần nắm
- Docker Client: là cách mà bạn tương tác với docker thông qua command.
- Docker Daemon: lắng nghe các yêu cầu từ Docker Engine thông qua giao thức
HTTP
hoặcUnix socket
và thực hiện yêu cầu. - Docker Volumes: để lưu trữ dữ liệu cho việc sử dụng và tạo apps.
- Docker Registry: nơi lưu trữ riêng của Docker Images. Images được push vào registry và client sẽ pull images từ registry.
- Docker Hub: là một dịch vụ đám mây cho phép lưu trữ và chia sẻ các container Docker.
- Docker Repository: là tập hợp các Docker Images cùng tên nhưng khác tag.
- Docker Networking: là tính năng cho phép các container Docker tương tác và giao tiếp với nhau và với mạng bên ngoài một cách linh hoạt.
- Docker Compose: Là công cụ để quản lý và triển khai nhiều ứng dụng (docker container) một cách dễ dàng.
- Docker Swarm: để phối hợp triển khai container.
- Docker Services: hiểu đơn giản là gồm các conntainer của ứng dụng và mỗi service chạy 1 image đã được định nghĩa.
Images và Container
Docker Images
docker image là một file bất biến - không thay đổi, chứa các source code, libraries, dependencies, tools và các files khác cần thiết cho một ứng dụng để chạy.
-
Do việc chỉ có thể đọc (read-only) nên nhưng images này còn được gọi là
snapshots
. Chúng đại diện cho một application và virtual environment của nó tại một thời điểm cụ thể. Nó cho phép các developers sử dụng một môi trường thống nhất để phát triển. -
Trên bản chất images chỉ là các mẫu nên bạn không thể start hoặc run chúng mà nó chỉ có thể làm mẫu để xây dựng 1 container.
Docker Container
Container là một thể hiện thực của một image. Nó bao gồm một môi trường chạy độc lập, chứa tất cả các thành phần cần thiết để chạy ứng dụng, bao gồm cả các thay đổi và cấu hình thêm.
- Nó là các thực thể di động, có thể tạo, khởi động, dừng và xóa một cách nhanh chóng. Các container độc lập với nhau và với hệ thống host của mình. Nó còn giúp cho việc cài đặt cho các thành viên một cách nhanh chóng.
- Các container không giống như máy ảo cần ảo hóa (
virtualization
) xảy ra ở tầng phần cứng mà chúng ảo hóa ở lớp ứng dụng. Nó dùng 1 máy chia sẻ kernel và làm giả môi trường để chạy một cách độc lập nên không hề tốn tài nguyên như máy ảo.
Sự tương quan giữa Images và Containers
Containers và Images là hai khái niệm cơ bản nhưng rất quan trọng trong Docker, là nền tảng cho việc đóng gói, triển khai và quản lý ứng dụng trong môi trường container. Mỗi container được tạo ra từ một image cụ thể. Một image có thể được sử dụng để tạo nhiều containers khác nhau, mỗi container có thể chạy với một tập hợp cấu hình và môi trường khác nhau.
Và Image có thể tồn tại mà không cần container, trong khi container chạy thì cần có image đã tồn tại. Vì vậy, container phụ thuộc vào image và sử dụng nó để tạo ra run-time environment và chạy ứng dụng trên đó.
Docker file
Dockerfile là một tệp văn bản chứa một loạt các chỉ thị (instructions
) cho quá trình xây dựng một Docker image. Nó được sử dụng để định nghĩa cách mà image sẽ được tạo ra, bao gồm các bước để cài đặt các phần mềm, cấu hình môi trường, và chạy các lệnh khởi động.
- Cấu trúc file:
- FROM: Chỉ định base image.
- RUN: Chạy một lệnh trong môi trường của container, thường được sử dụng để cài đặt các gói phần mềm hoặc thực thi các lệnh cần thiết.
- COPY hoặc ADD: Sao chép các tệp và thư mục từ máy host vào container.
- WORKDIR: Xác định thư mục làm việc mặc định cho các lệnh tiếp theo trong Dockerfile.
- EXPOSE: Khai báo các cổng mà container sẽ lắng nghe các kết nối từ bên ngoài.
- CMD/ENTRYPOINT: Xác định lệnh mặc định sẽ được thực thi khi container được khởi chạy.
Ví dụ: Tạo ra một image chứa một ứng dụng web Node.js
FROM node:alpine # Đặt thư mục làm việc mặc định
WORKDIR /app # Sao chép package.json và package-lock.json vào container
COPY package*.json ./ # Cài đặt dependencies
RUN npm install # Sao chép các file trong thư mục nguồn vào container
COPY . . # Mở cổng 3000 để truy cập ứng dụng web
EXPOSE 3000 # Chạy lệnh để khởi động ứng dụng web
CMD ["node", "app.js"]
Để chạy file trên bạn cần cd tới app của mình sau đó chạy lệnh sau trên teminal:
docker build -t myapp . docker run -p 3000:3000 myapp
trong đó:
docker build
dùng để build docker image từ dockerfile.-t myapp
: đặt tên và tag cho image làmyapp
.
chỉ đường dẫn tới thư mục chứa Dockerfile (trong trường hợp Dockerfile được đặt cùng với thư mục bạn đang ở).docker run
để chạy docker container từ image vừa tạo.-p 3000:3000
mở cổng 3000 trên máy host và liên kết với cổng 3000 trong container.myapp
là tên của image bạn đã build trước đó.
Sau khi đã chạy docker lên bạn chỉ cần sh
vào container để chạy các app của mình như bình thường.
docker exec -it myapp sh
Kết bài
Trên đây là một vài khái niệm cơ bản về docker. Mong rằng chúng giúp cho bạn hiểu rõ hơn về docker. Tìm hiểu thêm về docker tại đây.