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

فرایند اتوماسیون سرور یکی از عناصر کلیدی در حوزه مدیریت زیرساختهای فناوری اطلاعات بهشمار میرود. از مزایای این کار میتوان به تسریع در راهاندازی و پیکربندی سرورها اشاره کرد. برای این کار کاربران میتوانند از ابزار Ansible استفاده کنند.
این ابزار با معماری ساده و بدون نیاز به نصب عامل، امکان پیادهسازی رویههای استاندارد در مدیریت سیستم را فراهم میآورد. در این مطلب قرار است بیاموزید که چگونه میتوان برای نصب و راهاندازی داکر در اوبونتو از ابزار Ansible استفاده کرد، پس با ما همراه باشید.
نحوه عملکرد Playbook
اولین سوالی که باید به آن جواب دهیم این است که پلیبوک Anisbe چه کاری میتواند برای ما انجام دهد؟ پلیبوک Ansible جایگزینی کامل برای نصب دستی Docker در Ubuntu 22.04 به شمار میرود. با اجرای این پلیبوک، میتوانید ابزار Aptitude که بهعنوان جایگزینی برای apt توسط Ansible توصیه شده است را نصب کنید.
همچنین پکیج منیجرهای موردنیاز شما و کلید GPG APT مربوط به Docker نیز با بکارگیری این پلیبوک به منابع سیستم شما اضافه میشود. از دیگر کارکردهای این پلیبوک میتوان به موارد زیر نیز اشاره کرد:
• اضافهشدن ریپوزیتوری رسمی Docker به منابع APT
• نصب Docker
• نصب ماژول Python Docker از طریق PIP
• Pull گرفتن از ایمیج پیشفرض مشخصشده از طریق default_container_image از Docker Hub
نحوه استفاده از Ansible برای نصب و راهاندازی داکر در اوبونتو
برای بهرهگیری از Ansible برای نصب داکر در اوبونتو نیاز است مراحلی نظیر آمادهسازی Playbook، افزودن تسک نصب پکیجها روی Playbook، افزودن تسک نصب Docker به Playbook، اضافه کردن ایمیج داکر و تسک کانتینر به Playbook، مرور تنظیمات ایجادشده روی Playbook و در نهایت اجرای Playbook را به ترتیب انجام دهید.

مرحله اول: آمادهسازی Playbook
در اولین گام برای آمادهسازی Playbook کافیست فایل کانفیگ آن را در در ویرایشگر دلخواه خود باز کنید.
Sudo nano playbook.yml
سپس کدهای زیر را به فایل خالی اضافه کنید:
hosts: all
become: true
vars:
container_count: 4
default_container_name: docker
default_container_image: ubuntu
default_container_command: sleep 1
در این دستورات خط hosts نشان میدهد که Node کنترل Ansible کدام سرورها هدف این پلیبوک هستند. علاوهبراین خط become نیز نشاندهنده این است که همه دستورها با استفاده از امتیاز Root انجام میشوند.
مرحله دوم: افزودن تسک نصب پکیج ها روی Playbook
در Ansible، تسکها بهصورت پیشفرض و به آن ترتیبی که در Playbook هستند اجرا میشوند. به همین دلیل، ترتیب قرارگیری تسکها اهمیت بالایی دارد. نکته مهم دیگر این است که تنها با اجرای کامل یک تسک، تسک بعدی آغاز میشود بنابراین، ترتیب اجرا تضمین شده است. با استفاده از کدهای زیر، اولین تسک یعنی نصب 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
درواقع Aptitude یک ابزار پیشرفته برای مدیریت بستههای نرمافزاری در سیستمعاملهای لینوکسی است. این ابزار امکان تعامل موثر با پکیج منیجر APT را برای کاربران فراهم میکند.

