Dự án mongodb bình python
Ở bài trước mình đã hướng dẫn các bạn cách dockerize một ứng dụng NodeJS, đồng thời với đó là một số khái niệm và câu hỏi liên quan trong bài Show Ở bài này chúng ta sẽ tiếp tục series bằng cách thực hiện dockerize một ứng dụng Python Flask nhé. "ĐỪNG DỪNG KHÔNG, TIẾP THEO, TIẾP THEO, chuyển bài ông ơiiiii. Tôi dev NodeJS PHP chứ không phải Python đâu mà quan tâm" Mục đích của series này là mình sẽ hướng dẫn các bạn học Docker, trong bài này mình nghĩ các bạn hoàn toàn có thể hiểu được dù mình chưa bao giờ code Python. Do đó mình hi vọng rằng các bạn vẫn sẽ theo dõi được series này, từng bài từng bài, vì trong mỗi bài sẽ có những vấn đề liên quan đến Docker mình muốn gửi cho các bạn Bắt tay vào làm thôi nào Tiền cài đặtNhớ kiểm tra xem bạn đã cài đặt Docker và Docker-compose chưa nhé. Nếu chưa thì nhớ xem lại phần cuối bài viết trước của mình để biết cách cài đặt nhé Cài đặtCác bạn clone mã nguồn ở đây về nhé Ở bài này ta sẽ chỉ quan tâm tới thư mục docker-python sau khi clone nhé . Ở đó mình đã setup cho các bạn một ứng dụng Python sử dụng Flask framework nhé (bạn nào dev PHP có thể coi nó như Laravel của PHP vậy )Nếu các bạn đã cài đặt Python trên máy thì có thể chạy command sau để chạy project nhé.
Mở trình duyệt tại địa chỉ localhost. 5000 and you will see line Hello World Còn nếu máy bạn không có Python thì vẫn tuyệt vời ô liệt kê nhé. Chỉ cần các bạn đã cài Docker và Docker soạn, những thứ khác có hay không có, không quan trọng Xây dựng hình ảnh DockerVẫn như ở bài trước, đầu tiên ta cần tạo file cấu hình Dockerfile và định nghĩa môi trường chúng ta mong muốn, sau đó ta sẽ build image và chạy nhé Cấu hình DockerfileAt the docker-python docker-python do các bạn tạo tên file là Dockerfile, bên trong có nội dung như sau
Giải thích
Xây dựng hình ảnh DockerSau khi cấu hình nhiễn thì ngon rồi,bước tiếp theo là ta build Image thôi. Các bạn chạy lệnh sau để build Image nhé
Ở mình đã giải thích cho các bạn lệnh trên làm gì rồi các bạn có thể xem lại nhé Giải thích nhanh. command on will build 1 image name is learning-docker/python with tag is v1, both name and tag ta đều có thể tùy chọn tùy ý, nếu ta không để tag thì sẽ tự động được lấy là mới nhất. Dấu "chấm" ở cuối ghi chú Docker là "tìm file Dockerfile ở thư mục hiện tại và build" nhé Sau khi quá trình build Image thành công, các bạn có thể kiểm tra bằng lệnh
Will see display as after nhé . Vẫn ở thư mục docker-python, bạn đã tạo tệp docker-compose. yml, with the content as after
Ở mình đã giải thích cho các bạn những thứ bên trên. Nếu các bạn chưa đọc thì nên xem qua nhé .Giải thích nhanh
Nói nôm na là cách setup chả khác cho bài trước làm với NodeJS là mấy nhỉ .To start project you run command after
Sau đó các bạn sẽ thấy ở terminal được hiển thị như sau Cố gắng xem lại mã xem nhé
Vấn đề là ở đâu nhỉ?? Rõ ràng nếu mình chạy trực tiếp từ môi trường bên ngoài, máy gốc của mình (nếu ở máy gốc các bạn có cài Python), không dùng Docker nữa thì mọi thứ vẫn oke mà nhỉ. Cố gắng xem lại tài liệu của Flask ở đây, và chúng ta đã tìm ra chân lý, chúng ta dành cho mục Máy chủ có thể nhìn thấy bên ngoài. Mình sẽ dịch luôn cho các bạn
Do đó khi chạy project của chúng ta trong container thì chỉ môi trường trong container mới truy cập được vào project, project của chúng ta coi môi trường đó mới là localhost, còn từ môi trường gốc (bên ngoài) truy vấn thì sẽ không được
Do that to fix this thing ta doing as after Các bạn đã sửa lại ứng dụng tệp. py một chút như sau nhé
At on ta only add to duy nhất host=0. 0. 0. 0 để nói với dự án chúng ta là "chấp nhận cho tất cả mọi IP truy cập" Ổn rồi đó chúng ta build lại ảnh nhé
Sau khi build xong ta cần khởi động lại project nhé, các bạn chạy lệnh sau
Và cuối cùng là mở trình duyệt và kiểm tra thôi nào Môi trường biến đổi (ENV) Bài trước và bài các bạn có thể thấy là project khi chạy đều được fix phần cứng 1 cổng (bài trước là 3000, bài này là 5000), thế nếu ta muốn container chạy ở cổng khác thì ta lại phải sửa code hay sao? Lúc đó ta sẽ nghĩ đến biến môi trường (environment variable), trong quá trình dev và khi chạy thực tế sử dụng biến môi trường sẽ giúp ta rất nhiều trong việc giảm tối thiểu công việc phải chỉnh sửa code Biến môi trường tại DockerfileĐầu tiên là ta sẽ thử dùng biến môi trường khai báo ở Dockerfile để thiết lập Port(cổng) cho project chạy trong container nhé (ý là container sẽ không chạy ở port 5000 nữa) Ở ứng dụng tệp. py ta sửa lại như sau 0Sau đó ở file Dockerfile ta sửa lại như sau 1Tại tệp docker-compose. yml ta sửa lại một chút như sau nhé 2Các bạn lưu ý ở trên khi ta map port ta chỉ chuyển từng cảnh bên phải, cảnh bên phải là cổng của dự án đang chạy trong container nhé, cảnh bên trái là cổng ở môi trường gốc (bên ngoài, ta có thể tùy chọn ý Tiếp tục theo ta process build back image nhé
And start up project
Mở trình duyệt tại địa chỉ localhost. 5000 (vẫn như cũ), các bạn sẽ thấy mọi thứ chạy bình thường, nhưng nhìn qua Terminal thì sẽ thấy như sau Thế nếu bây giờ ta muốn đổi port của project trong container thành 6666 thì sao, ta lại phải build lại Image? Với những dạng môi trường biến mà dễ thay đổi thì ta có sự lựa chọn khác đơn giản hơn đó là khai báo ở file docker-compose. yml nhé Biến môi trường tại docker-composeĐể không phải build lại image mỗi lần ta đổi port, ta sẽ khai báo biến môi trường tại docker-compose. yml nhé. in sao
Thử nghiệm thôi nào Tại file Dockerfile ta xóa dòng ENV PORT 5555 đi nhé Sau đó ở file docker-compose. yml ta sửa lại như sau 5Bây giờ ta vẫn cần build lại image 1 lần để update mới áp dụng được
Sau đó ta khởi động lại project nhé
Sau đó F5 lại trình duyệt để đảm bảo mọi thứ vẫn ổn và xem ở terminal ) Cách tốt hơn để tạo môi trường biếnỞ ví dụ trên nếu ta muốn đổi PORT thành 7777 chẳng hạn, ta phải sửa ở 2 chỗ trong file docker-compose. yml, vậy nếu biến đó được sử dụng ở vị trí 100 trong tệp docker-compose. yml thì sao? docker-compose support ta a way đơn giản hơn, tiện lợi hơn để khởi động môi trường biến, that is set at file. env (giống y như Laravel , cũng đồng nghĩa với việc nếu ta dockerize project Laravel thì ta chỉ cần duy nhất 1 file chung là. vi). Khi chạy project thì docker-compose sẽ tự tìm file có. env or not and load the variable in that.Cùng thử nhé Tại thư mục docker-python ta tạo file. env with rest as after 8Giải thích
Ta sửa lại file docker-compose. yml as after 9Sau đó ta khởi động lại project nhé
Kiểm tra ở terminal ta sẽ thấy ) Đẩy hình ảnh lên sổ đăng kýỞ bài trước dài quá mình chưa nói thêm vào ảnh đã đưa lên sổ đăng ký và làm cho người khác có thể chạy dự án của bạn từ ảnh như thế nào. Ở bài này thì ta có đất diễn rồi Docker build chạy ngon nghẻ ở máy của ta rồi thì thử đưa cho người khác xem họ chạy thế nào chứ nhỉ
Ở trong series này ta sẽ dùng Gitlab để lưu code và cả lưu image vào registry của mình nhé. Gitlab cho ta Unlimited image ở private registry cho từng kho lưu trữ (quá tuyệt vời mà free back but private) Tạo tài khoản và kho lưu trữ trên GitlabĐầu tiên các bạn cần tạo 1 tài khoản trên Gitlab. com (if not have). Sau đó ta tạo một kho tên là learning-docker cho toàn bộ series này nhé Sau đó bấm chọn kho ta vừa tạo, để ghi chú ở phần sidebar bên trái, di chuột vào Packages, sau đó bấm chọn Container Registry, đây chính là nơi ta sẽ dùng để lưu trữ ảnh nhé Các bạn sẽ thấy được hiển thị như sau Đầu tiên là ở hình trên, ta cần đăng nhập vào sổ đăng ký của Gitlab trước (vì sổ đăng ký này là riêng tư mà ). Ta run command after to login. 1Ta sẽ thấy ở terminal hỏi email và mật khẩu tài khoản gitlab, các bạn nhập thông số của các bạn vào nhé Sau đó bước tiếp theo như ở hình trên ta cần dựng hình. Nhưng vì image ta đã có sẵn ở local rồi nên ta không cần build lại nữa "Ok vậy là tôi có thể luôn luôn lên Gitlab rồi đó là gì?" Khi đưa hình ảnh lên sổ đăng ký của gitlab, ta cần phải đặt tên hình ảnh theo tiêu chuẩn của họ, thẻ có thể đặt tùy chọn nhưng tên phải đúng, theo định dạng sau |