چگونه یک اپلیکشن ساده تحت وب را در داکر قرار دهیم؟

در این پست قصد دارم که چگونگی قرار دادن یک اپلیکشن تحت وب که با فلسک نوشته است رو در داکر توضیح بدم. این مطلب برای شروع یادگیری داکر نوشته شده است و مخاطب این مطلب کسانی اند که با مفاهیم داکر آشنا هستند و با محیط دستوری گنو/لینوکس آشنایی دارند. در ابتدا توضیحاتی درباره محیط اجرای اپلیکشن وب فلسک داده خواهد شد و بعد از آن به انتقال و اجرای آن در محیط داکر میپردازم.فلسک یک فرمورک تحت وب هست که برای زبان برنامه نویسی پایتون ساخته شده است و قاعدتا برای اجرای یک اپلیکشن تحت وب فلسک نیازمند نصب پایتون هستید، بعد از نصب پایتون روی سیستم عامل با استفاده از پکیج منجر پایتون (pip) بایستی فلسک نصب شود.با توضیحات داده شده مشخص شد که برای اجرای اپلیکشن تحت وب بایستی چه محیط و نیازمندی (dependency) نصب باشد. بسته به توزیع لینوکسی که قرار هست در آن وب اولیکشن اجرا شود دستورات متفاوت خواهد بود. برای مثال برای نصب نیازمندی ها در سیستم عامل های که از پایه دبین (Debian Based) ساخته شده اند مثل اوبونتو باید از دستور زیر استفاده کرد:sudo apt update && apt install python3 python3 install pipاما برای کوچکتر و بهینه تر شدن در داکر بهتر هست از Alpine استفاده شود. Alpine یک توزیع لینوکس بسیار کوچیک شده هست که استفاده از اون برای ایجاد یک داکر ایمیج بسیار رایج هست. تفاوتی که استفاده از این توزیع وجود دارد در پکیج منیجر آن هست که apk هست. برای مثال برای نصب نیازمندی های قبلی از دستورات زیر استفاده میشود:apk update && apk add py-pip pip install flask در نهایت وب اپلیکشنی که قرار هست که اجرا شود با نام hello.py در مسیر اصلی پروژه قرار دارد و به این صورت هست:from flask import Flask, render_template app = Flask(__name__) @app.route('/') def hello_world(): return render_template('index.html') if __name__ == '__main__': app.run(debug=True,host='0.0.0.0')در مسیر اصلی پروژه یک پوشه به نام templates قرار دارد که پس از اجرای این کد صفحه ساده ای که در آن قرار دارد به کاربر نمایش داده میشود. برای دسترسی به پروژه از دستورات زیر استفاده کنید:git clone https://github.com/amirhne/dockerized-hello-world-flask-app.git cd dockerized-hello-world-flask-app/projectبرای اجرای این اپلیکشین در مسیری که فایل hello.py در آن قرار دارد، دستور زیر را بزنید:python3 hello.pyو بعد از آن پروژه بر روی سیستم شما با پورت ۵۰۰۰ در دسترس خواهد بود و با وارد کردن ادرس http://127.0.0.1:5000 پروژه اجرا خواهد شد.تا اینجای کار این پروژه بر روی سیستم شما اجرا شده است و در این قسمت قرار هست که این وب اپلیکشین در محیط داکر اجرا شود. اپلیکشین ما قرار هست در داخل یک کانتینر اجرا شود و عمکرد داکر به گونه است که برای اجرای هر کانتینر به یک ایمیج نیازمندیم. هر ایمیج به صورت لایه ای و از یک ایمیج قبلی ساخته میشود و کانترینر که قرار هست اپلیکشین ما را اجرا کند خودش یک پراسس (process) هست که از رو ایمیج ساخت شده است.برای ساخت یک ایمیج از یک ایمیج قبلی و اضافه کردن نیازمندی هایمان نیازمند که دستور العمل هستیم، دقیقا مانند یه دستور العمل آشپزی که مرحله به مرحله قرار هست یه چیز به مواد خام اضافه شود. به این دستور العمل داکر فایل گفته میشود. داکر فایلی که قرار هست که ما برای ساخت ایمیج از آن استفاده کنیم به شکل زیر هست:FROM alpine:latest MAINTAINER AmirHosein Nematzadeh <me@amirhne.me> EXPOSE 5000 RUN mkdir /home/hello_world WORKDIR /home/hello_world/ COPY project /home/hello_world RUN apk update && apk add py-pip && pip install flask CMD python3 /home/hello_world/hello.pyاین داکر فایل دستور العمل ساخت ایمیج مورد نظر ماست که به صورت خط به خط آن رو توضیح میدم ۱. در خط اول گفته میشود که از چه ایمیجی پایه ای، ایمج ما ساخته شود۲.در خط دوم نام و اطلاعات فردی که سازنده ایمیج هست ذکر شده است۳. در خط سوم گفته شده است که پورت ۵۰۰۰ از بیرون کانترینر در دسترس قرار داشته باشد.۴. در خط چهارم دستور ساخت یه مسیر داده شده است۵. در خط پنجم مسیر کار سیستم عامل مشخص شده است۶. در خط ششم گفته شده است که محتویات پوشه project که در کنار داکر فایل قرار دارد در مسیر پوشه ای که در خط چهارم در داخل ایمیج ساخته شده است، ریخته شود.۷. در خط هفتم دستورات نصب نیازمندی های ما برای اجرای اپلیکیشن داده شده است.۸. در آخرین خط گفته میشود که در صورتی که کانترینر از روی ایمیج ساخته شد،‌ در لحظه اجرا این دستورات هم اجرا شود.برای دسترسی این داکرفایل از گیت هاب و ساخت ایمیج از روی آن از دستورات زیر استفاده کنید:git clone https://github.com/amirhne/dockerized-hello-world-flask-app.git cd dockerized-hello-world-flask-app docker build -t hello_world_flask_app .همیچنین برای دانلود ایمیج از قبل ساخته شده با داشتن اتصال وی پی ان یا استفاده از شکن از دستور زیر میتونید استفاده کنید:docker pull amirhne/hello_world_flask_appحالا همه چیز آماده هست که کانترینر شما از روی این ایمیج ایجاد بشه و از بیرون به اون دسترسی داشته باشید. برای اجرای کانتینر باید از دستور زیر استفاده کنید:docker run -d -p 80:5000 --name hello_world hello_world_flask_appدر اینجا گفته میشود که کانتیر در پس زمینه (-d) و با نام هلو ورلد (--name) از روی ایمیج hello_world_flask_app ساخته شود و پورت ۵۰۰۰ کانتیرنر ایجاد شده به پورت ۸۰ ماشین (-p)فوروارد شود.برای اینکه از راه اندازی و اجرای کانتینر اطمینان حاصل کنی از دستور زیر استفاده کنید:docker psخروجی باشد شبیه زیر باشد:CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6cdf53855fcf hello_world_flask_app &quot/bin/sh -c 'python3…&quot 5 seconds ago Up 3 seconds 0.0.0.0:80->5000/tcp hello_worldالان شما بایستی وب اپلیکشن که در داخل کانتینر اجرا شده را روی سیستم با پورت ۸۰ داشته باشید و با زدن http://127.0.0.1 در مرورگر به آن دسترسی داشته باشید.امیدوارم این مطلب برای شما مفید بوده باشد.