Docker là gì? Và cách sử dụng Docker

designnt

Member
Jul 25, 2013
405
1
6
33
Sức mạnh của Docker chính là container. Container là một khái niệm đã xuất hiện trên Linux trong nhiều năm qua. Nó ám chỉ một hoặc nhiều quy trình được tách biệt với phần còn lại của hệ thống, hiểu đơn giản là cách ly quy trình với hệ thống thực, về cơ bản thì nó giống máy ảo. Các container có tất cả các tệp chúng cần để chạy các quá trình đó độc lập với hệ thống, đó là lý do tại sao chúng trở thành một công cụ được sử dụng rất phổ biến để deployments.
docker


Docker đã mang sức mạnh của các container Linux này đến với mọi người và đó là lý do tại sao chúng được sử dụng trong các môi trường production khác nhau.

Docker giải quyết một vấn đề mà nhiều nhà phát triển phải đau đầu khi làm việc trên nhiều hệ thống. container giúp ứng dụng có thể chạy nhất quán trên bất kỳ hệ điều hành nào mà không phải lo lắng về các lỗi của môi trường phát triển và cấu hình khác nhau.

Docker là gì?


Bây giờ nói gọn là vậy: docker sẽ giúp gom nhóm các ứng dụng đã được cài đặt, khi muốn triển khai một project nào đó, chỉ cần gọi docker đó lên và khỏi cần cài lại mấy ứng dụng đã có sẵn trong docker. Ví dụ: bạn đã cài sẵn php, apche, ftp…, sau này muốn triển khai project khác thì chỉ cần kiu thằng docker ra, khỏi phải cài lại php, apche, ftp… nửa.

Còn khái niệm tổng quát về Docker là như thế này:

Docker là một công cụ mã nguồn mở xử lý vòng đời (lifecycle) của các container. Nó được sử dụng để đơn giản hóa cách bạn xây dựng và deploy trong quá trình phát triển. Điều đó có nghĩa là bạn có thể các container có tất cả dependencies mà bạn cần để chạy ứng dụng của mình và quản lý nó cho đến khi kết thúc quá trình phát triển.

Tùy thuộc vào nhu cầu của bạn, Docker container có thể được sử dụng để thay thế máy ảo. Máy ảo sử dụng nhiều tài nguyên hơn các container vì chúng cần một bản sao ảo của hệ điều hành và phần cứng nó cần để chạy. Và nó cũng chiếm hơi nhiều RAM nữa.

Docker container chỉ cần một bản sao ảo của hệ điều hành. Nó sẽ sử dụng tất cả các tài nguyên của máy chủ vật lý, vì vậy chúng không cần phải chia phần cứng để sử dụng như máy ảo.

Điều đó có nghĩa là container siêu nhẹ và có thể được sử dụng trên bất kỳ cấu hình hệ thống nào mà vẫn có thể chạy ứng dụng chính xác khi deploy trên local.

Với Docker, bạn có thể sử dụng container để phát triển trên local, sau đó chia sẻ container đó với các nhà phát triển khác và sử dụng cùng một container đó để deploy sản phẩm. Khi mọi thứ đã sẵn sàng, bạn có thể triển khai ứng dụng của mình dưới dạng container hoặc dưới dạng dịch vụ được điều phối và nó sẽ chạy chính xác theo cách mà nó đã làm trên local.

Tại sao bạn nên làm quen với docker?


Container giúp giải quyết vấn đề như “nó chạy trên máy tui bình thường mà”. Các nhà phát triển có thể chia sẻ container image, build, và run cùng container trên các máy khác nhau. Khi bạn có thể chạy code một cách nhất quán mà không cần lo lắng về môi trường cài đặt trên local, thì bạn có thể phát triển ứng dụng trên bất kỳ máy nào mà không cần phải thay đổi một loạt các cấu hình của máy đó để giống hệt local của bạn.