مرحله سوم: افزودن تسک نصب Docker به Playbook
طراحی این تسک به گونهای است که آخرین نسخه Docker را از مخزن رسمی آن برای شما نصب کند. در جریان این فرایند، ابتدا کلید GPG مربوط به Docker برای اطمینان از صحت دانلود اضافه میشود. در گام بعدی ریپوزیتوری رسمی Docker به فهرست منابع APT سیستم افزوده خواهد شد. پس از آن، عملیات نصب Docker آغاز میشود. علاوهبراین، ماژول Python مربوط به 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 شروع کنید. این ایمیجها بهصورت پیشفرض مشخص شدهاند و پس از دریافت، کانتینرها مطابق با تنظیماتی که از طریق متغیرهای پیکربندی در ابتدای پلیبوک تعریف شدهاند، ایجاد خواهند شد. برای انجام این عملیات کافیست دستورات زیر را وارد کنید.
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 }}
در این مرحله میتوانید تنظیمات موردنظر خود را روی پلیبوک خود اعمال کنید و شخصیسازیهای لازم را انجام دهید.
مرحله ششم: اجرای Playbook
زمان اجرای Playbook روی سرور فرا رسیده است. نام فرضی test که اتصال آن بهصورت Sammy است را در نظر بگیرید و دستورات زیر را وارد کنید.
ansible-playbook playbook.yml -l test-u sammy
در این دستور دو فلگ وجود دارد. فلگ -l نشاندهنده سرور شما و فلگ -u کاربر واردشده به سرور را نشان میدهد. در نتیجه دستور زیر یک نمونه کامل است:
Output
. . .
changed: [test]TASK [Create default containers] *
changed: [test] => (item=1)
changed: [test] => (item=2)
changed: [test] => (item=3)
changed: [test] => (item=4)
PLAY RECAP *
test : 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
در صورتی که خروجی شما همانند نمونه زیر باشد، کانتینرهای تعریفشده در Playbook با موفقیت ایجاد شدهاند. در نتیجه پلیبوک نیز روی سرور موردنظر شما راهاندازی شده است:
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a3fe9bfb89cf ubuntu “sleep 1d” 5 minutes ago Created docker4
۸۷۹۹c16cde1e 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
جمع بندی
مقیاسپذیری، انعطافپذیری و اتوماسیون سرعت بینظیری را به دنیای اطلاعات بخشیده است. شما با به کارگیری ابزارهایی مانند Ansible میتوانید در بهینهسازی فرایندهای DevOps و مدیریت سیستمها درخشان عمل کنید. در این آموزش، گامبهگام نحوه استفاده از Ansible برای نصب و راهاندازی Docker در سیستمعامل Ubuntu 22.04 را بررسی کردیم. همانطور که مشاهده کردید با بهرهگیری از Ansible و ساخت یک Playbook ساده، فرایند نصب Docker به صورت خودکار، قابل تکرار و بدون خطای انسانی پیادهسازی میشود. در پایان شما میتوانید سوالات و نظرات خود را با کارشناسان ما در میان بگذارید.
سؤالات متداول
- آیا اجرای پلیبوک Ansible نیازی به نصب نرمافزار خاص روی سرور دارد؟
خیر؛ یکی از مزایای اصلی Ansible معماری Agentless آن است؛ به این معنا که تنها کافی است روی سرور کنترل (Control Node) Ansible نصب باشد. - آیا پلیبوک Ansible فقط روی Ubuntu 22.04 قابل اجراست؟
اگرچه پلیبوک ارائهشده برای Ubuntu 22.04 بهینهسازی شده است؛ اما با اندکی تغییر در پیکربندی میتوانید از آن را برای نسخههای دیگر اوبونتو نیز استفاده کنید. - در صورت تغییر تعداد کانتینرها یا تنظیمات ایمیج، آیا باید پلیبوک Ansible را دوباره اجرا کنیم؟
خیر؛ انعطافپذیری بالا در این پلیبوک این امکان را برای کاربران فراهم کرده است که بتوانند تنها بخشهایی از پلیبوک را که مربوط به ایجاد یا مدیریت کانتینرها است، اجرا کنند و یا از متغیرهای قابل تنظیم استفاده کنند.