Kinh nghiệm lập trình website mã nguồn mở PHP

Bạn sẽ lạc hậu nếu chưa từng sử dụng Docker

Bạn sẽ lạc hậu nếu chưa từng sử dụng Docker

Giới thiệu

Docker ra đời cũng được 4 năm rồi, nó không còn là công nghệ mới nữa. Ta có thể tìm được hàng loạt bài viết giới thiệu Docker là gì, hay dở ra sao… Tuy nhiên mình vẫn muốn viết 1 bài về việc sử dụng Docker, theo hướng tiếp cận mới, mang hơi hướng nghiên cứu và đánh giá khách quan.

Khoan đã! Bạn đã quá quen thuộc với Docker? Hay bạn mới nghe phong phanh đâu đó? Hoặc bạn chưa từng nghe qua? Không sao, bài viết này sẽ dành cho tất cả, chúng ta sẽ cùng tìm hiểu, phân tích nhiều góc cạnh, rồi từ đó đàm đạo, tự đúc kết cái nhìn riêng của bản thân về Docker.

Vì theo quan sát, mình thấy giới lập trình viên hiện nay có 2 xu hướng, ai đã sử dụng rồi thì thích, nghiện, cuồng Docker, làm bất cứ dự án nào cũng nghĩ tới Docker đầu tiên.
Thứ 2 là không muốn dính dáng gì tới Docker, muốn tự mình cài đặt môi trường, máy tôi tôi cài, chết ai?
Do đó, bạn cứ tìm hiểu, sử dụng và trải nghiệm đi đã, rồi mới rút ra kết luận của bản thân.
Theo ý kiến của riêng mình, chẳng chóng thì chầy, Docker sẽ trở thành vật bất ly thân của lập trình viên, giống như Git ngày nay vậy. Lý do thì cùng theo dõi nhé.

Đã từ rất lâu rồi

Chiếc máy tính của chúng ta giống như 1 căn phòng, lúc mới cài đặt thì sạch sẽ, tinh tươm, chạy phà phà.
Bạn sẽ lạc hậu nếu chưa từng sử dụng Docker

Sau 1 thời gian sử dụng, ta cài thêm game, phần mềm, môi trường lập trình, thư viện… Cái máy bắt đầu ì ạch một cách đáng thương.


Vậy là Docker ra đời, nhằm đóng gói các môi trường lập trình cho bạn gọn gàng hơn, dễ quản lý hơn. Không cần đến thì bạn có thể đem vất mấy cái thùng đó ra khỏi phòng.

Hola! Giờ bạn đã biết Docker là gì rồi đấy. Nhờ có việc đóng gói, bạn sẽ dễ kiểm soát các môi trường lập trình khác nhau trên cùng 1 chiếc máy tính, ta không phải đau đầu mỗi lần cài lại máy như trước đây nữa. Bạn dùng Windows mà muốn có môi trường như của Linux để code PHP cũng làm được luôn.

Hiểu thêm về Docker

1 bạn giơ tay: “Oh, Docker này cũng hay đấy! Ngày xưa em cũng có xài VMWare, chắc cũng họ hàng phải không?”
Đáp: Không, 2 công nghệ này là 2 trường phái khác nhau tuy có chung 1 mục đích. Để phân biệt Ảo hóaCông-ten-nơ hóa, ta cần hiểu thêm về Docker 1 chút.
Phân biệt vitualization và containerlization

Tiếp, khi đã biết Docker, bạn nên biết còn có 1 số công nghệ tương tự:

  • rkt (pronounced like a “rocket”NOT HKT). Đây là đối thủ nặng ký của Docker, rkt còn có 1 trang phân tích so sánh với các công nghệ khác, rkt nói rằng điểm nổi trội của họ hơn sử dụng Docker là khả năng bảo mật, phân quyền
  • LXC/LXD
  • OpenVZ

Thế nhưng tại sao Docker lại phát triển mạnh và được xem là đại diện sáng giá cho cả một xu hướng công nghệ containerlization?
Nên biết rằng:
Docker phát hành 2013, viết bằng Go, trên hệ điều hành Linux.
– 2015, dự án Docker đã có hơn 25,600 sao trên GitHub (trở thành top 20 dự án có số sao cao nhất rên GitHub), 1100 lập trình viên đóng góp
– 2016, các tổ chức sau có đóng góp chính cho việc phát triển Docker: nhóm Docker, Cisco, Google, Huawei, IBM, Microsoft, và Red Hat.
Ta hãy so sánh quy mô các Repos trên github giữa Docker và rkt
https://github.com/docker
https://github.com/rkt
Sự phát triển và quy mô quá khác biệt. Docker không những phát huy được sức mạnh của Open Source nói chung và hệ thống Linux nói riêng, nó còn được sự hậu thuẫn từ ông lớn độc quyền M$, chứng tỏ tương lai xán lạn của cá voi xanh.

