آموزش نصب داکر در اوبونتو

آموزش نصب و استفاده داکرdocker در سیستم عامل اوبونتوubuntu

آموزش نصب و استفاده داکرdocker در سیستم عامل اوبونتوubuntu

در این مقاله قرار است مفهوم 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_volhard

 

برای پاک کردن کانتینری که قابل استفاده نیست و به آن نیازی ندارید میتوانید دستور زیر را وارد کنید و با استفاده از نام یا شناسه مربوط به تصویر، آن را حذف کنید:

$ 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 تصویر را به ماشین جدیدی جابه جاکنید و از آن برای اجرای کانتینر جدید استفاده کنید.

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

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

بستن