آموزش استفاده از Ansible برای نصب و راهاندازی داکر در اوبونتو
در این مقاله میخوانید
- پیشنیازها
- Playbook دقیقاً چه کاری انجام میدهد؟
- گام اول: آمادهسازی Playbook
- گام دوم: افزودن تسک نصب پکیجها روی Playbook
- گام سوم: افزودن تسک نصب Docker به Playbook
- گام چهارم: اضافهکردن ایمیج داکر و تسک کانتینر به Playbook
- گام پنجم: مرور تنظیمات ایجادشده روی Playbook
- گام ششم: اجرای Playbook
- جمعبندی
- سؤالات متداول
اتوماسیون سرور یکی از فرایندهای مهمی است که نقشی اساسی در مدیریت سیستم ایفا میکند. یکی از ابزارهای متداول برای مدیریت پیکربندی Ansible است که بیشتر بهمنظور سادهسازی فرایند نصب خودکار سرور با استفاده از روشهای استاندارد برای سرورهای جدید و کاهش خطای انسانی در تنظیمات دستی این فرایند بهکارگیری میشود.
معماری Ansible ساده است و به نرمافزار خاص دیگری برای نصب روی Nodeها نیازی ندارد. همچنین، این ابزار مجموعهای از فیچرها و ماژولهای داخلی را فراهم میکند که نوشتن اسکریپتهای اتوماسیون با استفاده از آنها بسیار ساده خواهد شد.
در این مطلب از آموزش اوبونتو بلاگ پارس پک، قصد داریم تا درباره نحوه استفاده از Ansible برای خودکارکردن فرایند نصب Docker در Ubuntu 22.04 با شما صحبت کنیم و نحوه انجام این کار را گامبهگام به شما آموزش دهیم؛ پس تا پایان با این مطلب آموزشی همراه باشید.
خرید سرویس لینوکسی برای نصب Docker از پارس پک
شما میتوانید از این مقاله برای مدیریت سرور لینوکس خود استفاده کنید و اگر قصد خرید هر یک از سرویسهای لینوکس پارس پک را دارید، میتوانید با کارشناسان فروش ما در ارتباط باشید. همچنین، شما میتوانید برای اطلاع از تعرفهها و هزینهها به لینکهای زیر مراجعه کنید.
پیشنیازها
برای اینکه بتوانید مراحل این مطلب آموزشی را بهترتیب انجام دهید، به این پیشنیازها احتیاج دارید:
- یک Node کنترلی Ansible: ماشینی با توزیع Ubuntu 22.04 که Ansible روی آن نصب و برای اتصال به میزبان Ansible با استفاده از SSH پیکربندی شده است. مطمئن شوید که این Node کنترل کاربر معمولی با سطح دسترسی Sudo دارد و فایروال نیز روی آن فعال شده است.
- یک یا چند میزبان برای Ansible: روی این سرورها نیز باید توزیع Ubuntu 22.04 نصب شده باشد.
Playbook دقیقاً چه کاری انجام میدهد؟
پلیبوک Ansible جایگزینی برای نصب دستی Docker در Ubuntu 22.04 است. با اجرای این پلیبوک موارد زیر روی میزبان Ansible انجام خواهد شد:
- Aptitude نصب خواهد شد. Aptitude را Ansible بهعنوان جایگزینی برای پکیج منیجر apt توصیه کرده است.
- نصب پکیج منیجرهای موردنیاز
- نصب کلید Docker GPT APT
- اضافهشدن ریپوزیتوری رسمی Docker به منابع APT
- نصب Docker
- نصب ماژول Python Docker ازطریق PIP
- Pull گرفتن از ایمیج پیشفرض مشخصشده ازطریق default_container_image از Docker Hub
- ایجاد کانتینرهای تعریفشده بهواسطه متغیر container_count. هریک از این کانتینرها با استفاده از ایمیج تعریفشده ازطریق default_container_image و دستور تعریفشده بهواسطه default_container_command، در کانتینرهای مجزایی اجرا خواهند شد.
پس از اتمام اجرای پلیبوک، تعداد کانتینرها براساس گزینههایی ایجاد خواهد شد که در متغیرهای پیکربندی تعریف شده است. برای شروع کار، با استفاده از کاربر دارای دسترسی Sudo روی سرور، وارد Node کنترل Ansible شوید.
گام اول: آمادهسازی Playbook
در همین ابتدای کار، بهتر است بدانید که در این مطلب آموزشی هرگاه اصطلاح «تسک» بهکار برده میشود، منظور کوچکترین واحد عملی است که با استفاده از پلیبوک Ansible، میتوانید فرایند انجام آن را خودکار کنید. تمامی تسکها در فایل playbook.yml معرفی خواهد شد. برای شروع باید فایل playbook را با استفاده از ویرایشگر متن دلخواه باز کنید:
nano playbook.yml
با استفاده از این دستور، فایل YAML خالی باز میشود. قبل از اینکه بهسراغ اضافهکردن تسکهای جدید برویم، کدهای زیر را به این فایل اضافه کنید:
--- - hosts: all become: true vars: container_count: 4 default_container_name: docker default_container_image: ubuntu default_container_command: sleep 1
تقریباً تمامی Playbookهایی که با آنها روبهرو میشوید، با کدهایی شبیه به همین موارد آغاز میشوند. خط hosts اعلام میکند که Node کنترل Ansible کدام سرورها هدف این پلیبوک هستند. همچنین، خط become بیانگر این موضوع است که آیا همه دستورها با استفاده از امتیاز Root انجام میشوند یا خیر.
گزینههای قسمت Var به شما امکان خواهد داد تا بتوانید دادهها را در متغیرها ذخیره کنید. در جدول زیر، توضیحات مختصری درباره هریک از گزینههای قرارگرفته در این قسمت ارائه شده است:
فاکتور | شرح |
container_count | تعداد کانتینرهایی که باید ایجاد شوند |
default_container_name | نام کانتینر پیشفرض |
default_container_image | ایمیج پیشفرض Docker برای استفاده در هنگام ایجاد کانتینر |
default_container_command | دستور پیشفرض برای اجرا در کانتینر جدید |
گام دوم: افزودن تسک نصب پکیجها روی Playbook
Ansible تسکها را در Playbook بهصورت پیشفرض از بالا به پایین و همزمان اجرا خواهد کرد. بنابراین، باید توجه کنید که ترتیب قرارگیری تسکها مهم است و تسکهای با اولویت بیشتر، باید در خطهای بالاتری قرار گیرند. همچنین، میتوانید مطمئن باشید که هیچ تسک جدیدی شروع نمیشود؛ مگرآنکه تسک قبلی بهاتمام رسیده باشد.
نکته دیگری که باید مدنظر بگیرید، این است که تمامی تسکها مستقل هستند و در سایر Playbookها نیز میتوانند استفاده شوند. با استفاده از کدهای زیر، اولین تسک یعنی نصب Aptitude را اضافه کنید. Aptitude ابزاری است که از آن برای ارتباط با پکیج منیجر لینوکس و نصب سیستم پکیجهای موردنیاز استفاده میشود:
tasks: - name: Install aptitude apt: name: aptitude state: latest update_cache: true - name: Install required system packages apt: pkg: - apt-transport-https - ca-certificates - curl - software-properties-common - python3-pip - virtualenv - python3-setuptools state: latest update_cache: true
شما میتوانید پکیجها را بهدلخواه خود اضافه یا حذف کنید. بنابراین، میتوان مطمئن بود که تمامی پکیجهای موردنیاز نهتنها وجود دارند؛ بلکه با فراخوانی پکیج، بهروزرسانی آنها ازطریق APT انجام خواهد شد.
برای آشنایی با Playbook و نحوه ایجاد و پیکربندی آن در Ansible مقاله زیر را بخوانید.
گام سوم: افزودن تسک نصب Docker به Playbook
این تسک آخرین نسخه داکر را از ریپوزیتوری رسمی آن نصب خواهد کرد. در این فرایند، کلید Docker GPG برای تأیید دانلود و ریپوزیتوری رسمی بهعنوان منبع دانلود اضافه و بدینترتیب داکر نصب خواهد شد. علاوهبراین، ماژول Docker نیز برای Python نصب میشود:
- name: Add Docker GPG apt Key apt_key: url: https://download.docker.com/linux/ubuntu/gpg state: present - name: Add Docker Repository apt_repository: repo: deb https://download.docker.com/linux/ubuntu jammy stable state: present - name: Update apt and install docker-ce apt: name: docker-ce state: latest update_cache: true - name: Install Docker Module for Python pip: name: docker
گام چهارم: اضافهکردن ایمیج داکر و تسک کانتینر به Playbook
ایجاد کانتینرهای Docker در همین مرحله و با Pull گرفتن از ایمیجهای Docker شروع خواهد شد. این ایمیجها بهطورپیشفرض از Docker Hub رسمی گرفته میشوند. با استفاده از این ایمیجها، کانتینرها مطابق با مشخصات تعیینشده در متغیرهایی که در ابتدای این مطلب به آنها اشاره شد، در Playbook ایجاد خواهند شد. برای این منظور از کدهای زیر استفاده کنید:
- name: Pull default Docker image community.docker.docker_image: name: "{{ default_container_image }}" source: pull - name: Create default containers community.docker.docker_container: name: "{{ default_container_name }}{{ item }}" image: "{{ default_container_image }}" command: "{{ default_container_command }}" state: present with_sequence: count={{ container_count }}
گام پنجم: مرور تنظیمات ایجادشده روی Playbook
اگر تنظیمات عنوانشده تا این قسمت را بهدرستی انجام داده باشید، پلیبوک شما باید چیزی شبیه به این شده باشد:
--- - hosts: all become: true vars: container_count: 4 default_container_name: docker default_container_image: ubuntu default_container_command: sleep 1d tasks: - name: Install aptitude apt: name: aptitude state: latest update_cache: true - name: Install required system packages apt: pkg: - apt-transport-https - ca-certificates - curl - software-properties-common - python3-pip - virtualenv - python3-setuptools state: latest update_cache: true - name: Add Docker GPG apt Key apt_key: url: https://download.docker.com/linux/ubuntu/gpg state: present - name: Add Docker Repository apt_repository: repo: deb https://download.docker.com/linux/ubuntu jammy stable state: present - name: Update apt and install docker-ce apt: name: docker-ce state: latest update_cache: true - name: Install Docker Module for Python pip: name: docker - name: Pull default Docker image community.docker.docker_image: name: "{{ default_container_image }}" source: pull - name: Create default containers community.docker.docker_container: name: "{{ default_container_name }}{{ item }}" image: "{{ default_container_image }}" command: "{{ default_container_command }}" state: present with_sequence: count={{ container_count }}
ناگفته نماند این پلیبوک را بهراحتی میتوانید بهگونهای تغییر دهید تا دقیقاً براساس نیازهای شما تنظیم شده باشد. برای مثال، میتوانید از ماژول docker_image برای Push کردن ایمیجها به Docker Hub یا از ماژول docker_containter برای راهاندازی شبکههای کانتینری استفاده کنید.
هنگامیکه تغییرات مدنظر را روی Playbook خود اِعمال کردید، آن را ذخیره کنید و از ویرایشگر متن خارج شوید.
گام ششم: اجرای Playbook
حالا همهچیز آماده است تا Playbook خود را روی سرورهای مدنظر اجرا کنید. گفتنی است تقریباً تمامی Playbookها بهطورپیشفرض بهگونهای پیکربندی میشوند که روی هر سرور موجود در فهرست شما اجراشدنی باشند. بااینحال در این نمونه خاص، ما خودمان سرور را مشخص خواهیم کرد.
برای اجرای Playbook روی سروری با نام فرضی server1 که اتصال آن بهصورت Sammy است، از دستور زیر استفاده کنید:
ansible-playbook playbook.yml -l server1 -u sammy
در این دستور، فلگ -l سرور شما و فلگ -u کاربر واردشده به سرور را مشخص خواهد کرد. نتیجه این دستور مشابه نمونه زیر است:
Output . . . changed: [server1] TASK [Create default containers] ***************************************************************************************************************** changed: [server1] => (item=1) changed: [server1] => (item=2) changed: [server1] => (item=3) changed: [server1] => (item=4) PLAY RECAP *************************************************************************************************************************************** server1 : ok=9 changed=8 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
این خروجی نشان میدهد که راهاندازی سرور کامل شده است؛ البته خروجی شما ممکن است دقیقاً مشابه این نمونه نباشد؛ باوجوداین، عدد درجشده روبهروی فاکتور failed باید صفر باشد.
بعد از اینکه اجرای سرور با موفقیت انجام شد، ازطریق Ansible با استفاده از SSH وارد شوید و بررسی کنید که آیا کانتینرها با موفقیت ایجاد شدهاند یا خیر. برای این منظور از دستور زیر استفاده کنید:
ssh sammy@your_remote_server_ip
برای فهرستکردن کانتینرهای Docker نیز، از دستور زیر استفاده کنید:
sudo docker ps -a
خروجی شما باید مشابه نمونه زیر باشد:
Output CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a3fe9bfb89cf ubuntu "sleep 1d" 5 minutes ago Created docker4 8799c16cde1e ubuntu "sleep 1d" 5 minutes ago Created docker3 ad0c2123b183 ubuntu "sleep 1d" 5 minutes ago Created docker2 b9350916ffd8 ubuntu "sleep 1d" 5 minutes ago Created docker1
این خروجی بهمعنی آن است که کانتینرهای تعریفشده در Playbook با موفقیت ایجاد شدهاند. باتوجهبه اینکه این کار آخرین مرحله از تعریف Playbook بود، نتیجه گرفته میشود که Playbook بهطورکامل روی سرورهای مدنظر ایجاد شده است.
برای آشنایی با نحوه کار و نصب و راهاندازی Ansible مقاله زیر را بخوانید.
جمعبندی
تنظیم خودکار زیرساخت نهتنها باعث میشود که در وقت خود صرفهجویی کنید؛ بلکه به شما کمک میکند تا از پیکربندی استاندارد سرورهای خود نیز مطمئن شوید. این استانداردسازی پیکربندی سرورها حتی میتواند براساس نیازهای شما انجام شود و این همان کاری است که Ansible بهطور کاملاً حرفهای برایتان انجام خواهد داد.
در این مطلب از آموزش لینوکس بلاگ پارس پک، نحوه استفاده از Ansible برای خودکارسازی فرایند نصب و راهاندازی داکر روی سرور با توزیع اوبونتو 22.04 را آموزش دادیم. درصورت داشتن سؤال یا ابهام درباره این موضوع، آن را ازطریق کامنت با ما در میان بگذارید.
سؤالات متداول
۱. Ansible چیست؟
Ansible به مجموعهای از ابزارهای نرمافزاری گفته میشود که در فعالسازی زیرساخت بهعنوان کد تخصص دارد. Ansible منبعباز و استفاده از آن نیز کاملاً رایگان است.
۲. Playbook چیست؟
پلیبوک (Playbook) به فایلی گفته میشود که میتوانیم مراحل مختلفی که برای اجرا در نظر داریم، در آن تعریف و هدف هر فرایند را بررسی و در پایان آن را تنظیم کنیم. بنابراین، پلیبوک به ما کمک میکند تا بتوانیم کاری تکراری را بهصورت مداوم و در قالبی منظم انجام دهیم.
۳. آیا استفاده از Ansible برای نصب داکر به نرمافزارها یا ابزارهای کمکی نیاز دارد؟
خیر، معماری Ansible بهگونهای است که برای استفاده از آن به هیچ ابزار یا نرمافزار جانبی دیگری نیاز نخواهید داشت.