Bắt đầu vọc Docker như thế nào

– Okay, nghe cũng hấp dẫn đấy, làm sao để tôi có thể học Docker?

Tài liệu trên mạng về Docker nhiều nhưng chưa có hệ thống rõ ràng. Mỗi người lại có 1 cách cấu hình, sử dụng docker khác nhau. Ở đây tôi xin đưa ra hướng vọc Docker dành riêng cho dân PHP, Magento2 như sau:

Trình độTài liệuMục tiêu
Cài đặtTrang chủVấn đề thứ nhất là vấn đề đầu tiên, việc cài đặt khó hay dễ phụ thuộc vào hệ điều hành trên máy bạn. Nếu dùng Linux thì chỉ cần cài Docker, dùng Windows thì bạn có 2 cách Docker + máy ảo (Oracle Virtual Box) hoặc Docker + máy ảo (Hyper-V – của Windows 10)
Cơ bảnTài liệu DockerLàm 1 ví dụ hello world từ trang chủ Docker, ví dụ này chán òm, và bạn chẳng hiểu vì sao nó chạy.
Đừng lo, đó chỉ là ví dụ để xác minh bạn đã cài đặt Docker thành công, bên dưới, Docker đã pull 1 image từ hệ thống docker hub, sau đó nó tạo và chạy 1 container. Bạn cần đọc thêm 1 số tài liệu để hiểu về images, container, cũng như câu lệnh để xem các thứ đó
Cơ bản 2Tài liệu Docker part 2Với ví dụ tiếp theo bạn nắm được Dockerfile, đồng thời thực hành được khá nhiều câu lệnh mới. Ví dụ từ trang chủ về Python làm bạn chán? Tại sao bạn không tự build 1 image bằng Dockerfile theo ngôn ngữ bạn đang sử dụng: Ruby, PHP… Hoặc cao cấp hơn là Framework Magento 2
Cơ bản 3Tự mày mòNếu bạn đang vọc Cơ bản 2, chắc bạn sẽ phân vân, container magento2 của bạn cần database, vậy thì ta sẽ cài MySQL vào cái container đó hay là start 1 container riêng chứa MySQL? Nếu bạn nghĩ tới 1 container riêng thì hoan hô, bạn đã nghĩ theo hướng container hóa rồi đó, chúng ta cần học cách start và kết nối các container với nhau thông qua port, mình sẽ nói chi tiết hơn ở phần dưới
Trung cấpService từ trang chủBài này đòi hỏi trình độ DevOps hơn là Developer, bạn sẽ thiết lập load balance, cấp phát tài nguyên trên máy chủ

Docker dành cho lập trình viên thì chỉ bấy nhiều đây là tạm đủ dùng, ta sẽ tìm hiểu và tự xây dựng nhiều image phù hợp với mục tiêu bản thân.

Sử dụng Docker – PHP 7 + Ubuntu 16 + Nginx

Giả sử bạn đang dùng Windows, bạn sẽ build 1 image, sau đó là start 1 container với môi trường Ubuntu 16 + PHP 7 + Nginx (lý tưởng để lập trình PHP).
https://github.com/namluu/docker-php

Supervisor
Đây là 1 công cụ để quản lý nginx, php-fpm. Trong container, bạn không thể dùng lệnh service nginx restart được.
Thay vào đó bạn sẽ dùng lệnh nginx -s reload hoặc thông qua Supervisor:

supervisorctl
supervisor> help
supervisor> restart nginx

