|
|
(۵ ویرایش میانی توسط ۲ کاربر نشان داده نشدهاست) |
سطر ۲۵: |
سطر ۲۵: |
| '''داکر Image:''' | | '''داکر Image:''' |
| | | |
− | [[پرونده:D5.png|center]] | + | [[پرونده:D5.png]] |
| | | |
| در داکر Imageها را پس از دریافت اجرا میکنیم. همانطور که در بالا میبینید یک Base Image مانند Debian روی این داکر نصب شده است و روی آن Imageهای دیگر را نصب کرده ایم. | | در داکر Imageها را پس از دریافت اجرا میکنیم. همانطور که در بالا میبینید یک Base Image مانند Debian روی این داکر نصب شده است و روی آن Imageهای دیگر را نصب کرده ایم. |
سطر ۱۳۹: |
سطر ۱۳۹: |
| در این فایل کد زیر را وارد کنید | | در این فایل کد زیر را وارد کنید |
| | | |
− | <div dir=ltr lang=en>
| + | [[پرونده:D1.png]] |
− | | + | |
− | version: '2'
| + | |
− | services:
| + | |
− | #================= IBSng Core =================
| + | |
− | Core:
| + | |
− | image: "5.202.129.64:5000/debian:IBSng"
| + | |
− | container_name: IBSngServer
| + | |
− | hostname: IBSngServer
| + | |
− | ports:
| + | |
− | - 8080:8080
| + | |
− | - 6379:6379
| + | |
− | - 8000:8000
| + | |
− | - 1812:1812/udp
| + | |
− | - 1813:1813/udp
| + | |
− | - 1235:1235
| + | |
− | - 1237:1237
| + | |
− | - 8001:8001
| + | |
− | - 80:80
| + | |
− | - 1700:1700/udp
| + | |
− | - 5432:5432
| + | |
− | - 27017:27017
| + | |
− | volumes:
| + | |
− | - /dev/mem:/dev/mem
| + | |
− | - etc:/etc/
| + | |
− | - var:/var/
| + | |
− | - usr:/usr/
| + | |
− | stdin_open: true
| + | |
− | tty: true
| + | |
− | privileged: true
| + | |
− | restart: always
| + | |
− | command: sed -i "5i listen_addresses = '*'" /etc/postgresql/9.4/main/postgresql.conf
| + | |
− | command: /etc/init.d/cron restart
| + | |
− | command: /etc/init.d/redis-server restart
| + | |
− | command: /etc/init.d/postgresql restart
| + | |
− | command: /etc/init.d/apache2 restart
| + | |
− | command: /etc/init.d/rsyslog restart
| + | |
− | command: /etc/init.d/ssh restart
| + | |
− | command: /etc/init.d/IBSng restart
| + | |
− | command: /bin/bash
| + | |
− | networks:
| + | |
− | IBSng_network:
| + | |
− | ipv4_address: 192.168.50.10
| + | |
− | #================= Network Configuration =================
| + | |
− | networks:
| + | |
− | IBSng_network:
| + | |
− | driver: bridge
| + | |
− | ipam:
| + | |
− | driver: default
| + | |
− | config:
| + | |
− | - subnet: 192.168.50.0/24
| + | |
− | gateway: 192.168.50.1
| + | |
− | volumes:
| + | |
− | etc:
| + | |
− | var:
| + | |
− | usr:
| + | |
− | | + | |
− | </div>
| + | |
− | | + | |
− | [[پرونده:D1.png|center]] | + | |
| | | |
− | [[پرونده:D2.png|center]] | + | [[پرونده:D2.png]] |
| | | |
| | | |
سطر ۲۳۳: |
سطر ۱۷۴: |
| | | |
| حال کافی است لایسنس را به روش عادی به روز نماییم. | | حال کافی است لایسنس را به روش عادی به روز نماییم. |
− |
| |
− |
| |
− | '''دستورات مفید برای مدیریت docker-compose'''
| |
− |
| |
− | برای خاموش کردن سرورها.
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− |
| |
− | ''' docker-compose stop '''
| |
− |
| |
− | </div>
| |
− |
| |
− |
| |
− | برای روشن کردن سرورها.
| |
− |
| |
− |
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− |
| |
− | ''' docker-compose start '''
| |
− |
| |
− | </div>
| |
− |
| |
− | برای اجرای سرورها (معادل run در docker)
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− |
| |
− | ''' docker-compose up -d '''
| |
− |
| |
− | </div>
| |
− |
| |
− | برای اجرای حذف سرورها (معادل rm در docker).
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− |
| |
− | ''' docker-compose down '''
| |
− |
| |
− | </div>
| |
− |
| |
− |
| |
− | برای مشاهده سرورهای موجود
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− |
| |
− | ''' docker-compose ps '''
| |
− |
| |
− | </div>
| |
− |
| |
− |
| |
− | برای مشاهده میزان بارسرورها
| |
− |
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− |
| |
− | ''' ddocker-compose top '''
| |
− |
| |
− | </div>
| |
− |
| |
− | برای انجام عملیات فوق بر روی یک سرور خاص از دستور زیر استفاده میکنیم
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− |
| |
− | ''' docker-compose start core '''
| |
− |
| |
− | </div>
| |
− |
| |
− |
| |
− | برای اتصال به docker از دستور زیر استفاده مینماییم
| |
− |
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− |
| |
− | ''' (docker attach (docker name '''
| |
− |
| |
− | </div>
| |
− |
| |
− |
| |
− |
| |
− | این دستور باعث میشود شما به شل docker متصل شود.
| |
− |
| |
− | برای نمایش لیست کانتینر های اجرای موجود از دستور زیر استفاده میکند
| |
− |
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− |
| |
− | ''' Docker ps '''
| |
− |
| |
− | </div>
| |
− |
| |
− | برای نمایش تمام کانتینر ها از دستور زیراستفاده میشود.
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− |
| |
− | ''' Docker ps -a '''
| |
− |
| |
− | </div>
| |
− |
| |
− | نکته مهم:
| |
− |
| |
− | برای خروج از سرور attach شده از کلید ctl + p + q استفاده نمایید. در صورت استفاده از کلید ctl+d با دستور exit ممکن است سرور stop شود. (در صورتی که کانتینر را با -d اجرا کرده باشید, stop نمیشود).
| |
− |
| |
− |
| |
− | '''نحوه راه اندازی سرور registry hub'''
| |
− |
| |
− | برای راه اندازی سرور ریجستری لوکال لازم است دستور زیر را وارد نماییم
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− | '''docker run -d -p 5000:5000 --restart=always --name registry registry:2 '''
| |
− | </div>
| |
− |
| |
− | در این صورت سرور registry اجرا شده است.
| |
− | برای استفاده از این سرور لازم است ایمیج مورد نظر تگ زده شود.
| |
− | <div dir=ltr lang=en>
| |
− | '''docker tag debian:ibs 5.202.129.64:5000/debian:IBSng '''
| |
− | </div>
| |
− |
| |
− | دستور بالا image به نام debian:ibs را به صورت زیر تگ میزند
| |
− | <div dir=ltr lang=en>
| |
− | '''5.202.129.64:5000/debian:IBSng '''
| |
− | </div>
| |
− |
| |
− | حال در هر جایی که از این image استفاده شود, ایمیج مورد نظر دانلود میشود.برای مثال:
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− | '''docker run 5.202.129.64:5000/debian:IBSng'''
| |
− | </div>
| |
− |
| |
− | :*'''تنظیمات سمت سرور''' :
| |
− | برای راه اندازی docker registry ابتدا سرور debian و docker را بر روی سرور نصب می نماییم سپس برای اجرای برنامه ریجستری دستور زیر را اجرا میکنیم
| |
− | برای راه اندازی docker registry ابتدا سرور debian و docker را بر روی سرور نصب می نماییم سپس برای اجرای برنامه ریجستری دستور زیر را اجرا میکنیم
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− | '''docker run -d -p 5000:5000 --restart=always --name registry registry:2 '''
| |
− | </div>
| |
− |
| |
− | دستور بالا image به نام registry:2 را دانلود و اجرا کرده. این ایمیج برای راه اندازی docker repository (docker reistry) استفاده میشود.
| |
− |
| |
− | توجه نمایید که پورت ۵۰۰۰ در هاست باز است.
| |
− |
| |
− |
| |
− |
| |
− | :*'''تگ گذاری ایمیج های ''' :
| |
− | برای بارگذاری ایمیج های docker بر روی registry hub لازم است ابتدا باید ایمیج مورد نظر را تگ بزنیم. برای این کار از دستور زیر استفاده میکنیم:
| |
− | <div dir=ltr lang=en>
| |
− | '''docker tag debian:ibs 5.202.129.64:5000/debian:IBSng '''
| |
− | </div>
| |
− | این دستور به ایمیج به نام debian:ibs تگ به صورت 5.202.129.64:5000/debian:IBSng اختصاص میدهد. قسمت اول این تگ نشانی اینترنتی (IP) سرور است و قسمت دوم نشانی ایمیج اصلی تگ مورد است (debian). در نهایت IBSng که نشان دهنده نام ایمیج است, نشان داده شده است.
| |
− |
| |
− | :*'''تنظیمات سمت کلاینت ''' :
| |
− | برای استفاده از ایمیج موجود در روی سرور لازم است به سادگی ایمیج موجود را با دستور زیر pull نمایید.
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− | '''docker pull 5.202.129.64:5000/debian:IBSng '''
| |
− | </div>
| |
− |
| |
− | در صورتی که سرور را بدون certificate کانفیگ کرده باشید, لازم است کانفیگ زیر را در فایل vim /etc/docker/daemon.json وارد نماییم
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− |
| |
− | {
| |
− | "insecure-registries": ["5.202.129.64:5000"]
| |
− | }
| |
− |
| |
− | </div>
| |
− |
| |
− | و سپس سرویس docker را ریست نمایید
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− |
| |
− | '''service docker restart '''
| |
− |
| |
− | </div>
| |
− |
| |
− | این مورد باعث میشود که کلاینت شما بتواند به سرور docker registry بدون https متصل شود.
| |
− |
| |
− |
| |
− |
| |
− | == Docker troubleshooting ==
| |
− |
| |
− | :*'''عیب یابی شبکه''' :
| |
− |
| |
− | از آنجا که داکر از iptable برای اتصال به شبکه استفاده میکند. مهمترین دستور در عیب یابی شبکه چک کردن IP tables است.
| |
− | دستور زیر برای چک کردن IPtables استفاده میشود.
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− |
| |
− | ''' iptables -t nat -nvL '''
| |
− |
| |
− | </div>
| |
− |
| |
− | خروجی زیر مشاهده میشود
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− | '''0 0 DNAT udp -- !br-600b9c816e99 * 0.0.0.0/0 0.0.0.0/0 udp dpt:1812 to:192.168.50.11:1812 '''
| |
− | </div>
| |
− |
| |
− | این نمونه از خروجی نشان میدهد که پروتکل udp از همه سورسها با پرت 1812 برای مقصد 192.168.50.11:1812 باز شده است.
| |
− |
| |
− | خطایابی: در صورتی که پورت خاصی لازم دارید باید پرت باز باشد. در صورتی که لازم دارید پرت خاصی برای داکر باز نمایید. باید رول مورد نظر را در iptable وارد نمایید.
| |
− | برای مثال اینجا پرت ۹۵۹۵ را برای دسترسی به یک کانتینر باز مینماییم.
| |
− | از دستور زیر استفاده نمایید.
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− | '''iptables -t nat -A POSTROUTING -s 192.168.20.10/32 -d 192.168.20.10/32 -p tcp -m tcp --dport 9595 -j MASQUERADE '''
| |
− | </div>
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− | '''iptables -t nat -A DOCKER ! -i br-600b9c816e99 -p udp -m udp --dport 9595 -j DNAT --to-destination 192.168.50.11:9595 '''
| |
− | </div>
| |
− |
| |
− | برای ساده شدن کار میتواند ابتدا دستور زیر را وارد نمایید و سپس خروجی را ویرایش کرده و port خود را وارد نمایید.
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− | '''iptables -t nat -S '''
| |
− | </div>
| |
− |
| |
− | خروجی به صورت زیر است:
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− | '''-A POSTROUTING -s 192.168.50.11/32 -d 192.168.50.11/32 -p tcp -m tcp --dport 8080 -j MASQUERADE '''
| |
− | </div>
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− | '''-A DOCKER ! -i br-600b9c816e99 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.50.11:8080 '''
| |
− | </div>
| |
− |
| |
− | حال کافی است پورت ها را به پورت دلخواه وارد کرده و در ابتدای عبارت زیر را وارد کرده
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− | '''“iptables -t nat” '''
| |
− | </div>
| |
− |
| |
− | مثلا برای تبدیل پورت 9595 به 22 به دو دستور زیر را اجرا میکنیم
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− | '''iptables -t nat -A DOCKER ! -i br-b10d536b1f47 -p tcp -m tcp --dport 9595 -j DNAT --to-destination 192.168.50.11:22 '''
| |
− | </div>
| |
− | <div dir=ltr lang=en>
| |
− | '''iptables -t nat -A DOCKER ! -i br-b10d536b1f47 -p tcp -m tcp --dport 9595 -j DNAT --to-destination 192.168.50.11:22 '''
| |
− | </div>
| |
− |
| |
− | :*'''عیب یابی containers''' :
| |
− |
| |
− | برای مشاهده status از دستور زیر استفاده میکنیم
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− | '''docker-compose ps '''
| |
− | </div>
| |
− |
| |
− | پس از اجرای دستور زیر انتظار میرود که موارد شمابه زیر نمایش داده شود:
| |
− |
| |
− | [[پرونده:D3.png|center]]
| |
− |
| |
− |
| |
− | دستور نمایش میدهد که هر دو سرور به درستی up شده است و تمامی پرت ها به سمت کانتینر ها باز است.
| |
− | در صورتی که یکی از سرورها down یا stop است با دستور زیر میتوان آن را UP کرد
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− | '''docker-compose start <server name> '''
| |
− | </div>
| |
− |
| |
− | که در آن <server name> نام سروری است که قرار است up شود.
| |
− |
| |
− |
| |
− | :*'''مشاهده docker log''' :
| |
− |
| |
− | برای مشاهده log هر داکر از دستور زیر استفاده میشود.
| |
− |
| |
− | <div dir=ltr lang=en>
| |
− | '''<docker logs <dockername '''
| |
− | </div>
| |
− |
| |
− | همچنین درصورت استفاده از docker compose لازم است دستور زیر را وارد نمایید
| |
− | <div dir=ltr lang=en>
| |
− | '''docker-compose logs '''
| |
− | </div>
| |
[ویرایش] Difference between Docker and VM
، Docker هیچ سیستم عامل جدیدی ایجاد نمی کند بلکه این امکان را به بسته نرم افزاری ایجاد شده می دهد که از Kernel اصلی سیستم عامل لینوکسی که بر روی آن نصب شده است استفاده کند و در زمان انتقال نیز فقط Package نرم افزاری منتقل می شود نه ماشین مجازی ، در واقع Docker Engine یا موتور اصلی Docker جایگزین نرم افزار Hypervisor ما می شود و اینکار یعنی کارایی سیستم ما به شدت افزایش می یابد زیرا یک لایه واسط به نام Hypervisor حذف شده و نرم افزار بصورت مستقیم با هسته اصلی سیستم عامل کار میکند با این تفاوت که کاملا ایزوله شده است.
در تصویر بالا هم در داکر و هم در ماشین مجازی دو عنصور Server، Host Os مشترک است.
در مرحله بعدی در ماشین مجازی یک مجازی ساز مانند Vmware، VirtualBox و در داکر نرم افزار Docker را نصب داریم. تفاوتها از اینجا شروع میشود که در ماشین مجازی باید یک سیستم عامل کامل را نصب و نرم افزارها را روی آن نصب کرد. ولی داکر این مرحله را ساده کرده است و یک نسخه کوچک از سیستم عامل را در خود دارد که بدون نیاز به نصب سیستم عاملهای سنگین و پیچیده میتوان نرم افزارها را روی آن نصب و تست کرد.
هرچند میتوان نسخه کوچکی از نسخههای مختلف سیستم عامل را نیز نصب کرد ولی باز هم بسیار راحت تر از سیستم ماشینهای مجازی است. از مزایای استفاده از داکر نسبت به مجازی ساز میتوان به موارد زیر اشاره کرد:
ایجاد و حذف بسیار سریع Container ها
ریستارت و خاموش کردن بسیار سریعنحوه راه اندازی سرور registry hub
انتقال پذیری راحت و سبک
مدیریت منابع و ریسورسها به صورت قدرتمند و متغیر
و …
داکر Image:
در داکر Imageها را پس از دریافت اجرا میکنیم. همانطور که در بالا میبینید یک Base Image مانند Debian روی این داکر نصب شده است و روی آن Imageهای دیگر را نصب کرده ایم.
Imageها پس از پایان به حالت اولیه خود باز میگردند چون همانطور از نام آنها مشخص است تنها یک تصویری از پکیج اصلی هستند. برای حذف تغییرات Image میتوان حالت آنها را با دستورات خاصی ذخیره کرد.
Docker Hub چیست؟
یک سرویس اشتراک گذاری تهیه شده توسط شرکت Docker است که شامل مخزنی از imageهای آماده برای Docker است. این مخزن حاوی دهها هزار برنامه و سیستم عامل است که میتوان به آن imageهایی را هم اضافه کرد. توجه کنید که شرکت پارس پویش دارای hub مخصوص به خود است.
Docker Container:
در واقع میتوان گفت Container ظرفی است که Imageها را در آن اجرا میکنند. Containerها از روی Imageها ایجاد میشوند و به وظایف خود عمل میکنند. مثلا فرض کنید از یک Centos چند Container میسازیم و در هر کدام تغییرات متفاوتی اعمال میکنیم.
debian Installation
برای نصب لازم است دو هارد جداگانه در نظر گرفته شود. در هارد اول میتوانید debian را نصب کرده و هارد دوم را به دایرکتوری زیر mount کنید. از شکل زیر پیروی کنید.
پس از پارتیشن بندی به روش فوق, docker را نصب نمایید.
[ویرایش] Docker Installation
برای نصب لازم است ابتدا package های مورد نیاز را نصب کنیم. برای این کار دستور زیر را وارد میکنیم:
حال کلید رسمی منتشر شده از سایت docker را اضافه میکنیم.
حال repository مورد نیاز برای نصب docker را اضافه مینماییم.
استفاده از docker-compose برای اجرای docker ibs
در فولدر home یوزر خود فولدری به نام dockerCompose ایجاد نمایید. و فایلی به نام docker-compose.yml در آن ایجاد نمایید
در این فایل کد زیر را وارد کنید
این دستور باید containerهای تعریف شده را اجرا بنماید.
و مشاهده خواهید کرد که سرور با همه پرتها اجرا شده است.
حال کافی است لایسنس را به روش عادی به روز نماییم.