بعد از مدتها بالاخره با یک مطلب معمولی اما بسیار کاربردی برای تازه کارها برگشتیم. در پست قبلی با نام آشنایی با ویژگی Cgroup در کرنل لینوکس با مفاهیم Cgroup و namespace و در نهایت با container ها آشنا شدیم.
اکنون قصد داریم تا با یکی از بهترین برنامه ها مدیریت و کنترل containerها آشنا و آن را نصب کنیم.

داکر - Docker

داکر مجموعه ای محصولات ارائه زیرساخت به عنوان سرویس PaaS بوده که از مجازی سازی سطح سیستم عامل برای اجرای برنامه ها در قالب کانتینرها استفاده می کند. کانتینرها برای برنامه، کتابخانه ها و تنظیمات مخصوص آن، تهیه و دسته بندی و از یکدیگر جداسازی می شوند. آن ها از طریق کانال های تعریف شده و استاندارد می توانند با یکدیگر ارتباط داشته باشند. تمامی کانتینرها فقط با استفاده از یک کرنل مشترک سیستم عامل هاست، و منابع به مراتب کمتر از یک ماشین مجازی اجرا می شوند.

داکر دو حالت رایگان و شامل هزینه داشته. برنامه ای که کانتینرها را میزبانی کرده را Docker Engine می نامند.

نصب داکر

برای نصب داکر روی debian 10 حداقل پیشنیازها فقط داشتن سیستم دبیان۱۰ هست. سپس کافی است تا برنامه های زیر را نصب نمود:

$ sudo apt-get update

$ sudo apt-get install \
        apt-transport-https \
        ca-certificates \
        curl \
        gnupg-agent \
        software-properties-common

بعد لازم هست تا کلید gpg سورس لیست داکر را به سیستم اضافه کرد:

$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

و بعد باید آدرس سورس لیست نصب آن را به سورس لیست های سیستم عامل اضافه نمود:

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"

و درنهایت کافی هست تا برای نصب خود docker نیز از دستور زیر استفاده نمود:

$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

اطمینان از نصب

برای اطمنان از نصب صحیح داکر، می توان یک ایمیج مرسوم و معروف آن را اجرا کرد:

$ sudo docker run hello-world

اگر این ایمیج به درستی دانلود و اجرا شود یک سری اطلاعات را چاپ و خارج می شود. در این حالت یعنی Docker Engine به درستی نصب شده است.

امیدوارم که این مطلب مفید و کاربردی بوده باشد.

نصب docker-compose

در پایان یکی از ابزارهای مفی و به شدت کاربردی برای داکر با عنوان docker-compose را معرفی می کنیم. از این ابزار به نوعی می توان به جای docker run استفاده نمود به طوری که پارامترهای آن به صورت مستند و پایدار می ماند. از طرفی به عنوان یک orchestrator ساده نیز شناخته می شود. روش عملکرد آن به این صورت هست که یک فایل ساده با نام docker-compose.yml را در پوشه ای (ترجیحا بانام سرویس مورد نظر) ایجاد کرده و تمامی پارامترهای اجرایی یک یا چند کانتینر به هم مرتبط را داخل فایل قرارداده و در نهایت با اجرای docker-compose تمامی سرویس های آن اجرا خواهند شد.

نصب

sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

و در پایان برای اطمینان می توان دستور زیر را اجرا نمود:

$ docker-compose --version
docker-compose version 1.28.2, build 1110ad01

ایجاد فایل docker-compose

برای ایجاد یک سرویس با docker-compose مراحل زیر را اجرا می کنیم:

mkdir composetest
cd composetest

سپس یک فایل با نام docker-compose.yml ایجاد کرده و محتویات زیر را داخل قرار می دهیم:

version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

همانطور که مشاهده می کنید دو سرویس web و redis در این فایل ایجاد می شوند. در نهایت برای ایجاد و اجرا کافی هست تا فقط دستور زیر را اجرا کنید:

$ docker-compose up

Creating network "composetest_default" with the default driver
Creating composetest_web_1 ...
Creating composetest_redis_1 ...
Creating composetest_web_1
Creating composetest_redis_1 ... done
Attaching to composetest_web_1, composetest_redis_1
web_1    |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
redis_1  | 1:C 17 Aug 22:11:10.480 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1  | 1:C 17 Aug 22:11:10.480 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1  | 1:C 17 Aug 22:11:10.480 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
web_1    |  * Restarting with stat
redis_1  | 1:M 17 Aug 22:11:10.483 * Running mode=standalone, port=6379.
redis_1  | 1:M 17 Aug 22:11:10.483 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
web_1    |  * Debugger is active!
redis_1  | 1:M 17 Aug 22:11:10.483 # Server initialized
redis_1  | 1:M 17 Aug 22:11:10.483 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
web_1    |  * Debugger PIN: 330-787-903
redis_1  | 1:M 17 Aug 22:11:10.483 * Ready to accept connections

در پایان سرویس همانطور که در فایل تنظیم شده است از طریق آدرس http://MACHINE_VM_IP:5000 در دسترس می باشد.

منابع:

برچسب ها: docker container virtualization linux