Mount
Vấn đề làm các bạn mới làm quen Docker trăn trở nhiều nhất chính là: làm sao để phát triển ứng dụng trong môi trường container (ảo), một cách thoải mái, như môi trường máy thật? Và loay hoay trong trăn trở đó, nhiều người bỏ Docker và phán “không sướng như đồ thật”. Xin thưa, hoàn toàn có thể sướng, thậm chí còn sướng hơn thật nữa. Quan trọng bạn phải mày mò cho tới.
Với dân xài Linux thì khỏi bàn, với tham số -v mỗi khi run container, bạn sẽ tạo ra 1 liên kết giữa máy host và container, rồi từ đó trỏ IDE về thư mục này.
docker run -d -v /webroot:/var/www/html -p 80:80 --name my_php namluu/php:7
Với ai xài Windows, bạn khỏi mất công dùng tham số mount -v, vì giới hạn của máy áo VirtualBox, bạn chỉ có thể mount trong thư mục C:/your-name/bla/bla… cái thư mục cài đặt máy ảo ấy. Do đó giải pháp sẽ là:
Dùng Volume trong Kitematic. Sau khi run bằng command line để set name và port, bạn bật Kitematic, enable volume tới thư mục ứng dụng, sau đó trỏ IDE về, thư mục này sẽ tồn tại mãi sau khi container bị stop.

Sử dụng Docker – Magento 2 + Varnish = Đẳng cấp

Bạn sẽ là dân chơi thứ thiệt khi sở hữu con container này:
https://hub.docker.com/r/namluu/magento2/

1. Bạn start 1 con percona

docker pull percona/percona-server:5.7
docker run --name percona57 -p 3306:3306 \
	    -e MYSQL_ALLOW_EMPTY_PASSWORD=yes \
	    -d percona/percona-server:5.7

Rồi bạn dùng các tool quản lý DB như SQLYog, Navicat để connect tới percona host default (192.168.99.100:3306)

2. Bạn start con magento 2

docker pull namluu/magento2
docker run --name magento2 -p 80:80 \
	   -v /path/to/magento:/var/www/html \
	   -d namluu/magento2

Con container này đã cấu hình sẵn Varnish và Nginx, có thể tối ưu thời gian load trang Magento. Vậy là bạn đã có thể code Magento trên Windows mà tốc độ vẫn phà phà. Nhược điểm là con VirtualBox phải tăng thêm resource và lúc chạy php bin/magento trong container thì bị delay lâu hơn máy thật.

Thảo luận cộng đồng

Với lợi thế cộng đồng sử dụng Docker đông đảo ở thế giới lẫn Việt Nam, chúng ta sẽ cập nhật 1 số bài viết hay về Docker hiện nay.

Bản đồ của Docker

Lạc trôi trong mớ kiến thức Docker: images, container, volume, network… Cùng các thao tác: build, run, pull, push… Bản đồ này sẽ giúp bạn:


Trong bản đồ này, ta nhận ra các thao tác quen thuộc như:
– Từ Dockerfile ta build thành Images
– Từ Images ta run tạo containers
– Containers enable volume để chia sẻ thư mục với máy thật.
– Containers commit những thay đổi về lại Images
– Images tag/push lên Repository
Link

Các bài hướng dẫn sử dụng Docker + demo ứng dụng hoàn chỉnh

Khái niệm cơ bản Docker + demo ứng dụng PHP
https://viblo.asia/p/docker-doi-voi-lap-trinh-vien-web-PDOkqLAKejx

Cách sử dụng docker-compose.yml trong Part Services của Docker
https://techtalk.vn/docker-compose-xay-dung-moi-truong-phat-trien-ung-dung-web-php-mysql.html

Bài viết giới thiệu sơ khởi và thực tế sử dụng Docker
https://kipalog.com/posts/Toi-da-dung-Docker-nhu-the-nao

Kết thúc

Với những tính năng tuyệt vời và trợ giúp đắc lực cho DevOps, Developer. Docker đã và đang được giới công nghệ đặc biệt quan tâm. Có lý nào bạn lại đứng ngoài cuộc chơi và chấp nhận lạc hậu. Ngay lúc này bạn nên thử triển khai 1 ứng dụng nho nhỏ, để áp dụng kiến thức về Docker của mình nhắm xây dựng 1 môi trường lập trình gói gọn trong 1 docker container, để khi cần thì chỉ cần mở console và gõ:
docker start my_app
Chúc các bạn hạnh phúc với Docker.

À mà, Docker có hạn chế gì không? Hạn chế nếu có của Docker là triển khai trên Windows và MacOS không tối ưu bằng Linux. Nhất là resource của máy ảo, phân quyền… Vốn là đặc tính cố hữu của các hệ điều hành này. Hy vọng sau này Docker sẽ bắt tay cùng các hệ điều hành khác để đồng nhất, nâng cấp và trở nên hoàn hảo hơn.

Bạn sẽ lạc hậu nếu chưa từng sử dụng Docker
Đánh giá bài viết

2 phản hồi

Gửi phản hồi

Your email address will not be published. Required fields are marked *