در این مقاله قرار است مفهوم docker و container را بررسی کنیم و روش نصب آن را بیاموزم.
docker (داکر) چیست؟
داکر برنامه ایی ست که روند مدیریت پروسه یا پردازش را در کانتینرها container یا محفظه ها را ساده تر میکند. کانتینرها به شما این امکان را میدهند که برنامه هایتان را در پردازش های جدا از منبع و ایزوله شده، اجرا کنید. داکر ها شبیه ماشین های مجازی هستند اما کانتینرها قابل حمل تر و سازگاری بیشتری با منابع دارند، وهمچنین وابسته به سیستم عامل میزبان هستند.
فرایند نصب داکر:
1.یک سرور اوبونتو نسخه 18.04 ایجاد کنید که شامل نام کاربری sudo non-root و فایروال باشد.
2.یک حساب کاربری در وب سایت رسمی Docker Hub ایجاد کنید و در صورتی که تمایل داشته باشید می توانید تصاویر خود را باتوجه به گام 7 و 8 در داکرهاب قرار دهید.
گام اول: نصب داکر
گاهی اوقات ممکن است نسخه نصبی دار موجود در Repository یا مخزن اوبونتو، آخرین ورژن نباشد.برای اینکه مطمئن شوید آخرین نسخه را در اختیار دارید، داکر را از Official Docker repository (مخزن رسمی داکر) نصب کنید. برای این کار یک new package source اضافه کنید ، یک کلید GPG از داکر اضافه کنید که مطمئن شوید بارگیری در دسترس است و در آخر پکیج را نصب کنید.
در ابتدا با استفاده از کد زیر لیست پکیج های خود را به روز کنید:
$ sudo apt update
بعد از آن چند پکیج پیش نیاز را نصب کنید که به دستور apt اجازه دهد از پکیج های HTTPS استفاده کند:
$ sudo apt install apt-transport-https ca-certificates curl software-properties-common
در ادامه کلید GPG مورد نیاز برای مخزن رسمی داکر را به سیستم خود اضافه کنید:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
یک مخزن داکر به منبع APT اضافه کنید:
$ sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable”
سپس پکیج پایگاه داده را به همراه پکیج داکری که به تازگی به repo اضافه شده را به روز کنید:
$ sudo apt update
مطمئن شوید که repo داکر را به جای repo پیش فرض اوبونتو، نصب میکنید:
$ apt-cache policy docker-ce
بعد از وارد کردن کد بالا در خروجی شما چنین چیزی نشان داده میشود:
(ممکن است شماره نسخه داکر برای شما متفاوت باشد.)
Output of apt-cache policy docker-ce
$ docker-ce:
Installed: (none)
Candidate: 18.03.1~ce~3-0~ubuntu
Version table:
18.03.1~ce~3-0~ubuntu 500
500 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
توجه داشته باشید که در اینجا docker-ce نصب نشده است، اما از مخزن داکر برای نصب در اوبونتو 18.04 (bionic)داوطلب یا آماده شده است.
در آخر داکر را نصب کنید:
$ sudo apt install docker-ce
اکنون داکر نصب شد،(daemon) به رویدادهای تعریف شده عکس العمل نشان میدهد و فرایند شروع کار فعال شد.برای بررسی وضعیت شروع فرایند کد زیر را وارد کنید:
$ sudo systemctl status docker
خروجی شما باید شبیه متن زیر باشد که نشان دهنده فعال بودن و در حال اجرا بودن سرویس است:
Output
● docker.service – Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2018-07-05 15:08:39 UTC; 2min 55s ago
Docs: https://docs.docker.com
Main PID: 10096 (dockerd)
Tasks: 16
CGroup: /system.slice/docker.service
├─10096 /usr/bin/dockerd -H fd://
└─10113 docker-containerd –config /var/run/docker/containerd/containerd.toml
اکنون با نصب شدن داکر نه تنها deamon (سرویس داکر) بلکه ابزار command line (خط فرمان) و docker client (سرویس گیرنده داکر) را در اختیار دارید.
گام دوم: اجرای دستور داکر بدون Sudo (اختیاری)
دستور داکر فقط می تواند توسط ادمین سیستم یا کاربری که در گروه داکر عضو است،اجرا شود که به طور خودکار در طی مراحل نصب داکر، ایجاد می شود. اگر تمایل دارید دستور داکر را بدون پیشوند sudo یا بدون اینکه در گروه داکر حساب کاربری داشته باشید اجرا کنید، خروجی زیر را دریافت خواهید کرد:
Output
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See ‘docker run –help’.
اگر میخواهید هر زمان که دستور داکر را اجرا کردید از دستور sudo استفاده نکنید کافیست نام کاربری خود را به گروه داکر اضافه کنید:
$ sudo usermod -aG docker ${USER}
برای عضویت در گروه جدید باید یکبار از سرور خارج شوید و دوباره وارد شوید یا دستور زیر را وارد کنید:
$ su – ${USER}
و در ادامه نام کاربری و رمز عبور خود را وارد کنید و برای تایید عضویت کاربر در گروه داکر،کد زیر را وارد کنید:
$ id -nG
و در خروجی متن زیر نمایش داده میشود:
Output
sammy sudo docker
زمانی که می خواهید یک کاربر جدید را در گروه داکر عضو کنید، نام کاربری مورد نظر را به صورت زیر اعلان کنید:
$ sudo usermod -aG docker username
حالا فرض کنید که شما بعنوان یک کاربر در گروه داکر عضو هستید و ادمین گروه داکر نیستید.از نوع دستورات قبل را با sodu اجرا کنید.
گام سوم: استفاده از دستورات داکر
داکر شامل زنجیره ایی از گزینه ها،دستورات و آرگومان هاست،که کد زیر ترکیب و نحوه استفاده از آنها را نشان میدهد:
$ docker [option] [command] [arguments]
برای مشاهده تمامی زیر دستورات کافیست دستور زیر را وارد کنید:
$ docker
در داکر نسخه 18 ، لیست زیردستورات مانند زیر میباشد:
Output
attach Attach local standard input, output, and error streams to a running container
build Build an image from a Dockerfile
commit Create a new image from a container’s changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container’s filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container’s filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on Docker objects
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes
برای دیدن لیست زیر دستورات موجود، برای یک دستور خاص کد زیر را وارد کنید:
$ docker docker-subcommand –help
برای مشاهده اطلاعات گسترده در مورد داکر هم میتوانید دستور زیر را بزنید:
$ docker info
گام چهارم : نحوه کارکردن با تصاویر داکر
داکر کانتینرها، از تصاویر داکر ساخته شدند که داکر بطور پیش فرض این تصاویر را از Dacker hub (مرکز هاب) ، Docker registry managed (فهرست مدیریتی داکر) و شرکت پشتیبانی docker project تامین و دریافت میکند. علاقه مندان به راحتی میتوانند در مرکز داکر ، میزبان تصاویر داکر خود باشند. بنابراین اکثر برنامه ها و توزیع های لینوکس میتوانند در آنجا میزبان تصاویر خود باشند.
برای دسترسی و دانلود تصاویر از مرکز داکر دستور زیر را وارد کنید:
$ docker run hello-world
در خروجی می بینید که داکر به درستی کار میکند:
Output
Unable to find image ‘hello-world:latest’ locally
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete
Digest: sha256:3e1764d0f546ceac4565547df2ac4907fe46f007ea229fd7ef2718514bcec35d
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
…
در ابتدا داکر به صورت محلی قادر به پیدا کردن تصویر hello-world نیست از این رو تصویر را از مخزن پیش فرض یعنی همان docker hub دانلود میکند و سپس یک کانتینر از تصویر و برنامه موجود در کانتینر اجرا شده را ایجاد میکند و پیام را نمایش میدهد.
برای جستجوی تصاویر موجود در داکر مرکزی ابتدا کلمه docker و بعد از آن search و در اخر زیر دستور مورد نظر را وارد کنید.
برای مثال کد زیر تصاویر اوبونتو را جست و جو میکند:
$ docker search ubuntu
ابتدا اسکریپت به مرکز هاب مراجعه میکند و یک لیست از تمام تصاویری که نام آنها با رشته ی وارد شده مطابقت دارد را آماده میکند و در خروجی نشان میدهد:
Output
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 7917 [OK]
dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-server and NoVNC 193 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 156 [OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 93 [OK]
ubuntu-upstart Upstart is an event-based replacement for th… 87 [OK]
neurodebian NeuroDebian provides neuroscience research s… 50 [OK]
ubuntu-debootstrap debootstrap –variant=minbase –components=m… 38 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 36 [OK]
nuagebec/ubuntu Simple always updated Ubuntu docker images w… 23 [OK]
tutum/ubuntu Simple Ubuntu docker images with SSH access 18
i386/ubuntu Ubuntu is a Debian-based Linux operating sys… 13
ppc64le/ubuntu Ubuntu is a Debian-based Linux operating sys… 12
1and1internet/ubuntu-16-apache-php-7.0 ubuntu-16-apache-php-7.0 10 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mariadb-10 ubuntu-16-nginx-php-phpmyadmin-mariadb-10 6 [OK]
eclipse/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 6 [OK]
codenvy/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 4 [OK]
darksheer/ubuntu Base Ubuntu Image — Updated hourly 4 [OK]
1and1internet/ubuntu-16-apache ubuntu-16-apache 3 [OK]
1and1internet/ubuntu-16-nginx-php-5.6-wordpress-4 ubuntu-16-nginx-php-5.6-wordpress-4 3 [OK]
1and1internet/ubuntu-16-sshd ubuntu-16-sshd 1 [OK]
pivotaldata/ubuntu A quick freshening-up of the base Ubuntu doc… 1
1and1internet/ubuntu-16-healthcheck ubuntu-16-healthcheck 0 [OK]
pivotaldata/ubuntu-gpdb-dev Ubuntu images for GPDB development 0
smartentry/ubuntu ubuntu with smartentry 0 [OK]
ossobv/ubuntu
…
در ستون Official، روبروی تصاویری که در شرکت behind the project ساخته و پشتیبانی شده اند، کلمه OK درج شده است.بعد از شناسایی تصویر مورد نظر میتوانید با استفاده از زیر دستور pull آن را دانلود کنید.برای مثال اگر تصویر مورد نظر شما تصویر رسمی اوبونتو باشد به این صورت دستورات را وارد کنید:
$ docker pull ubuntu
و در خروجی چنین چیزی را مشاهده خواهید کرد:
Output
Using default tag: latest
latest: Pulling from library/ubuntu
6b98dfc16071: Pull complete
4001a1209541: Pull complete
6319fc68c576: Pull complete
b24603670dc3: Pull complete
97f170c87c6f: Pull complete
Digest: sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d
Status: Downloaded newer image for ubuntu:latest
گام پنجم : اجرای یک کانتینر داکر
کانتینر hello-world نمونه کانتینری است که پس از انتشار پیام ، آزمایشی اجرا و خارج می شود. کانتینر ها شبیه به ماشین های مجازی هستند اما نسبت به آنها بسیار مفیدتر و تعاملی تر هستند.
برای نمونه می توانیم یک کانتینر را با استفاده از آخرین اوبونتو اجرا کنیم.با ترکیب کلید های -i و -t به شما دسترسی به interactive shell (پوسته تعاملی) را می دهد:
$ docker run -it ubuntu
و خروجی شما به این شکل خواهد بود:
Output
root@d9b100f2f636:/#
به شناسه خط فرمان توجه داشته باشید زیرا برای شناسایی کانتینر و پاک کردن کانتینر به شناسه آن کانتینر نیاز دارید.
اکنون می توانید دستوری را درون کانتینر اجرا کنید و نیازی به sudo نیست زیرا شما ادمین هستید:
root@d9b100f2f636:/# apt update
بعد از آن میتوانید هر برنامه ایی را روی آن نصب کنید:
root@d9b100f2f636:/# apt install nodejs
برنامه Node.js در مخزن رسمی اوبونتو پیدا و در کانتینر نصب میشود و در پایان برای تایید نصب آن دستور زیر را وارد کنید:
root@d9b100f2f636:/# node -v
ورژن نصب شده را در خروجی مشاهده خواهید کرد:
Output
v8.10.0
یادتان بماند که هر تغییری در داخل ظرف ایجاد کنید فقط در آن ظرف اعمال می شود و در اخر برای خروج از کانتینر ، exit را وارد کنید.
گام ششم : مدیریت کانتینر داکر
وقتی مدت زیادی از داکر استفاده میکنید ، کانتینر های فعال و غیرفعال زیادی در سیستم شما ساخته میشود. برای مشاهده کانتینر های فعال ، دستور زیر را وارد کنید:
$ docker ps
و در خروجی چنین چیزی را مشاهده خواهید کرد:
Output
CONTAINER ID IMAGE COMMAND CREATED
با توجه به آموزش های بالا تا کنون شما دو کانتینر ایجاد کرده اید یکی تصویر hello-world و ubuntu هر دو کانتینر غیرفعال شده اند اما همچنان در سیستم وجود دارند.
برای مشاهده تمامی کانتینرهای فعال و غیر فعال دستور زیر را اجرا کنید:
$ docker ps -a
در خروجی چنین چیزی را مشاهده خواهید کرد:
d9b100f2f636 ubuntu “/bin/bash” About an hour ago Exited (0) 8 minutes ago sharp_volhard
01c950718166 hello-world “/hello” About an hour ago Exited (0) About an hour ago festive_williams
برای مشاهده آخرین کانتینر ساخته شده دستور زیر را وارد کنید:
$ docker ps -l
$ CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ d9b100f2f636 ubuntu “/bin/bash” About an hour ago Exited (0) 10 minutes ago sharp_volhard
برای راه اندازی یک کانتینر متوقف شده در داکر، از شماره شناسه یا نام کانتینر استفاده کنید. برای مثال کانتینری مبتنی بر اوبونتو را با شناسه d9b100f2f636 به این صورت از نو شروع میکنیم:
$ docker start d9b100f2f636
برای متوقف کردن کانتینری که در حال اجراست از docker stop و در ادامه شناسه یا نام کانتینر را وارد کنید . این بار ، در این مثال از sharp_volhard که نام یک کانتینر داکر اختصاصی است ، استفاده می کنیم :
$ docker stop sharp_volhard0
برای پاک کردن کانتینری که قابل استفاده نیست و به آن نیازی ندارید میتوانید دستور زیر را وارد کنید و با استفاده از نام یا شناسه مربوط به تصویر، آن را حذف کنید:
$ docker rm festive_williams
اکنون میتوانید یک ظرف جدید ایجاد کنید و با دستور switch –name آن را نام گذاری کنید.همچنین با دستور –rm switch شما قادر هستید که ظرفی ایجاد کنید که در زمان متوقف شدن بطور خودکار از بین برود.
می توان از کانتینر ها بعنوان تصاویر جدید، برای ساخت کانتینر ها ی جدید استفاده کرد. در ادامه توضیحات کامل داده میشود.
گام هفتم : تغییر و ویرایش یک کانتینر به یک تصویر داکر
وقتی یک تصویر داکر راه اندازی می کنید ، مانند ماشین های مجازی می توانید فایل ها را ایجاد، اصلاح و حذف کنید و توجه داشته باشید که وقتی شما یک سری تغییرات را ایجاد می کنید فقط در آن کانتینر اعمال می شود.شما نیز میتوانید اجرای آن را شروع و متوقف کنید ، اما اگر با دستور docker rm آن را حذف کنید تغییراتی که ایجاد کردید برای همیشه ازبین می روند.
در این بخش نحوه ذخیره یک کانتینر به عنوان تصویر جدید داکر به شما آموزش داده میشود.
بعد از نصب Node.js در کانتینر اوبونتو ، در حال حاضر شما یک کانتینر تصویر در حال اجرا دارید اما کانتینری که استفاده کردید با تصویر ایجاد شده متفاوت است.
با استفاده از دستور زیر میتوانید تغییرات لازم را در تصویر جدید داکر انجام دهید:
$ docker commit -m “What you did to the image” -a “Author Name” container_id repository/new_image_name
در توضیح بالا کلید -m برای commit message (پیام متعهد) است که به شما و دیگران کمک می کند تا بدانید که چه تغییراتی را انجام داده اید ، و کلید -a برای specify the author (تعیین نویسنده) استفاده می شود.
تا زمانی که مخازن بیشتری در مرکز داکر ایجاد نکنید، نام کاربری مخزن تان همان نام کاربری docker hub است.
برای مثال نام کاربری sammy ، با شناسه کانتینر d9b100f2f636، بصورت زیر است:
$ docker commit -m “added Node.js” -a “sammy” d9b100f2f636 sammy/ubuntu-nodejs
وقتی شما یک تصویر را commit میکنید، تصویر جدید به صورت محلی در سیستم شما ذخیره می شود.
با وارد کردن عبارت Docker images ، تصویر جدید و به خوبی تصویر قدیمی که از آن سرچشمه گرفته شده است نمایش داده میشود و خروجی آن به صورت زیر است:
Output
REPOSITORY TAG IMAGE ID CREATED SIZE
sammy/ubuntu-nodejs latest 7c1f35226ca6 7 seconds ago 179MB
ubuntu latest 113a43faa138 4 weeks ago 81.2MB
hello-world latest e38bc07ac18e 2 months ago 1.85kB
گام هشتم : انتقال تصاویر داکر به مخزن داکر
مرحله منطقی بعدی پس از ایجاد یک تصویر جدید از یک تصویر موجود، به اشتراک گذاشتن آن با تعداد کمی از دوستان خود ،مرکز داکر در کل جهان یا سایر رجیستری داکرهایی که به آنها دسترسی دارید. برای انتقال یک تصویر به مرکز داکر یا هر رجیستری داکر دیگر، باید یک حساب کاربری در آن داشته باشید.
برای انتقال عکس،ابتدا باید وارد حساب کاربری docker hub خود شوید:
$ docker login -u docker-registry-username
از شما خواسته می شود با استفاده از رمز عبور Docker Hub خود احراز هویت کنید. اگر گذرواژه صحیحی را تعیین کرده باشید ، درخواست شما تایید و پردازش میشود.
نکته:
اگر نام کاربری Docker registry شما با نام کاربری محلی که برای ایجاد تصویر استفاده کرده اید متفاوت است، باید تصویر را با نام کاربری رجیستری تگ کنید مانند مثال زیر:
$ docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs
سپس می توانید به روش زیر تصویر خود را انتقال دهید:
$ docker push docker-registry-username/docker-image-name
برای مثال اگر بخواهید تصویر ubuntu-nodejs به مخزن sammy ، انتقال دهید باید دستور زیر را وارد کنید:
$ docker push sammy/ubuntu-nodejs
ممکن است پردازش و بارگذاری تصاویر کمی طول بکشد و در پایان خروجی به این شکل خواهد بود:
Output
The push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Pushed
5f70bf18a086: Pushed
a3b5c80a4eba: Pushed
7f18b442972b: Pushed
3ce512daaf78: Pushed
7aae4540b42d: Pushed
…
پس از انتقال یک تصویر به رجیستری ، باید مانند تصویر زیر آن را در داشبورد حساب خود ثبت کنید :
اگر انتقال با خطا مواجه شد و متن زیر را نمایش داد ، احتمالاً به درستی وارد حساب کاربری نشده اید:
Output
The push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication required
دوباره وارد حساب داکر شوید و مجددا تلاش کنید و تایید کنید که آن در صفحه مخزن مرکز داکر شما وجود دارد.
اکنون می توانید با استفاده از docker pull sammy / ubuntu-nodejs تصویر را به ماشین جدیدی جابه جاکنید و از آن برای اجرای کانتینر جدید استفاده کنید.
مقالات مرتبط :
نصب داکر بر روی ویندوز بدون نیاز به مجازی سازی