Docker برنامه اي است كه پروسه مديريت فرآيندهاي برنامه را در كانتينرها را ساده مي كند. كانتينرها به شما امكان مي دهند برنامه هاي خود را در فرآيندهاي جدا از منابع اجرا كنيد. آنها شبيه به ماشين هاي مجازي هستند ، اما كانتينرها قابل حمل تر، سازگارتر با منابع و وابسته تر به سيستم عامل هاست هستند.
براي آشنايي دقيق با مؤلفه هاي مختلف يك كانتينر Docker ، اكوسيستم Docker: مقدمه اي براي مولفه هاي مشترك را بررسي كنيد.
در اين آموزش ، Docker Community Edition (CE) را در اوبونتو 20.04 نصب و استفاده خواهيد كرد. شما خود Docker را نصب خواهيد كرد ، با كانتينرها و تصاوير كار مي كنيد و يك تصوير را به مخزن Docker وارد مي كنيد.
پيش نيازها
براي دنبال كردن اين آموزش به موارد زير نياز داريد:
• يك سرور مجازي Ubuntu 20.04 با پيروي از راهنماي تنظيم اوليه سرور مجازي Ubuntu 20.04 ، از جمله يك كاربر sudo غير ريشه و فايروال راه اندازي شده.
• اگر مي خواهيد تصاوير خود را ايجاد كنيد و آنها را به سمت Docker Hub هدايت كنيد ، همانطور كه در مراحل 7 و 8 نشان داده شده است ، يك حساب كاربري در Docker Hub ايجاد كنيد.
مرحله 1 – نصب Docker
بسته نصب Docker موجود در مخزن رسمي اوبونتو ممكن است آخرين نسخه نباشد. براي اطمينان از آخرين نسخه ، Docker را از مخزن رسمي Docker نصب خواهيم كرد. براي انجام اين كار ، يك منبع جديد بسته اضافه خواهيم كرد ، تا اطمينان حاصل شود كه دانلودها معتبر هستند ، كليد GPG را از Docker اضافه كرده و سپس بسته را نصب كنيد.
ابتدا ليست بسته هاي موجود را به روز كنيد:
⦁ $ sudo apt update

در مرحله بعد ، چند بسته پيش نياز را نصب كنيد كه اجازه استفاده از بسته ها را از طريق HTTPS به apt بدهد:
⦁ $ sudo apt install apt-transport-https ca-certificates curl software-properties-common

سپس كليد GPG را براي مخزن رسمي Docker به سيستم خود اضافه كنيد:
⦁ $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –

مخزن Docker را به منابع APT اضافه كنيد:
⦁ $ sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable”

در مرحله بعد ، پايگاه داده بسته را با بسته هاي Docker از repo كه تازه اضافه شده به روز كنيد:
⦁ $ sudo apt update

مطمئن شويد كه به جاي repo پيش فرض اوبونتو قصد داريد از repo Docker نصب را انجام دهيد:
⦁ $ apt-cache policy docker-ce

خروجي مشابه اين را خواهيد ديد ، اگرچه ممكن است شماره نسخه Docker متفاوت باشد:
Output of apt-cache policy docker-ce
docker-ce:
Installed: (none)
Candidate: 5:19.03.9~3-0~ubuntu-focal
Version table:
5:19.03.9~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages

توجه كنيد كه docker-ce نصب نشده است ، اما نامزد نصب، از مخزن Docker براي اوبونتو 20.04 است (focal).
در آخر ، Docker را نصب كنيد:
⦁ $ sudo apt install docker-ce

اكنون بايد Docker نصب شود ، 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 Tue 2020-05-19 17:00:41 UTC; 17s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 24321 (dockerd)
Tasks: 8
Memory: 46.4M
CGroup: /system.slice/docker.service
└─24321 /usr/bin/dockerd -H fd:// –containerd=/run/containerd/containerd.sock

