داکر 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.txtFlask Redis app.pyfrom 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مجموعه این تحقیقات و ازمایش هایی که در ادامه مستند می‌کنم در شرکت پردازش هوشمند ترگمان مجری سامانه های ترجمه ماشینی ترگمان و ترجمیار انجام شده است.