<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های همایون</title>
        <link>https://virgool.io/feed/@homayunj36</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-10 22:36:19</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/2629/avatar/avatar.png?height=120&amp;width=120</url>
            <title>همایون</title>
            <link>https://virgool.io/@homayunj36</link>
        </image>

                    <item>
                <title>فریلنسرهای ترجمه و تیغ دو لبه‌ی بازار</title>
                <link>https://virgool.io/Freeland/%D9%81%D8%B1%DB%8C%D9%84%D9%86%D8%B3%D8%B1%D9%87%D8%A7%DB%8C-%D8%AA%D8%B1%D8%AC%D9%85%D9%87-%D9%88-%D8%AA%DB%8C%D8%BA-%D8%AF%D9%88-%D9%84%D8%A8%D9%87%DB%8C-%D8%A8%D8%A7%D8%B2%D8%A7%D8%B1-hsslh3u6trnr</link>
                <description> راستش دیواری کوتاه تر از دیوار #فریلنسر ها پیدا نمیشه. خصوصا تو حوزه #ترجمه !  از ارزونی خدماتشون که بازارو خراب کرده تا پایین بودن کیفیت کاراشون که بعضی مشتری ها رو شاکی کرده!  اما این یه طرف ماجراست. طرف دیگه ماجرا خود فریلنسرهای ترجمه هستن که با کمترین درآمد به بخش مهمی از بازار ترجمه دارن سرویس می‌دن. بخشی که مترجم‌های سرشناس و حرفه‌ای توجهی بهش ندارن و مشتری ها هم حاضر نیستن پول خوب بابتش بدن. بخش عظیمی از بازار که دنبال ترجمه ارزون و سریعه، و می خواد خیلی زود به نتیجه برسه : می خواد برای پر کردن صفحه بلاگ و سئو زدن باشه، برای تحویل مقاله دانشجویی یا خوندن چهارتا مطلب بدرد بخور  رو صفحات وب!  حالا بار این ماجرا رو کی میکشه؟ فریلنسرها!  کسی که زحمت کار رو میکشه، درآمد کمی داره و اغلب فحشش رو هم می‌خوره !  خداییش ظلم نیست؟! حالا چیکار میشه کرد؟ چطور می شه هم کیفیت رو داشت ، هم سریع بود و هم ارزون! تو دنیایی که تشنه‌ی محتواست و رسوندن محتوا به کسب و کارا از نون شب هم واجب تره.  تو این کارگاه تلاش می کنیم فرایند ترجمه رو بررسی کنیم و با معرفی #نسل_جدید_ترجمه راه کارهای مناسبی برای این فرایند پیدا کنیم که بی تردید بدرد همه میخوره! چه فریلنسر ترجمه باشیم ، یا #بلاگر یه کسب وکار، یا #دانشجو یا محقق.  پس با ما باشید!  در روز #فریلند http://freelanday.ir محل : مرکز همایش‌های منطقه آزاد انزلی کارگاه‌ : افزایش راندمان و درآمد فریلنسینگ ترجمه</description>
                <category>همایون</category>
                <author>همایون</author>
                <pubDate>Sat, 08 Sep 2018 16:35:14 +0430</pubDate>
            </item>
                    <item>
                <title>راه اندازی یک highavailable system به همراه لود بالانسر</title>
                <link>https://virgool.io/targoman/%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-%DB%8C%DA%A9-highavailable-system-%D8%A8%D9%87-%D9%87%D9%85%D8%B1%D8%A7%D9%87-%D9%84%D9%88%D8%AF-%D8%A8%D8%A7%D9%84%D8%A7%D9%86%D8%B3%D8%B1-r7sjhvutluu1</link>
                <description> تصور کنید یه وب سایت داریم که محبوب شده و روز به روز بازدیدش بالاتر میره، کم کم با زیاد شدن بازدید ها سرور دیگه توانایی پاسخگویی نداره و اصطلاحا down میشه! برای مدیریت این حجم درخواست دو راه وجود داره:۱- سرورمون رو ارتقا بدیم۲-به جای یه سرور چند تا سرور داشته باشیمروش اول خیلی ساده پیاده سازی می‌شه، در عوض یکسری محدودیت ها داره. اولین محدودیت اینه که سرور تا یه حدی توانایی ارتقا داره، و دومین مورد اینه که اگر به هر دلیلی ( مثل خرابی ، ارتقا وب سایت و ...) سرور از دسترس خارج بشه عملا سایتمون از دسترس خارج میشه.توی این پست قصد داریم پیاده سازی روش دوم رو اموزش بدیم.ببینیم لود بالانسینگ چیه:لود بالانسر کارش اینه درخواست هایی که برای سایتمون میاد رو تحویل میگیره، و بین دو یا چند سرورمون تقسیم می‌کنه و ساختار سیستم هامون هم به این صورت میشه:http://www.digitalsanctuary.com/tech-blog/debian/13-steps-to-peace-of-mind.htmlخب شروع میکنیم به راه اندازی یه وب سرور ساده به‌همراه لود بالانسر:(توزیعی که من در نظر گرفتم اوپن سوزه هستش ولی غیر از دستورات پایه ای مراحل تقریبا مشابه بقیه توزیع هاست)نصب nginx بعنوان وب سرور:(اینجا قصد نداریم کانفیگ nginx رو توضیح بدیم و فقط قراره در حد اجرای یه صفحه html تنظیمش کنیم)zypper refreshzypper install -y nginxحالا یکسری تنظیمات ساده روی nginx انجام می‌دیم. فایل /etc/nginx/nginx.conf رو باز می‌کنیم:و بخش سرور رو پیدا می‌کنیم و این تغییرات رو انجام می‌دیم:listen        80;server_name _;همونطور که تو عکس بالا مشخصه دایرکتوری روت srv/www/htdocs هستش(تو توزیع های مختلف متفاوته باید از طریق فایل کانفیگ ببینید کجاس) یه فایل index.html توی این مسیر میسازیم:touch /srv/www/htdocs/index.htmlecho &quot; hello i am SERVER 1&quot; &gt; /srv/www/htdocs/index.htmlهمین مراحل رو توی سرور دوم انجام بدیدم فقط تو دستور بالا بجای SERVER 1 بزنید SERVER 2 .برای لود بالانس کردن نرم افزار haproxy رو انتخاب کردیم. همونطور که توی شکل بالا مشخصه لود بالانسر روی سرور سوم نصب میشه و به درخواست هارو به وب سرور ها انتقال می‌ده.نصب HaProxyzypper install -y haproxyتنظیم haproxy:vi /etc/haproxy/haproxy.cfgخطوط زیر رو به انتهای فایل کانفیگ اضافه می‌کنیم:frontend http-in                bind *:80                default_backend webserverbackend webserver                balance roundrobin                server web1  192.168.1.70:80 check                server web2  192.168.1.71:80 checkبخش frontend مربوط به لود بالانسر میشه که مشخص میکنه چه ورودی هایی رو  دریافت کنه و به کجا بفرسته:این اپشن یعنی هر ورودی ای که رو پورت ۸۰ بود رو دریافت کنbind *:80 حالا ورودی هایی رو که دریافت کردی برای بک اند سرور به این اسم بفرست ( ادرس های ای پی که وارد شده ادرس وب سرورهامونه) default_backend   webserversبخش backend webserver هم مربوط به سرورهامون میشه که مشخص میکنه چند تا سرور داریم و ادرسشون چیه و با یه اسم دلخواه به frontend معرفی میشهbalance roundrobin server web1 192.168.1.70:80 check سرور رو معرفی میکنه که کجا قرار داره و چک کن که  در حال سرویس دهی هم باشه  حالا سرویس هامونو روی سرور های اول و دوم  اجرا می‌کنیم systemctl start nginx.servicesystemctl enable nginx.serviceو روی سرور لود بالانسر هم سرویس Haproxy رو اجرا می‌کنیم:systemctl start haproxysystemctl enable haproxyحالا اگر توی Browser ادرس آی پی لودبالانسر رو وارد کنید باید متن hello i am SERVER 1 نمایش داده بشه اگه رفرش کنید میبینید که صفحه عوض میشه به hello i am SERVER 2[طبیعیه که سرور ها و لود بالانسر باید تو یه شبکه باشن تا بتونن با هم ارتباط برقرار کنن]شاید تا اینجا برای شما هم سوال شده باشه اگه لود بالانسر به مشکل بخوره چی؟  اینجاست که Highavailability نقششو ایفا می‌کنه.به این صورت که یه لود بالانسر دیگه به عنوان بک اپ تنظیم می‌کنیم و در صورتی که اولی از کار افتاد دومیه دست بکار میشه.پس باید یه لودبالانسر دیگه روی سرور چهارم نصب میکنیم (کانفیگ ها هیچ تغییری نمیکنه)https://www.digitalocean.com/community/tutorials/what-is-high-availabilityبرای Highavailability از نرم افزار Keepalive استفاده میکنیمروش کار این دست نرم افزار ها به این صورته که یه ای پی مجازی میسازه (اینجا ۱۹۲.۱۶۸.۱.۷۳ ) و درخواست ها برای این ادرس ای پی مجازی فرستاده میشه.سرور Master به درخواست ها جواب میده . به محض اینکه این سرور از دسترس خارج بشه سرور Backup به درخواست های ای پی مجازی جواب میده نرم افزار Keepalive رو روی سرور لود بالانسر اول نصب می‌کنیم و اون رو بعنوان Master در نظر می‌گیریمzypper install keepalivedکافیگ ها سرور Master vi /etc/keepalived/keepalaived.confscript chk_haproxy { #یه اسکریپت بهش میدیم که لود بالانسر رو مانیتور کنه و اگه جواب نداد یعنی سرور از  دسترس خارج شده و سرور بعدی باید جایگزین بشهscript “killall -0 haproxy”interval 2weight 2}vrrp_instance VRRP1 { state MASTER#  ادرس کارت شبکه ای که قراره باهاش کار کنیمinterface eth1#  مربوط به پروتکل مورد استفاده نرم افزاره و باید رو دوتا سیستم یکسان باشه تا همدیگرو شناسایی کننvirtual_router_id 41#   سیستم مستر از اولویت بالاتری برخوردارهpriority 200advert_int 1authentication { یوزر پس برای امنیتauth_type PASSauth_pass 1066}virtual_ipaddress { ادرس ای پی مجازی 192.168.1.73/24}track_script{ اسکریپتی که بالا تعریف کردیم رو تست میکنهChk_haproxy}کانفیگ Keepalived روی سرور لودبالانسر دوم به عنوان سرور Backupvi /etc/keepalived/keepalived.confscript chk_haproxy {script “killall -0 haproxy”interval 2weight 2}vrrp_instance VRRP1 {state BACKUPinterface eth1virtual_router_id 41priority 100advert_int 1authentication {auth_type PASSauth_pass 1066}virtual_ipaddress {192.168.1.73/24}track_script{Chk_haproxy}حالا دیگه فقط یه ای پی داریم، اگر ای پی رو توی Browser وارد کنیم صفحه سایت لود میشه. برای تست هم میتونید سرور اصلی رو ریستارت کنید و ببینید که سایت همچنان در دسترسه :)(دقت داشته باشید High Available کردن دیتا بیس ها بخاطر تغییرات لحظه به لحظه داده ها فرایند های پیچیده تری رو نیازمنده که توی این پست قصد نداریم در موردش بحث کنیم)سیستمی که بالا توضیح داده شد اصطلاحا Active/Passive گفته میشه و همیشه یه لود بالانسر غیر فعال و در حالت اماده به کاره اگر بخوایم هر دوتا لود بالانسر همزمان کار کنن باید حالت active/passive رو به active/active تبدیل کنیم.(آموزش حالت Active/Active رو توی یه پست جداگانه میزارم)لزوما لازم نیست که سرور های لود بالانسر جداگانه باشن و برای کاهش هزینه میشه از وب سرور ها برای نصب Haproxy و Keepalived استفاده کرد فقط باید پورت Nginx رو از ۸۰ به ۸۰۸۰ تغییر بدیم چون قراره Haproxy به  پورت ۸۰ جواب بده و تنظیمات Haproxy هم برای معرفی Backend به پورت ۸۰۸۰ تغییر پیدا میکنه.مجموعه این تحقیقات و ازمایش هایی که در ادامه مستند می‌کنم در شرکت پردازش هوشمند ترگمان مجری سامانه های ترجمه ماشینی ترگمان و ترجمیار انجام شده است.</description>
                <category>همایون</category>
                <author>همایون</author>
                <pubDate>Sat, 19 May 2018 19:05:53 +0430</pubDate>
            </item>
                    <item>
                <title>راه اندازی private registry در داکر</title>
                <link>https://virgool.io/targoman/%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-private-registry-%D8%AF%D8%B1-%D8%AF%D8%A7%DA%A9%D8%B1-ftsiguzhmssw</link>
                <description>مشکل بزرگی که استفاده از داکر برای ما ایرانی ها داره تحریمه.  ما اجازه دانلود ایمیج‌های استاندارد رو نداریم. بنابراین باید به نحوی ایمیج هارو جداگونه ذخیره کنیم.ساده‌ترین کار اینه که ایمیج‌های مورد استفادمون رو روی فلش یا حافظه سیستم نگهداری کنیم، تا هر وقت که خواستیم ازشون استفاده کنیم. این‌کار فقط ساده‌ترین راهه نه بهترین راه، چون اگر تعداد سیستم ها زیاد باشه باید یکسری فرایند دستی رو برای کپی کردن ایمیج ها روی سیستم لوکال انجام بدیم:(برا اینکه از همه این سختی ها نجات پیدا کنیم، یکبار راه اندازی private registry رو انجام میدیم و زندگی شیرین میشه.با این رجیستری خیلی راحت میتونیم ایمیج هارو push/pull کنیم. حتی میتونیم ایمیج های اختصاصی‌مون رو روش قرار بدیم و ادرس رجیستری رو در اختیار مشتریانمون قرار بدیم)خب شروع میکنیم:فقط یه docker image به اسم registry:2 رو اجرا میکنیم و تموم!!!حواستون باشه برای اولین بار حتما باید با وی پی ان متصل باشید تا بتونید ایمیج رو دانلود کنید.docker run -d -p 5000:5000 registry:2اینجا ما پورت پیش فرض ۵۰۰۰  رو مپ کردیم،  که میتونیم تغییرش بدیم ( نکنید اینکارو بیکارید مگه)مرحله بعدی قرار دادن docker image روی private registry‌مونه(من اینجا از ایمیج mysql که روی لوکال داشتم استفاده کردم)دستور اول ایمیج mysql  رو برای ریپازیتوری تگ میکنه و دومی هم ارسالش می‌کنه روی ریپازیتوریdocker tag mysql localhost:5000/mysql:1.0.0docker push localhost:5000/mysql:1.0.0تا اینجا ما یه private registry داریم، که یه ایمیج هم داخلش ذخیره کردیم. ولی این سرور فقط روی  localhost کار می‌کنه، اگر بخوایم از یه سیستم بیرونی ایمیجی رو pull/push کنیم انجام نمیشه. این اتفاق بخاطر اینه که  docker daemon درخواست‌های بیرونی بدون TLS رو ریجکت می‌کنه.ساخت یک Self Signed Certificateاین  certificate ها برای احراز هویت به کار میره. که دو مدل داریم self signed و public  تفاوتشون هم در اینه که، selfsigned certificate ها رو خودمون می‌سازیم، ولی هر کس که میخواد متصل بشه باید بهش یه public key بدیم.  مورد دوم خریداری میشه و برای اتصال نیازی نیست که public key کپی بشه. بسته به نیازتون ممکنه از یکی از این روش ها استفاده کنید.روش دیگه ای هم وجود داره که برای هر کس نام کاربری و کلمه عبور تعریف می‌کنیم، که آقای بهروزم توی این پست توضیح دادندتوی این پست، ما یه Self Signed Certificate روی سرورمون میسازیم و از اون برای Docker registry استفاده می‌کنیم. از طریق  دستور openssl اینکارو انجام می‌دیمmkdir registry_certsopenssl req -newkey rsa:4096 -nodes -sha256 \                -keyout registry_certs/domain.key -x509 -days 356 \                -out registry_certs/domain.cert(طی مراحل ساخت certificate یکسری سوال میپرسه مثلCountry Name (2 letter code) [XX]باید اسم اختصاری کشور(ir) رو بزنید. ولی گزینه پایین که خیلی باید بهش دقت کنید، ادرس FQDN یا همون ادرس DNS ی که قرار از طریق اون به رجیستری متصل بشید رو باید وارد کنید. (مثلا من برای خودمو گذاشتم docker-repo.local ) Common Name (eg, your name or your server&#x27;s hostname) []:ما یک x509 certificate و private RSA key ساختیم که برامون دو تا فایل ایجاد کرد:domain.cert - این فایل رو به کلاینت می‌دیم تا بتونه از ریپازیتوری استفاده کنهdomain.key - این فایل هم کلید خصوصیه و توی رجیستری قرار میگیره  راه اندازی private registry با certificate(دقت کنید اگر docker run -d -p 5000:5000 registry:2 رو قبلا اجرا کردید باید با دستور docker rm کانتینری که ساخته شده رو حذف کنید)docker run -d -p 5000:5000 \ -v $(pwd)/registry_certs:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.cert \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ --restart=always --name registry registry:2 برای اینکه از بیرون بهش وصل بشیم کافیه certificate رو توی کلاینت قرار بدیمmkdir -p /etc/docker/certs.d/docker-repo.local:5000 cp domain.cert /etc/docker/certs.d/docker-repo.local:5000/ca.crtservice docker restartدر نظر داشته باشید توی قسمت &lt;registry_address&gt; باید ادرس hostname رجیستری سرور رو قرار بدیم. که میتونه پابلیک باشه مثلا www.example.com یا تو dns لوکال ست شده باشه.(برا من  docker-repo.local) اگر ادرس پابلیک هست که نیازی نیست کاری انجام بدید ولی اگر مثل من یه ادرس من دراوردی گذاشتید باید فایل /etc/hosts ادرس ای پی private registry رو با این اسم معرفی کنید.حالا میتونیم از یه کلاینت بیرونی هم ایمیج هارو pull/push کرد.به جای &lt;your server address&gt; باید ادرس سرور خودتون بهمراه پورتی که براش تعریف کردید رو بزارید، بدون  این دوتا &lt;&gt; مثلا برای من میشه(docker tag mysql docker-repo.local/proxy:registryserver)docker tag mysql &lt;your server address&gt;/proxy:registry-serverdocker push &lt;your server address&gt;:5000/proxy:registry-serverتوی pull و push هاتون حتما دقت داشته باشید که تگ اضافه کنید.جالبه که میتونیم برای این رجیستری یه frontend هم راه اندازی کنیم که از طریق یک container دیگه انجام میشه (ادرس سرور Docker-repo.local هستش)docker run \ -d \ -e ENV_DOCKER_REGISTRY_HOST=docker-repo.local \ -e ENV_DOCKER_REGISTRY_PORT=5000 \ -e ENV_DOCKER_REGISTRY_USE_SSL=1 \ -p 0.0.0.0:80:80 \ konradkleine/docker-registry-frontend:v2مجموعه این تحقیقات و ازمایش هایی که در ادامه مستند می‌کنم در شرکت پردازش هوشمند ترگمان مجری سامانه های ترجمه ماشینی ترگمان و ترجمیار انجام شده است.</description>
                <category>همایون</category>
                <author>همایون</author>
                <pubDate>Tue, 24 Apr 2018 16:20:01 +0430</pubDate>
            </item>
                    <item>
                <title>docker swarm</title>
                <link>https://virgool.io/targoman/docker-swarm-gst10sruq1eq</link>
                <description>داکر SWRM یک کلاستره که توسط داکر در اختیارمون گذاشته شده(کلاستر کارش اینه اگر یک سرویس داریم از اون چندین جای مختلف راه اندازی می‌کنیم و کلاستر در صورت غیر فعال شدن یکی از سرویس دهنده ها خود بخود درخواست هارو به بقیه سیستم ها منتقل می‌کنه که در واقع باعث میشه سرویسمون هیچوقت غیر فعال نشه)توی SWARM ما یک سرویس رو روی چندین CONTAINER و چندین سیستم راه اندازی میکنیم تا تحمل خطا خیلی بالاتر برهبعد از اینکه ماشین های مختلف عضو یک SWARM شدن دیگه همه دستورات مثل حالت معمولی ای میشه که قبلا استفاده می‌کردیم فقط وقتی یک دستور رو اجرا می‌کنیم swarm manager اون دستور رو روی بقیه سیستم هایی که توی swarm عضو هستن هم اجرا می‌کنه. swarm manager همون سیستمیه که swarm روش راه اندازی شده و بقیه سیستم ها بهش join میشنراه اندازی swarm:دستور docker swarm init همین! swarm راه اندازی شد و سیستمی که روش این دستور رو بزنیم به عنوان swarm manager انتخاب میشه فقط کافیه بقیه سیستم هارو بهش join کنیم.وقتی docker swarm init رو اجرا می‌کنیم یکسری خروجی بهمون میده شامل ip و port و یک token که برای join شدن بقیه سیستم ها کاربرد داره.برای join کردن یک سیستم دیگه کافیه روش داکر نصب باشه و دستور (token همونیه که توی عکس بالا بعنوان خروجی تولید شده)docker swarm join --taken swmtksksdfsdlkfo....sdfjjf 192.168.1.93:2377خب ما میخواستیم چندین کپی از یه سرویس تو سیستم های مختلف ایجاد کنیم اینجاست که از فایل docker-compose.yml استفاده می‌کنیم و خیلی راحت روی همه سیستم ها deploy میشه(نوشته قبلی)docker stack deploy -c docker-compose.yml my_servicesبصورت خودکار ۵ تا کانتینری که قرار بود توی این فایل ساخته  بین سیستم هایی  که عضو swarm کردیم پخش میشه و بهمین سادگی یه کلاستر ساخته شد.نکته خیلی خیلی مهم: هر ایمیجی که توی فایل docker-compose.yml استفاده شده باید توی تک تک سیستم های عضو swarm لود شده باشند و گر نه به خطا بر میخوریم(docker load ) اگر خواستیم اون سرویسی که deploy رو حذف کنیم docker stack rm my_servicesاگر خواستیم  swarm رو حذف کنیم :docker swarm leave --force</description>
                <category>همایون</category>
                <author>همایون</author>
                <pubDate>Thu, 11 Jan 2018 12:46:06 +0330</pubDate>
            </item>
                    <item>
                <title>فایل docker-compose.yml چیست؟</title>
                <link>https://virgool.io/targoman/%D9%81%D8%A7%DB%8C%D9%84-docker-composeyml-%DA%86%DB%8C%D8%B3%D8%AA-szpcigfpvsab</link>
                <description>تصور کنید تصمیم ۵ تا کانتینر بسازیم که باید پورت هاشو مپ کنیم و منابعش رو محدود کنیم براش شبکه اختصاصی بسازیم و اپشن های دیگه هم بهش بدیم! این پروسه هم زمان بره هم تکراری و خسته کننده راه حل داکر برای ساده کردن این کار docker-compose.yml هست.یه فایل متنی که همه این تنظیمات رو یکبار وارد می‌کنیم و هر بار با همون کانتینر رو میسازیم.اولین قسمت ورژن خود فایل رو نشون می‌ده توی بخش services اسم سرویسی که قراره راه اندازی بشه رو برای فایل معرفی می‌کنیمتوی بخش image همون ایمیجیه که میخوایم ازش استفاده کنیم و فقط اسمشو میزنیمتوی قسمت replicas بهش می‌گیم از این کانتینر چند تا میخوایم؟ اینجا داره بهش میگه ۵ تا بسازه(حواستون باشه که این قسمت زیر شاخه deploy هستتوی قسمت resources یکسری limit تعیین کردیم که میگه هر کانتینر اجازه استفاده حداکثر ۱۰ درصد cpu و ۵۰ مگابایت ram رو داره.توی بخش rstart policy  بهش گفتیم اگر سرویس fail شد ریستارتش کن.پورت ۸۰ رو به ۸۰ مپ کناز شبکه به اسم webnet هم استفاده کن**حتما براتون سوال شده که چرا باید از یک کانتینر ۵ تا بسازیم اون با یه اسم! توی پست بعدی کامل توضیح می‌دم.در ادامه این دستور رو بزنید:(توضیحش توی پست بعدی داده می‌شه)docker swarm initحالا فایل رو اجرا می‌کنیم:(new_lab اسم دلخواهه)docker stack deploy -c docker-compose.yml new_labاین خروجی ایه که من داشتم اگر ببینید برامون ۵ تا container و یک سرویس! بدون توضیحات اضافه مطلب بعدی رو شروع می‌کنیم و توضیحات رو کامل می‌کنیم.</description>
                <category>همایون</category>
                <author>همایون</author>
                <pubDate>Thu, 11 Jan 2018 11:46:58 +0330</pubDate>
            </item>
                    <item>
                <title>مفهوم شبکه در docker</title>
                <link>https://virgool.io/targoman/%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%B4%D8%A8%DA%A9%D9%87-%D8%AF%D8%B1-docker-pgqyvzj70cpb</link>
                <description>مبحث شبکه در docker بسیار گستردس که معمولا برای کارهای خیلی حرفه ای استفاده می‌‌شهاینجا صرفا در مورد یکسری موارد عمومی در حد آشنایی با شبکه در داکر صحبت می‌کنیم(خودمم هم در همین حد نیاز دیدم یاد بگیرم)وقتی DOCKER یه کانتینر رو اجرا می‌کنه. بصورت پیش فرض یه شبکه BRIDGE میسازه و اون رو NAT میکنه.منظورم از شبکه BRIDGE یعنی یه کارت شبکه مجازی میسازه که بتونه از هاست(سیستم عامل اصلی که داکر روش نصب شده) با container در ارتباط باشه. از طرفی nat هم انجام میده تا کانتینر اینترنت داشته باشه.این کار بصورت پیش فرض همیشه انجام میشه. مگر اینکه خودمون بخوایم تغییراتی داشته باشیم( مثلا برای DOCKER SWARM نیاز داریم که چند تا کانتینر توی یک شبکه باشن بعدا در مورد SWARM هم صحبت می‌کنیم)کامند اصلی ای که برای مبحث شبکه استفاده میشه که میتونیم با help-- تمام اپشن هاشو ببینیم.docker network --helpمثلا دستور docker network ls که لیست شبکه های داکر رو بهمون می‌ده(خروجی سیستم من به این صورته)اگر دقت کنید چندین شبکه bridge داریم که به ازای هر کانتینر ساخته شدهبا شبکه های null و host کاری نداریم شبکه overlay هم برای swarmeهم چنین توی خروجی اسم شبکه ها رو هم میبینیم اگر بخواهیم اطلاعات جزیی تری از یک شبکه داشته باشیم از دستور پایین استفاده میکنیم(docker_gwbridge اسم یکی از شبکه هاییه که بالا دیدیم)docker network inspect docker_gwbridge**اگر بخوایم ریز مشخصات یک container رو ببینیم از این دستور استفاده می‌کنیم:docker inspect container_nameمعمولا توی داکر کسی با ip کاری نداره و با پورت ها کار می‌کننیعنی میایم یه پورتی از کانتینر رو مپ میکنیم از اون به بعد خیلی ساده میتونیم از سیستم هاست(که داکر روش نصبه) با اون پورتی که تعریف کردیم کار کنیم. توی همین دستور بالا که میزنیم یه قسمتی داره به اسم ports که بهمون نشون میده چه پورتی رو در اختیارمون گذاشته بعد میتونیم اون پورت رو این مدلی مپ کنیم:docker run -d -v data:/var/data -p 28321:27001  ubuntuنکته:۲۷۰۰۱  همون پورتی هست که توی قسمت پورت نشون میداد در اختیارمون گذاشته ۲۸۳۲۱ هم که پورت دلخواهمون*** اگر موضوع هنوز براتون گنگه این قسمت رو بخونید:                                                                                 تصور کنید یه container داریم با ip=172.16.0.12 که روش وب سرور داریم خب پس روی پورت 80 بهمون جواب میده ولی روی چه هاستی؟ روی ۱۷۲.۱۶.۰.۱۲ که ip کانتینر هستش اگر پورت ۸۰۸۰ رو پورت کنیم روی ۸۰ خیلی راحت روی localhost سیستمی که روش داکر نصب شده میتونیم بهش دسترسی داشته باشیم.مجموعه این تحقیقات و ازمایش هایی که در ادامه مستند می‌کنم در شرکت پردازش هوشمند ترگمان مجری سامانه های ترجمه ماشینی ترگمان و ترجمیار انجام شده است. </description>
                <category>همایون</category>
                <author>همایون</author>
                <pubDate>Wed, 10 Jan 2018 15:51:57 +0330</pubDate>
            </item>
                    <item>
                <title>داکر volume</title>
                <link>https://virgool.io/targoman/%D8%AF%D8%A7%DA%A9%D8%B1-volume-rdehk48ggsgo</link>
                <description> یه خصوصیتی که توی داکر وجود داره اینه که اگر شما توی یک container یک فایل کپی کنید یا ایجاد کنید به محض اینکه اون کانتینر stop بشه تمام فایل هایی که ایجاد کردیم حذف می‌شه.راه حل هم استفاده از dokcer volume هست. به این شکل که بخشی از حافظه اصلی رو به کانتینر mount می‌کنه.دستورهایی که باهاشون سر کار داریم ایناستdocker volume lsdocker volume createdocker volume inspectdocker volume rmبا کامند docker volume create شروع می‌کنیم:( data اسم دلخواه برای volume جدیدیه که میسازیم)docker volume create --name dataحالا اگر docker volume ls بگیریم این volume رو نشون می‌ده(یکسری دیگه هم نشون می‌ده که ما باهاشون کاری نداریم)اگر بخوایم مشخصات کامل یک volume رو ببینیم از این دستور استفاده می‌کنیم(data اسم اون volume مورد نظرمونه) docker volume inspect data  خروجی هم ۳ تا قسمت مهم داره یکی driver هست که اینجا لوکاله یعنی اگه یه سیستم تحت شبکه هم باشه میتونه اونو mount کنه - mount point و options هم که مشخصهمفهمومی که باید بهش توجه کنیم که ممکنه گمراه کننده باشه اینه که برای راه اندازی volume ما دوتا دایرکتوری باید معرفی کنیم. یکیش دایرکتوری ایه که رو سیستم اصلیمون هست و میخوایم فایل ها روش ذخیره بشن که کاملا دلخواهه مسیرشم بالا توی خروجی دستور docker volume inspect data دیدیم.دومی مسیریه که میخوایم توی کانتینر mount بشه یعنی بهش بگیم از این به بعد هر چی توی این فولدر ریختیم در اصل توی سیستم اصلی ذخیره بشه که میتونه دلخواه باشه میتونه نباشه مثلا فرض کنید میخواید فایل های یه دیتا بیس رو ذخیره کنید خب قاعدتا مسیری که دیتا بیس فایلاشو اونجا قرار می‌ده رو معرفی می‌کنیم.(اگر موضوع براتون نامفهومه احتمالا با مفهوم mount کاملا آشنا نیستید و یسری به داکیومنت هاش بزنید)این دستور یک volume رو توی کانتینر mount میکنه:docker run --name hala_harchi -d -v data:/var/data ubuntuهمون دستور docker run که قبلا دیدیمش  فقط اپشن -v بهش اضافه شده که میگه دایرکتوری var/data/ رو به volume ماونت کنه.مطلب بعدی : docker networkمجموعه این تحقیقات و ازمایش هایی که در ادامه مستند می‌کنم در شرکت پردازش هوشمند ترگمان مجری سامانه های ترجمه ماشینی ترگمان و ترجمیار انجام شده است.</description>
                <category>همایون</category>
                <author>همایون</author>
                <pubDate>Wed, 10 Jan 2018 11:46:58 +0330</pubDate>
            </item>
                    <item>
                <title>داکر images</title>
                <link>https://virgool.io/targoman/%D8%AF%D8%A7%DA%A9%D8%B1-images-qvrzeapm0qgm</link>
                <description>توضیحات اولیه images توی پست قبلی برای راه اندازی کانتینر داده شده در ادامه همون توضیحات میخوایم دستورات بیشتری رو معرفی کنیم:حالا فرض کنیم از یک ایمیج یک کانتینر ساختیم و یکسری تغییرات روش انجام دادیم که میخوایم همیشه باشهآیا این تغییرات روی خود image اعمال میشه؟ خیر باید اون رو commit کنیم تا تو سیستم خودمون ذخیره بشه تا هر وقت خواستیم یک ایمیج با تغییرات دلخواه داشته باشیم:docker commit 90e0172d9d0b centos:my_changesاین ایمیج الان توی سیستم ما ذخیره شده و توی خروجی docker images هم نمایش داده میشه.همین image رو میتونیم حتی مثل یک فایل ذخیره کنیم و ازش توی سیستم های دیگه هم استفاده کنیم با استفاده از دستور:docker save  ubuntu &gt; 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 [&quot;python&quot;, &quot;app.py&quot;]ساختن یه ایمیج جدید به همین سادگیه فقط کافیه نرم افزار اصلی و فایل 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=&quot;redis&quot;, db=0, socket_connect_timeout=2, socket_timeout=2)

app = Flask(__name__)

@app.route(&quot;/&quot;)
def hello():
    try:
        visits = redis.incr(&quot;counter&quot;)
    except RedisError:
        visits = &quot;&lt;i&gt;cannot connect to Redis, counter disabled&lt;/i&gt;&quot;

    html = &quot;&lt;h3&gt;Hello {name}!&lt;/h3&gt;&quot; \
           &quot;&lt;b&gt;Hostname:&lt;/b&gt; {hostname}&lt;br/&gt;&quot; \
           &quot;&lt;b&gt;Visits:&lt;/b&gt; {visits}&quot;
    return html.format(name=os.getenv(&quot;NAME&quot;, &quot;world&quot;), hostname=socket.gethostname(), visits=visits)

if __name__ == &quot;__main__&quot;:
    app.run(host=&#039;0.0.0.0&#039;, port=80)

این هم خروجی ایه که به من داد حالا اگر دستور docker images رو بزنید توی خروجی ایمیجتونو می‌بینید.مطلب بعدی: docker volumeمجموعه این تحقیقات و ازمایش هایی که در ادامه مستند می‌کنم در شرکت پردازش هوشمند ترگمان مجری سامانه های ترجمه ماشینی ترگمان و ترجمیار انجام شده است.</description>
                <category>همایون</category>
                <author>همایون</author>
                <pubDate>Mon, 08 Jan 2018 15:23:40 +0330</pubDate>
            </item>
                    <item>
                <title>راه اندازی اولین container</title>
                <link>https://virgool.io/targoman/%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D8%AA-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF%DB%8C-%D8%AF%D8%A7%DA%A9%D8%B1-ovuddkzxn2dt</link>
                <description>قبل از اینکه بخوام در مورد دستورات صحبت کنم یه توضیح ساده در مورد image و container بدمدر اصل image یک محیط پایه برای اجرای دستورات یک سیستم عامله (مثل دبیان) و هر image توی داکر با عنوان یک container اجرا میشه یعنی ما یه ایمیج داریم اونو توی یه کانتینر لود می‌کنیم و توی فضای کانتینر اجرا میشه و اصطلاحا سرویس می‌ده.(مثلا وقتی یه  mysql توی داکر داریم که در حال سرویس دهی هست به اون محیط می‌گیم container)هدف اینه که ما یک container داشته باشیم که قراره یک سرویس رو اجرا کنه ( مثلا دیتابیس mysql )اولین کاری که باید بکنیم دور زدن تحریمیه که داکر برای ایران گذاشتهراحتترین روش استفاده از یه  vpn یا پروکسی هست که ای پی مارو به یه کشور دیگه تغییر بده( منظورم کشوریه که امریکا دوسش داره باز نرید vpn سوریه بگیرید)یک سایت ایرانی هم هست که یک ریپازیتوری خصوصی ساخته که میتونیم از اون استفاده کنیم (با اینکه همه ایمیج هارو نداره ولی سرعتش بالاتره) این هم سایتشه docker.ir توی همون سایت هم توضیح اینکه چطوری اون ریپازیتوری خصوصی رو اضافه کنید رو نوشته فقط تغییرات اوپن سوزه رو اینجا میزارم:فایل  vi /etc/sysconfig/docker رو باز می‌کنیم و این خط رو بهش اضافه می‌کنیم:DOCKER_OPTS=&quot;--registry-mirror=http://repo.docker.ir:5000&quot;فرض می‌کنیم به یه روشی از تحریم رد شدیم حالا وقتشه که یک ایمیج رو دانلود کنیم و بعدش توی یک container اجراش کنیمبرای اون‌هایی که مفهوم ایمیج هنوز گنگه براشون:ایمیج ها محیط های اماده ای هستن که میتونیم سرویس هامونو روی اونا راه بندازیم مثلا ایمیج mysql یا ایمیج centos یکسری ایمیج ها مثل mysql یا wordpress هدفشون مشخص و اماده سرویس دهی هستن ولی یکسری ایمیج ها مثل centos  یه محیط خالی بدون استفاده‌ان که کاربردشون اینه که اگر ما خودمون یه نرم افزار داریم مثل ترجمیار خودمون با این ایمیج ترکیب می‌کنیم و یه ایمیج خصوصی میسازیم که سرویس مارو ارایه می‌ده که در ادامه هر کدوم رو بصورت مجزا توضیح ‌‌میدیم.برای دانلود کردن یک ایمیج :docker pull mysqlبرای اجرای یک ایمیج درون container docker run -it mysqlیه همین سادگی یک سرویس mysql توسط داکر راه اندازی میشه وقتی این دستور رو وارد می‌کنیم وارد محیط اون کانتینر میشیم اگر بخوایم کانتینر توی بک گراند اجرا بشه از سوییچ دیگه ای استفاده می‌کنیمdocker run -d mysqlنکته:برای دانلود یک ایمیج حتما لازم نیست docker pull استفاده کنیم همون docker run همه کار رو خودش انجام میده اگر ایمیج دانلود شده بود از اون استفاده ‌‌می‌کنه اگر نه دانلود می‌کنه. تو عکس پایین من ایمیج mysql رو نداشتم و بصورت خودکار شروع به دانلود کرد.لیست container ها و image هادستور docker ps  این دستور لیست container های در حال اجرا رو بهمون میده.دستور docker images این دستور لیست image های موجود رو بهمون می‌ده.مثال: راه اندازی یک ایمیج از centosdocker run -it centos:74321نکته: بعد از centos تگ هست که مشخص می‌کنه کدوم ورژن مد نظرمونه. مثلا ما ورژن قدیمی رو توی لوکال داریم اگر ورژن رو نزنیم سعی می‌کنه دوباره بره دانلود کنه چون ورژن جدیدتری براش اومده اما با تگ میتونیم دقیقا ورژن مد نظرمون رو انتخاب کنیم.(تگ رو میتونیم توی خروجی دستور docker images ببینیم)با دستور exit میتونیم از container خارج بشیم که باعث stop شدنش هم میشه یعنی اگر docker ps بزنیم بازم چیزی نشون نمیده چون کانتینر در حال اجرا نیست.اما اگر از دستور docker ps -a  استفاده کنیم لیست همه کانتینر هایی که داشتیم از جمله اونایی که در حال اجرا نیستن رو هم بهمون میده.حذف یک containerبرای حذف یک container هم میتونیم از id (که بصورت خودکار ساخته میشه) و هم از اسم container (که اگر خودمون بهش ندیم خودکار میسازه) استفاده کنیم . هر دوتارو هم میتونید از خروجی دستور docker ps -a پیدا کنیم.اگر بخواهیم به کانتینر اسم دلخواه بدیم از سوییج name-- موقع اجرای دستور docker run استفاده می‌کنیم و جلوش اسم دلخواه رو بنویسیم.دستور حذف containerdocker rm 90e0172d9d0b &lt;--- ای دی کانتینر دلخواهتوی این عکس اول لیست کل container هارو نمایش دادیم بعد اخرین کانتینر رو حذف کردیم و دوباره لیست گرفتیم.
lمطلب بعدی: داکر images مجموعه این تحقیقات و ازمایش هایی که در ادامه مستند می‌کنم در شرکت پردازش هوشمند ترگمان مجری سامانه های ترجمه ماشینی ترگمان و ترجمیار انجام شده است.</description>
                <category>همایون</category>
                <author>همایون</author>
                <pubDate>Sun, 07 Jan 2018 17:14:58 +0330</pubDate>
            </item>
                    <item>
                <title>نصب داکر برو روی اوپن سوزه</title>
                <link>https://virgool.io/targoman/%D9%86%D8%B5%D8%A8-%D8%AF%D8%A7%DA%A9%D8%B1-%D8%A8%D8%B1%D9%88-%D8%B1%D9%88%DB%8C-%D8%A7%D9%88%D9%BE%D9%86-%D8%B3%D9%88%D8%B2%D9%87-zyxlhcwv8bwj</link>
                <description>مقدمه : حتما براتون جای تعجب داره که چرا این توزیع رو انتخاب کردم با اینکه توی ایران این تصور وجود داره که اوپن سوزه اصلا سیستم سرور نیست! که قطعا درست نیست.اوپن سوزه برای سرور خیلی پایداره (حتی ibm برای ابر رایانه هوش مصنوعیش از این سیستم عامل استفاده می‌کنه منبعدومین علت که خیلی برای خودم  مهمه اینه که گسترش دهنده خیلی از سرویس های تحت سرور لینوکسی مخصوصا تو حوزه high availability اوپن سوزه هستش و بهمین خاطر داکیومنت های خیلی خوب و کاربردی ای تو سایت خودش داره (فقط وقتی که برای یادگرفتن یه چیز جدیدچند روز وقتتونو روی یه داکیومنت بد گذاشتید متوجه اهمیت این موضوع می‌شید)اوپن سوزه یه سیستم مدیریتی داره به اسم yast که خیلی کاربردیه و کار راه اندازهاین دلایل باعث شد که تصمیم بگیریم برای سرور های خودمون توی ترجمیار از اوپن سوزه استفاده کنیم.(اگر هم برای نصب روی سیستم های دیگه کمک خواستید کامنت بزارید)این دستور ریپازیتوری داکر رو اضافه می‌کنه:sudo zypper ar -f http://download.opensuse.org/repositories/Virtualization/openSUSE_13.1/ Virtualizationنصب داکرsudo zypper in dockerاجرای سرویس داکرsystemctl start docker.servicesystemctl enable docker.serviceحالا اگر دستور docker info رو بزنیم مشخصات کلی از داکر در حال اجرا توی سیستممون بهمون میده.مطلب بعدی: راه اندازی اولین containerمجموعه این تحقیقات و ازمایش هایی که در ادامه مستند می‌کنم در شرکت پردازش هوشمند ترگمان مجری سامانه های ترجمه ماشینی ترگمان و ترجمیار انجام شده است.</description>
                <category>همایون</category>
                <author>همایون</author>
                <pubDate>Sun, 07 Jan 2018 16:42:59 +0330</pubDate>
            </item>
                    <item>
                <title>داکر چیست ؟ چه کاربردی دارد؟</title>
                <link>https://virgool.io/targoman/%D8%AF%D8%A7%DA%A9%D8%B1-%DA%86%DB%8C%D8%B3%D8%AA-%DA%86%D9%87-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF%DB%8C-%D8%AF%D8%A7%D8%B1%D8%AF-juwpv47rhyei</link>
                <description>هدف اصلی داکر ساخت یه محیط ایزوله برای اپلیکیشن هاییه که داریم تا بهترین بازده رو داشته باشن.حالا چطوری اینکارو میکنه؟ مجازی سازی یعنی یه فضا رو کامل جدا میکنه ( که بعدا بهش می‌گیم container) تا محیط ایزوله باشه.اولین چیزی که به ذهن خودم رسید این بود خب چه فرقی با vmware داره اونم کارش همینه که! دقیقا همینطوری و دقیقا نه - در واقع هر دوتاشون میتونن برای اینکار استفاده بشن اما اینکار رو از روش های مختلفی انجام میدن.وقتی از vmware استفاده می‌کنیم منابع سخت افزاری رو برای محیط های مختلف تقسیم می‌کنیم و در نهایت برایشون سیستم عامل نصب می‌کنیم. و اپلیکیشن رو توی اون سیستم عامل نصب می‌کنیم.داکر اما به جای اینکه از همون اول منابع سخت افزاری رو تقسیم کنه و سرور مجبور باشه چندین سیستم عامل رو همزمان اجرا کنه روی سیستم عامل نصب میشه ( مثلا اوپن سوزه) و حالا محیط های ایزوله روی خود داکر اجرا میشه که از طریق image های اماده درست می‌شه و درخواست هاشون رو به سیستم عامل میده و  سیستم عامل تحویل کرنل میده.خب این تفاوت چه مزیتی داره؟۱- بخاطر اینکه برای یه محیط ایزوله یه سیستم عامل جدا نصب نمیکنیم یعنی هدر رفت منابعمون خیلی کمتر میشه.۲ - تو حالت اول از همون اول منابع سخت افزاری تقسیم شده و اگه بار یه سرویس خیلی کم باشه نمیشه تواناییش رو به سرور های دیگ که درگیرن بده ولی توی داکر بخاطر اینکه تو سطح سیستم عامل هستیم اینکار خیلی راحت انجام میشه ( البته توانایی اینکه محدودیت استفاده از منابع هم میتونیم بزاریم)۳ - وقتی یه سرویس رو توی داکر راه اندازی میکنیم میتونیم  image ساخته شده رو ذخیره کنیم و روی هر سیستمی خیلی سریع راه اندازی کنیم.مطلب بعدی : نصب داکر بر روی اوپس سوزهتوی این‌ پست ها قصد داریم تا داکر رو قدم به قدم و با کمترین پیچیدگی آموزش بدیم داکر روی Linux windows و macos نصب می‌شه که من اینجا تصمیم دارم روی لینوکس و توزیع اوپن سوزه کار کنم.توی پست ها قراره یک تصویر درست از داکر به خواننده داده بشه و اموزش عمومی ترین کار های داکر قطعا کامل ترین نیست بخاطر اینکه هدف اینه ساده باشه ولی  ۷۰ درصد استفاده  از داکر رو شامل می‌شهمجموعه این تحقیقات و ازمایش هایی که در ادامه مستند می‌کنم در شرکت پردازش هوشمند ترگمان مجری سامانه های ترجمه ماشینی ترگمان و ترجمیار انجام شده است.</description>
                <category>همایون</category>
                <author>همایون</author>
                <pubDate>Sun, 07 Jan 2018 16:38:45 +0330</pubDate>
            </item>
            </channel>
</rss>