Làm việc với các Docker container cũng giúp việc triển khai (deploy) trên mọi môi trường dễ dàng hơn. Bạn không phải tính đến việc tiêu thụ thêm tài nguyên khi sử dụng máy ảo. Điều này sẽ giúp cải thiện hiệu suất và độ tin cậy của ứng dụng bằng cách cung cấp cho bạn một công cụ cho phép bạn quản lý tất cả các thay đổi mà code và container trong suốt quá trình phát triển.

Cách làm việc với Docker


Có một số thứ chính bạn cần phải nắm rõ khi làm việc với Docker là images và container.

Images


Docker images là các mẫu để tạo container. Docker có chỉ định các packages và môi trường máy chủ cấu hình sẵn nào dùng để chạy ứng dụng của bạn. Images được tạo từ một tập hợp các tệp được sử dụng để xây dựng các chức năng của container.

Các tệp này bao gồm dependencies, code cho ứng dụng và bất kỳ cài đặt nào khác mà bạn cần. Có một số cách để tạo một images mới. Bạn có thể lấy một container đang chạy và thay đổi một số thứ để lưu nó dưới dạng images mới hoặc bạn có thể tạo images mới ngay từ đầu bằng cách tạo Dockerfile mới.

Chúng ta sẽ xem qua Docker image bên dưới và phân tích nó. Hãy bắt đầu bằng cách tạo Dockerfile để chạy một ứng dụng React.

# pull official base image
FROM node:alpine3.12

# set working directory
WORKDIR /app

# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH

# install app dependencies
COPY package.json ./
COPY package-lock.json ./
RUN npm install
RUN npm install [email protected] -g

EXPOSE 3000

# add app
COPY . ./

# start app
CMD ["npm", "start"]

Đầu mỗi dòng trong tệp này là một từ khóa được sử dụng trong Docker để giúp nó hiểu phải làm gì. Trong tệp này, mình tạo base image cho Node để thiết lập môi trường mà mình cần để chạy ứng dụng React. Sau đó, mình tạo thư mục làm việc cho container.

Đây là nơi code ứng dụng sẽ được giữ trong container. Sau đó, bạn hãy đặt đường dẫn cho nơi các dependencies sẽ được cài đặt và tiếp tục cài đặt các dependencies được liệt kê trong packge.json của bạn. Tiếp theo, mình nói với Docker rằng container đang listening trên cổng 3000. Cuối cùng, bạn thêm ứng dụng vào đúng thư mục và khởi động nó.

Bây giờ chúng ta có thể xây dựng images bằng lệnh Docker:

docker build -t local-react:0.1 .

Đừng quên dấu “.” ở cuối dòng! Nó cho Docker biết bạn đang xây dựng images từ các tệp và thư mục trong thư mục làm việc hiện tại.

container


Bây giờ bạn đã xây dựng một images thành công, bạn có thể tạo một container với nó. Chạy images của bạn dưới dạng container bằng cách sử dụng lệnh Docker này:

docker run --publish 3000:3000 --detach --name lr local-react:0.1

Lệnh này lấy images của bạn và chạy nó như một container. Quay lại images, bạn đã thiết lập sẵn cổng 3000 của container có sẵn bên ngoài chính là container đó. Với –publish, bạn đang chuyển tiếp lưu lượng truy cập từ cổng 3000 của hệ thống sang container. Chúng ta phải làm như vậy, bởi vì nếu không tường lửa sẽ ngăn không cho tất cả lưu lượng mạng đến container của bạn.

–detach chạy container trong background của terminal. Điều đó có nghĩa là nó không lấy bất kỳ dữ liệu đầu vào hoặc đầu ra hiển thị nào. Đây là một tùy chọn phổ biến, nhưng bạn luôn có thể gắn container vào lại terminal nếu bạn cần sau này. –name cho phép bạn cung cấp tên cho container mà bạn sẽ cần cho các câu lệnh sau này. Trong trường hợp này, container được tạo tên là lr.

Bây giờ bạn đã có thể truy cập vào localhost: 3000 và xem ứng dụng của bạn đang chạy.

Kết luận


Docker có thể không được sử dụng ở mọi nơi, nhưng nó là một công nghệ phổ biến mà bạn nên biết. Nó giúp việc phát triển trên các hệ thống khác nhau thuận tiện hơn.