اول از همه چیز باید هدف داکر یادمون باشه، سلامت یک پروژه با حداقل بسته‌های وابستگی! پس برای پروژه نرم‌افزاری خودتون تا جایی که می‌تونید حداقل پابستگی‌ها را در فایل Requirements.txt مشخص کنید.

با کم کردن حجم شما برای خودتون بهترین رویکرد در deploy رو با کم کردن حجم دانلودها، حجم push ها به سرور عملیاتی رو ایجاد کردید. پس این نکات وقتی دارید داکر ایمیج ایجاد می‌کنید توی ذهنتون باشه.

راهنمایی عمومی

تعدادی راهنمای عمومی برای یادآوری در ذهن‌ها موقع ساخت ایمیج در داکر هستش که با هم مرورشون میکنیم:

- از این موضوع مطمئن بشید که فایلهای کش در داکر ایمیج شما ساخته نشوند و یا بافی نمانند. ابزارهایی مانند pip, apt, apk فایل‌های کش ایجاد می‌کنند. مطمئن بشید کش‌ها رو پاک می‌کنید.

- بعضی موقع‌ها شما به ابزارها یا کتابخانه‌های دیگه‌ای وابسته هستید که فقط موقع build از آنها استفاده می‌کنید و کاربردی در محیط عملیات ندارند مانند gcc مطمئن بشید این وابستگی‌ها در ایمیج شما قرار نداشته باشند.

- ایمیج‌های داکر از لایه‌های متفاوتی ساخته شده‌اند هر خط داکر فایل شما (Dockerfile) یک لایه را نمایندگی می‌کند. وظیفه شما اینه هر  لایه را در کمترین وضعیت سایزی نگه دارید و فقط فایلهایی که نیازه را وارد داکر ایمیج خود کنید. برای مثال شما اگر کتابخانه‌های خود را با pip نصب کردید شما فقط به requirements فایل و کل کدهاتون فقط و فقط نیاز دارید. پس اطمینان حاصل کنید فایل requirements.txt برای پروژه خودتون قبل از ایجاد داکر ایمیج ساخته شده باشه

- برای اجرای مجموعه‌ای از دتسورات به هم پیوسته در هر لایه از داکرفایل دستور RUN به کار می‌رود.

- ما همیشه از ایمیج Alpine به عنوان ایمیج پایه به دلیل اینکه بسیار کم حجم و سبک است استفاده می‌کنیم.

شروع

به مسیر دایرکتوری پروژه خودتون بروید و یک داکرفایل ایجاد کنید:

touch Dockerfile

حالا شما ساختاری شبیه ساختار زیر دارید:

Mahdis-MacBook-Air:GapoGram mghaffari$ ls
Dockerfile __pycache__ requirements.txt src

کدهای زیر را در داکرفایل خود کپی کنید:

# Alpine base image that contains python 3.10
FROM python:3.8.0b4-alpine3.10
# define the directory to work in
WORKDIR /code
# copy the requirements.txt file to the work directory
COPY requirements.txt .
# Install some system deps in a virtual environment named .build-deps, you can name it what ever you want
# install pip dependencies in the same layer
RUN apk add --no-cache --virtual .build-deps \
build-base openssl-dev pkgconfig libffi-dev \
cups-dev jpeg-dev && \
pip install --no-cache-dir -r requirements.txt && \
apk del .build-deps # delete the .build-deps in the same layer
# Copy rest of the source code
COPY src/ src/
# EXPOSE the needed ports, for example 8080
EXPOSE 8080
# Running Command or Entry Point
CMD python src/app.py

از دستور زیر برای ساخت ایمیج جدید خود استفاده کنید:

docker build -t app007 .

با زدن این دستور داکر شروع به ساخت ایمیج جدید می‌کند:

Sending build context to Docker daemon  9.742MB

Step 1/7 : FROM python:3.8.0b4-alpine3.10
3.8.0b4-alpine3.10: Pulling from library/python
9d48c3bd43c5: Pull complete 
c0ea575d71b9: Pull complete 
9d97fa635dbc: Pull complete 
7bc5567fc8e5: Pull complete 
9ef2cb913017: Pull complete 

Digest: sha256:1161cfa530d2f9e7f8e815c622525d7959ebf93579a8655639ae1123bd1bb979
Status: Downloaded newer image for python:3.8.0b4-alpine3.10
 ---> 641fa78ba15c

Step 2/7 : WORKDIR /code
 ---> Running in a66614cf5cb5
Removing intermediate container a66614cf5cb5
 ---> 806085723212
Step 3/7 : COPY requirements.txt .
 ---> 64560b0d5fa8

Step 4/7 : RUN apk add --no-cache --virtual .build-deps     build-base openssl-dev pkgconfig libffi-dev     cups-dev jpeg-dev &&     pip install --no-cache-dir -r requirements.txt &&     apk del .build-deps # delete the .build-deps in the same layer

 ---> Running in d01ddf5b718c

در آخر شما باید پیغام زیر را مشاهده کنید:

Successfully built fa2d778eec71
Successfully tagged gapogram:latest

برای اجرای کانتینر از دستور زیر استفاده می‌کنیم:

docker container run -d app007
or
docker run --name py-app007 -d app007

در انتها با اد کردن این کانتینر به pycharm می‌تونید از اون به سادگی برای محیط دولوپ / تست نیر استفاده کنید.