نصب Docker اكنون نه تنها سرويس Docker (Daemon) بلكه ابزار خط فرمان docker يا همان كلاينت Docker را به شما مي دهد. ما نحوه استفاده از دستور docker را بعدا در اين آموزش بررسي خواهيم كرد.
مرحله 2 – اجراي فرمان Docker بدون sudo (اختياري)
به طور پيش فرض ، دستور docker فقط مي تواند توسط كاربر root يا توسط يك كاربر در گروه docker اجرا شود ، كه به طور خودكار در طي مراحل نصب Docker ايجاد مي شود. اگر سعي كنيد فرمان docker را بدون پيشوند آن با sudo يا بدون حضور در گروه docker اجرا كنيد ، خروجي مانند اين را دريافت خواهيد كرد:
Output
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See ‘docker run –help’.

اگر مي خواهيد از تايپ كردن sudo اجتناب كنيد ، هر زمان كه دستور docker را اجرا كرديد ، نام كاربري خود را به گروه docker اضافه كنيد:
⦁ $ sudo usermod -aG docker ${USER}

براي اعمال عضويت در گروه جديد ، از سرور مجازي خارج شويد و دوباره وارد سيستم شويد يا دستور زير را تايپ كنيد:
⦁ $ su – ${USER}

براي ادامه از شما خواسته مي شود رمزعبور كاربري خود را وارد كنيد.
با تايپ كردن دستور زير تأييد كنيد كه كاربر شما اكنون به گروه docker اضافه شده است:
⦁ $ id -nG

Output
sammy sudo docker

اگر نياز داريد كه يك كاربر را به گروه docker اضافه كنيد كه با آن وارد نشده ايد ، آن نام كاربري را به صراحت اعلام كنيد:
⦁ $ sudo usermod -aG docker username

بقيه اين مقاله فرض مي كنيد كه شما دستور docker را به عنوان كاربر در گروه docker اجرا مي كنيد. اگر اين انتخاب را نكرديد ، لطفاً دستورات را با sudo وارد كنيد.
بياييد دستور docker را بررسي كنيم.
مرحله 3 – استفاده از دستور Docker
استفاده از docker شامل عبور از آن زنجيره اي گزينه ها و دستورات است كه پس از آن آرگومان ها قرار مي گيرند. تركيب دستور به اين شكل است:
⦁ $ docker [option] [command] [arguments]

براي مشاهده همه دستورات فرعي، تايپ كنيد:
⦁ $ docker

در مورد Docker 19 ، ليست كاملي از زيرفرمان هاي موجود شامل موارد زير است:
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 uغير مجاز مي باشدe 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 ، از دستور زير استفاده كنيد:
⦁ $ docker info

بياييد برخي از اين دستورات را بررسي كنيم. ما با كار با تصاوير شروع خواهيم كرد.
مرحله 4 – كار با تصاوير Docker
كانتينرهاي Docker از تصاوير Docker ساخته شده اند. به طور پيش فرض ، Docker اين تصاوير را از Docker Hub دريافت ميكند ، يك رجيستري Docker كه توسط Docker ، يعني شركت پشتيبان پروژه Docker اداره مي شود. هر كسي مي تواند تصاوير Docker خود را در Docker Hub ميزباني كند ، بنابراين بيشتر برنامه ها و توزيع هاي لينوكس مورد نياز شما داراي تصاوير ميزباني شده در آنجا خواهند بود.
براي بررسي اينكه آيا مي توانيد به تصاوير در Docker Hub دسترسي پيدا كرده و آن ها دانلود كنيد ، اين دستور را تايپ كنيد:
⦁ $ docker run hello-world

خروجي نشان مي دهد كه Docker به درستي كار ميكند:
Output
Unable to find image ‘hello-world:latest’ locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:6a65f928fb91fcfbc963f7aa6d57c

8eeb426ad9a20c7ee045538ef34847f44f1
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This mesغير مجاز مي باشدe shows that your installation appears to be working correctly.

