داکر images

توضیحات اولیه images توی پست قبلی برای راه اندازی کانتینر داده شده در ادامه همون توضیحات میخوایم دستورات بیشتری رو معرفی کنیم:

حالا فرض کنیم از یک ایمیج یک کانتینر ساختیم و یکسری تغییرات روش انجام دادیم که میخوایم همیشه باشه

آیا این تغییرات روی خود image اعمال میشه؟ خیر باید اون رو commit کنیم تا تو سیستم خودمون ذخیره بشه تا هر وقت خواستیم یک ایمیج با تغییرات دلخواه داشته باشیم:

docker commit 90e0172d9d0b centos:my_changes

این ایمیج الان توی سیستم ما ذخیره شده و توی خروجی docker images هم نمایش داده میشه.

همین image رو میتونیم حتی مثل یک فایل ذخیره کنیم و ازش توی سیستم های دیگه هم استفاده کنیم با استفاده از دستور:

docker save ubuntu > directorypath/imagename

اسم اول اسمیه که قراره باهاش ذخیره بشه دومی اسم ایمیجیه که میخوایم ذخیرش کنیم.

برای بازگردانی ایمیج save شده روی یک سیستم دیگه هم دستور استفاده میشه

docker load -i centos:my_changes.tar.gz

این دستور یه ایمیج رو تو داکر لود می‌کنه.


ساخت image های شخصی :

ایمیج های شخصی بدرد این میخوره که اپلیکشن های ساخت خودمونو بصورت یک داکر ایمیج در بیاریم

وقتی ایمیجش ساخته میشه فرایند نصب و مجازی سازی نرم افزارمون به سادگی راه اندازی یک کانتینر میشه.

فرایند رو مرحله به مرحله توضیح میدم

اینکار و توسط Dockerfile انجام می‌دیم داکر فایل یکسری ورودی داره که دقیقا متوجه میشه چه اتفاقاتی باید داخل container رخ بده

اینجا یک داکر فایل ساده داریم که توضیحاتش خط به خط رو براش میزارم

# هر ایمیجی که توی داکر ساخته میشه از یک ایمیج دیگه ساخته میشه ما اینجا از ایمیج پایتون ۲/۷استفاده کردیم چون اپلیکشنی که در نظر داریم با این ورژن پایتون کار میکنه(میتونستیم رو ایمیج centos هم اینکارو کنیم ولی مجبور بودیم پایتون ۲/۷ هم نصب کنیم چه کاریه خب وقتی امادش هست)
FROM python:2.7-slim

#دایرکتور فعلیمون رو app/ قرار می‌ده انگار cd /app زده باشیم.
WORKDIR /app

# فایل‌های فولدر فعلی رو توی app/ کپی می‌کنه
ADD . /app

# هر پکیج پیش نیازی که توی فایل requirements.txt هست رو نصب می‌کنه
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# پورت ۸۰ رو برای دسترسی باز می‌زاره
EXPOSE 80

# چند تا متغیر محیطی تعریف کرده(توی اپلیکشن کاربردیمون بهشون نیاز داشتیم)
ENV NAME World

# این دستور باعث وقتی کانتینر اجرا شد نرم افزار app.py هم اجرا بشه
CMD ["python", "app.py"]


ساختن یه ایمیج جدید به همین سادگیه فقط کافیه نرم افزار اصلی و فایل requirements و Dockerfile توی یه دایرکتوری باشن و دستور پایین رو اجرا کنیم(حواستون به نقطه اخرش باشه)

و اینکه friendlyhello یه اسم دلخواهه که برای ایمیج جدیدتون انتخاب می‌کنید.

docker build -t friendlyhello .


اگر میخواید خودتون تست کنید من سورس یه نرم افزار ساده (که از سایت داکر برداشتم ) و requirements رو میزارم داکر فایل هم که بالا هستش

requirements.txt

Flask
Redis

app.py

from flask import Flask
from redis import Redis, RedisError
import os
import socket

# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)

app = Flask(__name__)

@app.route("/")
def hello():
    try:
        visits = redis.incr("counter")
    except RedisError:
        visits = "<i>cannot connect to Redis, counter disabled</i>"

    html = "<h3>Hello {name}!</h3>" \
           "<b>Hostname:</b> {hostname}<br/>" \
           "<b>Visits:</b> {visits}"
    return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

این هم خروجی ایه که به من داد حالا اگر دستور docker images رو بزنید توی خروجی ایمیجتونو می‌بینید.

مطلب بعدی: docker volume

مجموعه این تحقیقات و ازمایش هایی که در ادامه مستند می‌کنم در شرکت پردازش هوشمند ترگمان مجری سامانه های ترجمه ماشینی ترگمان و ترجمیار انجام شده است.