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é…
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.
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 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 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.
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
Và sau đó kiểm tra danh sách image bằng câu lệnh: docker images
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:
File Script.sh
:
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 Image
thà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.sh
sang 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.sh
khi 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….)
docker images
: Câu lệnh kiểm tra danh sách các image đã cài đặtdocker rmi
: Câu lệnh xóa 1 image chưa chạy dựa vào id hoặc têndocker rmi -f
: Câu lệnh xóa 1 image kể cả khi đang chạy dựa vào id hoặc têndocker ps
: Câu lệnh liệt kê danh sách các container đang chạydocker ps -a
: liệt kê danh sách các container đang chạy và đã tắtdocker inspect { container_id }
: Xem thông tin chi tiết của container được tạo radocker logs { container_id }
: xem lịch sử containerdocker rm
: xóa 1 container dựa vào id hoặc têndocker rm -f
: xóa 1 container kể cả đang chạydocker rm $(docker ps -a -q)
: xóa tất cả các containerNguồn: DevmasterAcademy via viblo.asia