Docker در ابتدا قادر نبود تصوير hello world را به صورت لوكال پيدا كند ، بنابراين تصوير را از Docker Hub دانلود ميكرد ، كه مخزن پيش فرض ميباشد. پس از دانلود تصوير ، Docker يك كانتينر از تصوير و برنامه موجود در داخل كانتينر را اجرا كرده و پيام را نمايش داد.
با استفاده از دستور docker با زيرفرمان search  مي توانيد تصاوير موجود در Docker Hub را جستجو كنيد. به عنوان مثال ، براي جستجوي تصوير اوبونتو ، تايپ كنيد:
⦁ $ docker search ubuntu

اسكريپت Docker Hub را خزش كرده و ليستي از تمام تصويرهايي را كه نام آنها با رشته جستجو مطابقت دارد ، برمي گرداند. در اين مورد، خروجي مشابه اين خواهد بود:
Output
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 10908 [OK]
dorowu/ubuntu-desktop-lxde-vnc Docker image to provide HTML5 VNC interface … 428 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 244 [OK]
consol/ubuntu-xfce-vnc Ubuntu container with “headless” VNC session… 218 [OK]
ubuntu-upstart Upstart is an event-based replacement for th… 108 [OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with

در ستون OFFICIAL ، ok ، تصويري را بيان ميكند كه توسط شركت پشتيبان پروژه ساخته و پشتيباني ميشود. هنگامي كه تصويري را كه مي خواهيد از آن استفاده كنيد مشخص كرديد ، مي توانيد آن را با استفاده از زيرفرمان pull  در رايانه خود دانلود كنيد.
دستور زير را براي دانلود تصوير رسمي اوبونتو در رايانه خود اجرا كنيد:
⦁ $ docker pull ubuntu

خروجي زير را مشاهده خواهيد كرد:
Output
Using default tag: latest
latest: Pulling from library/ubuntu
d51af753c3d3: Pull complete
fc878cd0a91c: Pull complete
6154df8ff988: Pull complete
fee5db0ff82f: Pull complete
Digest: sha256:747d2dbbaaee995098c9792d99b

d333c6783ce56150d1b11e333bbceed5c54d7
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

پس از دانلود يك تصوير ، مي توانيد يك كانتينر را با استفاده از تصوير دانلود شده با زيرفرمان run اجرا كنيد. همانطور كه با مثال hello world مشاهده كرديد ، اگر هنگام اجراي docker با زيرفرمان run ، تصويري دانلود نشده است ، كلاينت Docker ابتدا تصوير را دانلود مي كند ، سپس يك كانتينر را با استفاده از آن اجرا مي كنيد.
براي ديدن تصاويري كه در رايانه شما دانلود شده است ، اين دستور را تايپ كنيد:
⦁ $ docker images

خروجي شبيه به زير خواهد بود:
Output
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 1d622ef86b13 3 weeks ago 73.9MB
hello-world latest bf756fb1ae65 4 months ago 13.3kB

همانطور كه بعداً در اين آموزش مشاهده خواهيد كرد ، تصاويري كه شما براي اجراي كانتينرها از آنها استفاده مي كنيد قابل تغيير است و از آنها براي توليد تصاوير جديد استفاده مي شود ، كه ممكن است بعدا در Docker Hub يا ساير رجيستري هاي Docker آپلود شود (اصطلاح فني آنpushed  است).
بياييد ببينيم كه چگونه كانتينرها را با جزئيات بيشتري اجرا كنيم.
مرحله 5 – اجراي يك كانتينر Docker
كانتينر hello-world شما كه در مرحله قبل اجرا شد نمونه اي از كانتينري است كه پس از انتشار يك پيام آزمايشي اجرا و ارائه مي شود. كانتينرها مي توانند بسيار مفيدتر از آن باشند و مي توانند تعاملي باشند. از اين گذشته ، آنها شبيه به ماشين هاي مجازي هستند ، فقط با منابع سازگار تر هستند.
به عنوان نمونه ، بگذاريد كانتينري را با استفاده از آخرين تصوير اوبونتو اجرا كنيم. تركيبي از سوئيچ هاي -i و -t به شما امكان دسترسي پوسته تعاملي به داخل كانتينرها را مي دهد:
⦁ $ docker run -it ubuntu

اعلان فرمان شما بايد تغيير كند تا منعكس كننده اين واقعيت باشد كه اكنون در داخل كانتينر كار مي كنيد و بايد به شكل درآيد:
Output
root@d9b100f2f636:/#

به شناسه كانتينر را در اعلان فرمان توجه داشته باشيد. در اين مثال d9b100f2f636 است. بعداً به آن شناسه كانتينر احتياج داريد تا بتوانيد كانتينر آن را حذف كنيد.
اكنون مي توانيد هر دستوري را درون كانتينر اجرا كنيد. به عنوان مثال ، بياييد پايگاه داده بسته را درون كانتينر به روز كنيم. لازم نيست كه هر دستور را با sudo تنظيم كنيد ، زيرا به عنوان كاربر اصلي در داخل كانتينر كار مي كنيد:
⦁ root@d9b100f2f636:/# apt update

سپس هر برنامه اي را در آن نصب كنيد. بگذاريد Node.js را نصب كنيم:
⦁ root@d9b100f2f636:/# apt install nodejs

اين Node.js را در مخزن از مخزن رسمي اوبونتو نصب مي كند. پس از اتمام نصب ، تأييد كنيد كه Node.js نصب شده است:
⦁ root@d9b100f2f636:/# node -v

شماره نسخه نمايش داده شده در ترمينال خود را مشاهده خواهيد كرد:
Output
v10.19.0

هرگونه تغيير در داخل كانتينر فقط براي آن كانتينر اعمال مي شود.
براي خروج از كانتينر ، exit را در اعلان تايپ كنيد.
بياييد نگاهي به مديريت كانتينرهاي موجود در سيستم خود بيندازيم.
مرحله 6 – مديريت كانتينرهاي Docker
پس از مدتي استفاده از Docker ، بسياري از كانتينرهاي فعال (در حال اجرا) و غيرفعال را در رايانه خود خواهيد داشت. براي مشاهده موارد فعال ، از دستور زير استفاده كنيد:
⦁ $ docker ps

خروجي مشابه زير را مشاهده خواهيد كرد:
Output
CONTAINER ID IMAGE COMMAND CREATED

در اين آموزش ، دو كانتينر را شروع كرديد. يكي از تصوير hello world و ديگري از تصوير ubuntu. هر دو كانتينرديگر در حال اجرا نيستند ، اما هنوز هم در سيستم شما وجود دارند.
براي مشاهده همه كانتينرها – فعال و غيرفعال ، docker ps را با كليد -a اجرا كنيد:
⦁ $ docker ps -a

خروجي مشابه اين را مشاهده خواهيد كرد:
1c08a7a0d0e4 ubuntu “/bin/bash” 2 minutes ago Exited (0) 8 seconds ago quizzical_mcnulty
a707221a5f6c hello-world “/hello” 6 minutes ago Exited (0) 6 minutes ago youthful_curie

براي مشاهده جديدترين كانتينري كه ايجاد كرده ايد ، سوئيچ -l را از آن عبور دهيد:
⦁ $ docker ps -l

$ CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

$ 1c08a7a0d0e4 ubuntu “/bin/bash” 2 minutes ago Exited (0) 40 seconds ago quizzical_mcnulty
$

براي شروع يك كانتينر متوقف شده ، از docker start استفاده كنيد ، به دنبال آن شناسه كانتينر يا نام كانتينر مي آيد. بياييد كانتينر مستقر در اوبونتو را با شناسه 1c08a7a0d0e4 شروع كنيم:
⦁ $ docker start 1c08a7a0d0e4

كانتينر شروع مي شود و مي توانيد از docker ps براي ديدن وضعيت آن استفاده كنيد:
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c08a7a0d0e4 ubuntu “/bin/bash” 3 minutes ago Up 5 seconds quizzical_mcnulty

براي متوقف كردن يك كانتينر در حال اجرا ، از docker stop استفاده كنيد ، به دنبال آن شناسه يا نام كانتينر درج ميشود. اين بار ، ما از اسمي استفاده مي كنيم كه Docker به كانتينر اختصاص داده است ، و quizzical_mcnulty ميباشد:
⦁ $ docker stop quizzical_mcnulty

وقتي تصميم گرفتيد كه ديگر نيازي به كانتينر نداشته باشيد ، آنرا با دستور docker rm ، دوباره با استفاده از شناسه كانتينر يا نام آن جدا كنيد. از دستور docker ps -a براي يافتن شناسه يا نام كانتينر مربوط به تصوير مربوط به hello world استفاده كنيد و آن را حذف كنيد.
⦁ $ docker rm youthful_curie

مي توانيد كانتينر جديدي را راه اندازي كرده و با استفاده از سوئيچ –name آن را نامگذاري كنيد. همچنين مي توانيد براي ايجاد يك كانتينر در صورت متوقف شدن ، از كليد سوئيچ –rm استفاده كنيد. براي اطلاعات بيشتر در مورد اين گزينه ها و ساير موارد ، به فرمان docker run help مراجعه كنيد.
كانتينرها را مي توان به تصاويري تبديل كرد كه مي توانيد از آنها براي ساخت كانتينرهاي جديد استفاده كنيد. بياييد ببينيم كه چگونه اين كار مي كند.
مرحله 7 – انجام تغييرات در يك كانتينر روي يك تصوير Docker
هنگامي كه يك تصوير Docker را راه اندازي مي كنيد ، مي توانيد درست مانند يك ماشين مجازي ، فايل ها را ايجاد ، اصلاح و حذف كنيد. تغييراتي كه ايجاد مي كنيد فقط در مورد آن كانتينر اعمال مي شود. مي توانيد آن را شروع و متوقف كنيد ، اما هنگامي كه آن را با دستور docker rm از بين ميبريد ، تغييرات به راحتي از بين مي روند.
در اين بخش نحوه ذخيره حالت يك كانتينر به عنوان تصوير جديد Docker به شما نشان داده مي شود.
پس از نصب Node.js در داخل كانتينر اوبونتو ، اكنون يك كانتينر در حال متوقف كردن تصوير وجود دارد ، اما اين كانتينر با كانتينري كه براي ايجاد تصوير استفاده كرديد، فرق مي كند. اما ممكن است بخواهيد بعداً از اين كانتينرهايNode.js به عنوان پايه اي براي تصاوير جديد استفاده كنيد.
سپس با استفاده از دستور زير تغييرات را به عنوان نمونه جديد Docker انجام دهيد.
⦁ $ docker commit -m “What you did to the image” -a “Author Name” container_id repository/new_image_name

سوئيچ -m f براي پيام تعهدي است كه به شما و ديگران كمك مي كند بدانند چه تغييراتي ايجاد كرده ايد ، در حالي كه -a براي مشخص كردن نويسنده استفاده مي شود. bowl_id همان چيزي است كه شما در ابتداي آموزش هنگام ذكر جلسه تعاملي Docker يادداشت كرديد. مخزن معمولاً نام كاربري Docker Hub شماست، مگر اينكه مخازن اضافي را در Docker Hub ايجاد كرده باشيد.
به عنوان مثال ، براي كاربر sammy ، با شناسه كانتينر d9b100f2f636 ، دستور زير را خواهيم داشت:
⦁ $ docker commit -m “added Node.js” -a “sammy” d9b100f2f636 sammy/ubuntu-nodejs

وقتي يك تصوير را ارائه مي كنيد ، تصوير جديد به صورت محلي در رايانه شما ذخيره مي شود. بعداً در اين آموزش ، ياد مي گيريد كه چگونه يك تصوير را به رجيستري Docker مانند Docker Hub وارد كنيد تا ديگران بتوانند به آن دسترسي پيدا كنند.
دوباره ليست كردن تصاوير Docker ، تصوير جديد و همچنين قديمي كه از آن گرفته شده است را نشان مي دهد:
⦁ $ docker images

خروجي مانند اين را خواهيد ديد:
Output
REPOSITORY TAG IMAGE ID CREATED SIZE
sammy/ubuntu-nodejs latest 7c1f35226ca6 7 seconds ago 179MB

در اين مثال ، ubuntu-nodejs تصوير جديد است كه از تصوير موجود اوبونتو از Docker Hub گرفته شده است. تفاوت اندازه نشان دهنده تغييراتي است كه ايجاد شده است. و در اين مثال ، تغيير در نصب NodeJS بود. بنابراين دفعه ديگر كه بايد با استفاده از اوبونتو با پيش نصب NodeJS يك كانتينر را اجرا كنيد ، مي توانيد از تصوير جديد استفاده كنيد.
همچنين مي توانيد تصاوير را از يك Dockerfile بسازيد ، كه به شما امكان مي دهد نصب نرم افزار را در يك تصوير جديد خودكار كنيد. با اين حال ، اين مسئله خارج از محدوده اين آموزش است.
حال بگذاريد تصوير جديد را با ديگران به اشتراك بگذاريم تا بتوانند كانتينرها را از آن ايجاد كنيم.
مرحله 8 – وارد كردن تصاوير Docker به مخزن Docker
مرحله منطقي بعدي پس از ايجاد يك تصوير جديد از يك تصوير موجود ، به اشتراك گذاري آن با چند نفر از دوستانتان ، كل جهان موجود در Docker Hub يا ساير رجيستري هاي Docker است كه به آن دسترسي داريد. براي وارد كردن يك تصوير به Docker هاب يا هر رجيستري ديگر Docker ، بايد در آنجا يك حساب كاربري داشته باشيد.
در اين بخش نحوه ورود تصوير Docker به Docker Hub به شما نشان داده مي شود. براي يادگيري نحوه ايجاد رجيستري خصوصي Docker خود ، مقاله نحوه تنظيم يك رجيستري Docker خصوصي در اوبونتو 14.04 را بررسي كنيد.
براي وارد كردن تصوير ، ابتدا وارد Docker Hub شويد.
⦁ $ docker login -u docker-registry-username

از شما خواسته مي شود با استفاده از گذرواژه Docker Hub اعتبار خود را تأييد كنيد. اگر گذرواژه صحيح را وارد كنيد ، تأييد اعتبار بايد موفق آميز باشد.
توجه: اگر نام كاربري رجيستري Docker شما با نام كاربري محلي كه براي ايجاد تصوير از آن استفاده كرده ايد متفاوت است ، بايد تصوير خود را با نام كاربري رجيستري خود تگ كنيد. براي مثالي كه در مرحله آخر آورده شده است ، بايد تايپ كنيد:
⦁ $ docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs

سپس مي توانيد با استفاده از دستور زير تصوير را وارد كنيد:
براي وارد كردن تصوير 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

پس از وارد كردن تصوير به رجيستري ، بايد مانند صفحه نمايش تصوير زير ، در داشبورد حساب شما فهرست شود.

اگر تلاش براي وارد كردن تصوير منجر به خطايي از اين دست شود ، احتمالاً log in نشده ايد:
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 login وارد شويد و تلاش براي ورود را تكرار كنيد. سپس تأييد كنيد كه در صفحه مخزن Docker Hub شما وجود دارد.
اكنون مي توانيد با استفاده از docker pull sammy / ubuntu-nodejs ، تصوير را به دستگاه جديد وارد كنيد و از آن براي اجراي يك كانتينر جديد استفاده كنيد.
نتيجه
در اين آموزش Docker را نصب كرده ايد ، با تصاوير و كانتينرها كار كرده ايد و يك تصوير اصلاح شده را به Docker Hub وارد كرده ايد.