Gần đây Docker đang được thảo luận và gây được nhiều chú ý trong cộng đồng công nghệ trên thế giới, với nhiều hứa hẹn trong tương lai. Các hãng công nghệ lớn như Google, Amazon, Microsoft đã bắt đầu hỗ trợ Docker trên nền tảng của họ, và ở Sài gòn có luôn cộng đồng Docker nếu bạn thích có thể tham gia meetup tại đây Vậy Docker là gì?
Mục lục
Docker là gì?
Định nghĩa docker
Nó 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, môi trường trong Docker sẽ chạy độc lập.
Một số khái niệm
Docker images
Mỗi khi bạn muốn chạy ứng dụng Docker là thì bạn cần một cái image. Nôm na là Docker images; cái image này có thể là HĐH Centos hoặc Linux, đã cài sẵn các ứng dụng PHP, Nginx
Docker registries
Docker registries là kho chứa images. Người dùng có thể tạo ra các images của mình và tải lên bất kỳ đâu, miễn là người khác có thấy được, Hầu nết mình thường lên đây tham khảo https://hub.docker.com/
Docker container
Docker container hoạt động giống như một thư mục (directory), chứa tất cả những thứ cần thiết để một ứng dụng có thể chạy được. Mỗi một docker container được tạo ra từ một docker image.
Dockerfile
Dockerfile là một file chứa tập hợp các lệnh để Docker có thể đọc và thực hiện để đóng gói một image theo yêu cầu người dùng, chúng ta thường làm việc với tập tin này nhất
Khác biệt với máy ảo
Điểm khác biệt chính là các containers sử dụng chung kernel với Host OS. Nên các thao tác bật, tắt rất nhẹ nhàng, nhanh chóng. Do nó sử dụng chung nhân Linux nên rất có sự khác biệt so với dùng máy ảo Virtuhost
Các lệnh căn bản
- Tạo một container từ image có sẵn:
- Liệt kê các container đang chạy: docker ps
Khởi động và truy cập lại vào một container đã tắt:
- Xoá một container: docker rm <ID container>
- Kéo và đẩy lên hub docker: docker pull <image>:<tag> và docker push <image>:<tag>
Trên đây là những lệnh chúng ta thường dùng, còn để hiểu rõ hơn chúng tôi nghĩ các bạn nên vào trang chủ Docker để hiểu rõ hơn
Chú ý
Ngay tại thời điểm này Docker dành cho client có vẻ làm việc tốt trên Linux, tôi đã sủ dụng nó trên Macos thì chỉ có một câu như SHIT, và window càng tệ hơn, huy vọng sẽ được cải tiến nhiều, đây là điểm trừ của nó so với Vagrant
Khi nào dùng Docker
Thực ra hiện tại nếu dự án của bạn không phải dạng micro service thì không nên dùng Docker, việc tách ghép các dịch vụ PHP, Nginx đặc biệt là Mysql ra riêng đối với cá dự án tầm trung là không cần thiết, bản thân tôi thấy tất cả mọi thừ đều có thể tách app ra dùng chung Docker, nhưng riêng Mysql(cơ sở dữ liệu) thì không nên
Tôi vẫn có cảm giác một cái gì đó không an tâm cho lắm đặc biệt là Migration, backup, của cơ sở dữ liệu, trên đây chỉ là cảm nhận của tôi khi làm việc Mysql với DockerNếu như công ty bạn có đội ngũ Devops thì OK, áp dụng thoả mái chứ các cty mà không có team đó cứ áp dụng là cũng có ngày ôm hận 🙂
Kết luận
Với Docker bạn không còn bận tâm setup môi trường dev nữa, chỉ cần một người làm xong thì cả nhóm có thể dùng nó, và quan trọng hơn là bạn cấu hình một lần là có thể deploy lên staging hay production một cách nhanh nhât, so với Vagrant thì Docker có vẻ chiếm ưu thế hơn, nhưng cá nhân mình vẫn thích dùng Vagrant, nếu bạn muốn tìm hiểu chạy ứng dụng PHP thông qua docker thì có thể xem bài viết hướng dẫn chạy ứng dụng php thông qua docker