آموزش استفاده از Ansible برای نصب و راه‌اندازی داکر در اوبونتو

استفاده از Ansible برای نصب و راه‌ اندازی Docker در اوبونتو
Avatar
نویسنده: تیم نویسندگان بلاگ پارس پک
سه‌شنبه 15 فروردین 1402
مطالعه: ۱۰ دقیقه ۰ نظر ۱۲۳۳ بازدید

اتوماسیون سرور یکی از فرایندهای مهمی است که نقشی اساسی در مدیریت سیستم ایفا می‌کند. یکی از ابزارهای متداول برای مدیریت پیکربندی 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 چیست؟
Playbookهای 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 مقاله زیر را بخوانید.

Playbook چیست؟

گام سوم: افزودن تسک نصب 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 خود اِعمال کردید، آن را ذخیره کنید و از ویرایشگر متن خارج شوید.

کاربرد Ansible چیست؟
مرور تنظیمات پلی بوک انسیبل 

گام ششم: اجرای 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 به‌طور کاملاً حرفه‌ای برایتان انجام خواهد داد.

در این مطلب از آموزش لینوکس بلاگ پارس پک، نحوه استفاده از Ansible برای خودکارسازی فرایند نصب و راه‌اندازی داکر روی سرور با توزیع اوبونتو 22.04 را آموزش دادیم. درصورت داشتن سؤال یا ابهام درباره این موضوع، آن را ازطریق کامنت با ما در میان بگذارید.

سؤالات متداول

۱. Ansible چیست؟

Ansible به مجموعه‌ای از ابزارهای نرم‌افزاری گفته می‌شود که در فعال‌سازی زیرساخت به‌عنوان کد تخصص دارد. Ansible منبع‌باز و استفاده از آن نیز کاملاً رایگان است.

۲. Playbook چیست؟

پلی‌بوک (Playbook) به فایلی گفته می‌شود که می‌توانیم مراحل مختلفی که برای اجرا در نظر داریم، در آن تعریف و هدف هر فرایند را بررسی و در پایان آن را تنظیم کنیم. بنابراین، پلی‌بوک به ما کمک می‌کند تا بتوانیم کاری تکراری را به‌صورت مداوم و در قالبی منظم انجام دهیم.

۳. آیا استفاده از Ansible برای نصب داکر به نرم‌افزارها یا ابزارهای کمکی نیاز دارد؟

خیر، معماری Ansible به‌گونه‌ای است که برای استفاده از آن به هیچ ابزار یا نرم‌افزار جانبی دیگری نیاز نخواهید داشت.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


ارسال دیدگاه در وبلاگ پارس‌پک را مطالعه کرده و آن‌ها را می‌پذیرم.