در این راهنما، به شما نشان میدهیم چگونه Docker را روی Ubuntu 20.04 نصب کنید. Docker ابزاری قدرتمند برای مدیریت اپلیکیشنها در کانتینرها است. کانتینرها فرآیندهای ایزولهشدهای هستند که اپلیکیشنهای شما را اجرا میکنند. آنها شبیه ماشینهای مجازی هستند، اما سبکتر، قابلحملتر و وابسته به سیستمعامل میزبان. اگر به دنبال نصب Docker روی Ubuntu 20.04 هستید، این مقاله گامبهگام شما را راهنمایی میکند.
گام 1: نصب Docker روی Ubuntu 20.04
بسته نصب Docker در مخزن رسمی Ubuntu ممکن است قدیمی باشد. برای دریافت نسخه جدید، Docker را از مخزن رسمی Docker نصب میکنیم. ابتدا منبع بسته جدید اضافه میکنیم، کلید GPG Docker را برای تأیید دانلودها اضافه میکنیم و سپس بسته را نصب میکنیم.
ابتدا لیست بستههای موجود را بهروزرسانی کنید:
sudo apt update
سپس بستههای پیشنیاز را برای استفاده apt از HTTPS نصب کنید:
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 از مخزن جدید بهروزرسانی میکند.
اطمینان حاصل کنید که از مخزن Docker نصب میکنید نه مخزن پیشفرض Ubuntu:
apt-cache policy docker-ce
خروجی شبیه این خواهد بود (نسخه Docker ممکن است متفاوت باشد):
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 برای Ubuntu (focal) است.
در نهایت، Docker را نصب کنید:
sudo apt install docker-ce
Docker حالا نصب شده، daemon شروع شده و فرآیند برای شروع در بوت فعال است. وضعیت آن را بررسی کنید:
sudo systemctl status docker
خروجی شبیه این خواهد بود و نشان میدهد سرویس فعال و در حال اجرا است:
● 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 ایجاد میشود. اگر بدون sudo یا بدون عضویت در گروه docker فرمان docker را اجرا کنید، خروجی شبیه این خواهد بود:
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 اضافه شده:
groups
خروجی شبیه این خواهد بود:
sammy sudo docker
اگر نیاز به اضافه کردن کاربر دیگری به گروه docker دارید که وارد نشدهاید، نام کاربری را مشخص کنید:
sudo usermod -aG docker username
بقیه مقاله فرض میکند که فرمان docker را به عنوان کاربر گروه docker اجرا میکنید. اگر نمیخواهید، فرمانها را با sudo پیشوند کنید.
گام 3: استفاده از فرمان Docker
استفاده از docker شامل گذراندن زنجیرهای از گزینهها و فرمانها به همراه آرگومانها است. سینتکس به این شکل است:
docker [option] [command] [arguments]
برای دیدن همه زیرفرمانهای موجود، تایپ کنید:
docker
از Docker 19، لیست کامل زیرفرمانها شامل این موارد است:
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، استفاده کنید:
docker info
حالا بیایید با تصاویر Docker کار کنیم.
گام 4: کار با تصاویر Docker
کانتینرهای Docker از تصاویر Docker ساخته میشوند. به طور پیشفرض، Docker تصاویر را از Docker Hub میکشد، که یک رجیستری Docker توسط شرکت Docker مدیریت میشود. هر کسی میتواند تصاویر Docker خود را در Docker Hub میزبانی کند، بنابراین بیشتر اپلیکیشنها و توزیعهای لینوکس مورد نیاز شما آنجا هستند.
برای بررسی دسترسی و دانلود تصاویر از Docker Hub، تایپ کنید:
docker run hello-world
خروجی نشان میدهد Docker درست کار میکند:
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 0e03bdcc26d7: Pull complete Digest: sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. ...
Docker تصویر hello-world را محلی پیدا نکرد، بنابراین آن را از Docker Hub دانلود کرد. پس از دانلود، کانتینری از تصویر ایجاد کرد و اپلیکیشن داخل آن اجرا شد و پیام را نمایش داد.
برای جستجوی تصاویر در Docker Hub، از زیرفرمان search استفاده کنید. مثلاً برای جستجوی تصویر Ubuntu:
docker search ubuntu
خروجی شبیه این خواهد بود:
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 دانلود کنید.
تصویر رسمی ubuntu را دانلود کنید:
docker pull ubuntu
خروجی شبیه این است:
Using default tag: latest latest: Pulling from library/ubuntu d51af753c3d3: Pull complete fc878cd0a91c: Pull complete 6154df8ff988: Pull complete fee5db0ff82f: Pull complete Digest: sha256:747d2dbbaaee995098c9792d99bd333c6783ce56150d1b11e333bbceed5c54d7 Status: Downloaded newer image for ubuntu:latest docker.io/library/ubuntu:latest
پس از دانلود تصویر، میتوانید کانتینری با زیرفرمان run اجرا کنید. اگر تصویر دانلود نشده باشد، کلاینت Docker ابتدا آن را دانلود میکند.
برای دیدن تصاویر دانلودشده:
docker images
خروجی شبیه این است:
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 یا رجیستریهای دیگر آپلود (pushed) میشود.
گام 5: اجرای یک کانتینر Docker
کانتینر hello-world که قبلاً اجرا کردید، کانتینری است که پس از نمایش پیام تست خارج میشود. کانتینرها میتوانند مفیدتر باشند و تعاملی باشند. آنها شبیه ماشینهای مجازی هستند، اما منابع کمتری مصرف میکنند.
مثلاً، کانتینری با آخرین تصویر Ubuntu اجرا کنید. ترکیب سوئیچهای -i و -t دسترسی شل تعاملی به کانتینر میدهد:
docker run -it ubuntu
پرامپت فرمان شما تغییر میکند و نشان میدهد داخل کانتینر کار میکنید:
root@d9b100f2f636:/#
شناسه کانتینر در پرامپت را توجه کنید (مثلاً d9b100f2f636). بعداً برای شناسایی کانتینر نیاز دارید.
حالا هر فرمانی داخل کانتینر اجرا کنید. مثلاً پایگاه داده بستهها را بهروزرسانی کنید. نیازی به sudo نیست، زیرا به عنوان root داخل کانتینر هستید:
apt update
سپس اپلیکیشنی نصب کنید، مثلاً Node.js:
apt install nodejs
این Node.js را از مخزن رسمی Ubuntu نصب میکند. پس از نصب، تأیید کنید:
node -v
خروجی نسخه را نشان میدهد:
v10.19.0
تغییرات داخل کانتینر فقط به آن کانتینر اعمال میشود. برای خروج، exit تایپ کنید.
گام 6: مدیریت کانتینرهای Docker
پس از مدتی استفاده از Docker، کانتینرهای فعال و غیرفعال زیادی خواهید داشت. برای دیدن کانتینرهای فعال:
docker ps
خروجی شبیه این است:
CONTAINER ID IMAGE COMMAND CREATED
در این آموزش، دو کانتینر شروع کردید: یکی از hello-world و یکی از ubuntu. هر دو متوقف شدهاند اما هنوز وجود دارند.
برای دیدن همه کانتینرها (فعال و غیرفعال):
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
برای دیدن آخرین کانتینر ایجادشده:
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 با ID یا نام استفاده کنید. کانتینر مبتنی بر Ubuntu با ID 1c08a7a0d0e4 را شروع کنید:
docker start 1c08a7a0d0e4
کانتینر شروع میشود. وضعیت را با docker ps ببینید:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1c08a7a0d0e4 ubuntu "/bin/bash" 3 minutes ago Up 5 seconds quizzical_mcnulty
برای متوقف کردن کانتینر در حال اجرا، از docker stop با ID یا نام استفاده کنید. این بار از نام quizzical_mcnulty:
docker stop quizzical_mcnulty
وقتی کانتینری نیاز ندارید، آن را با docker rm حذف کنید. ID یا نام کانتینر مرتبط با hello-world را پیدا کنید و حذف کنید:
docker rm youthful_curie
میتوانید کانتینر جدیدی شروع کنید و با –name نام دهید. همچنین با –rm کانتینری ایجاد کنید که هنگام توقف حذف شود. برای اطلاعات بیشتر، docker run help را ببینید.
کانتینرها را میتوان به تصاویر تبدیل کرد. حالا چگونگی آن را ببینیم.
گام 7: کامیت تغییرات کانتینر به تصویر Docker
وقتی تصویری Docker شروع میکنید، میتوانید فایلها را ایجاد، تغییر یا حذف کنید مثل ماشین مجازی. تغییرات فقط به آن کانتینر اعمال میشود. میتوانید آن را شروع و متوقف کنید، اما با docker rm تغییرات از دست میروند.
این بخش نشان میدهد چگونه وضعیت کانتینر را به عنوان تصویر جدید Docker ذخیره کنید.
پس از نصب Node.js داخل کانتینر Ubuntu، کانتینری متفاوت از تصویر اولیه دارید. ممکن است بخواهید این کانتینر Node.js را برای تصاویر جدید استفاده کنید.
تغییرات را با فرمان زیر به تصویر جدید کامیت کنید:
docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name
سوئیچ -m برای پیام کامیت است و -a برای نویسنده. container_id همان است که قبلاً یادداشت کردید. repository معمولاً نام کاربری Docker Hub شماست.
مثلاً برای کاربر sammy با ID d9b100f2f636:
docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs
وقتی تصویری کامیت میکنید، محلی ذخیره میشود. بعداً یاد میگیرید چگونه آن را به رجیستری Docker پوش کنید.
لیست تصاویر را دوباره ببینید:
docker images
خروجی شبیه این است:
REPOSITORY TAG IMAGE ID CREATED SIZE sammy/ubuntu-nodejs latest 7c1f35226ca6 7 seconds ago 179MB ...
در این مثال، ubuntu-nodejs تصویر جدید است که از ubuntu موجود مشتق شده. تفاوت اندازه تغییرات را نشان میدهد. حالا وقتی نیاز به اجرای کانتینر Ubuntu با Node.js دارید، از تصویر جدید استفاده کنید.
میتوانید تصاویر را از Dockerfile بسازید که نصب نرمافزار را خودکار میکند، اما خارج از محدوده این آموزش است.
حالا تصویر جدید را به اشتراک بگذاریم.
گام 8: پوش کردن تصاویر Docker به رجیستری
پس از ایجاد تصویر جدید، آن را با دوستان یا جهان در Docker Hub یا رجیستری دیگر به اشتراک بگذارید. برای پوش، حساب در آنجا نیاز دارید.
ابتدا به Docker Hub لاگین کنید:
docker login -u docker-registry-username
رمز عبور Docker Hub را وارد کنید. اگر درست باشد، احراز هویت موفق است.
توجه: اگر نام کاربری رجیستری متفاوت از نام محلی تصویر باشد، تصویر را با نام کاربری رجیستری تگ کنید. مثلاً:
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
فرآیند ممکن است زمان ببرد، اما خروجی شبیه این است:
The push refers to a repository [docker.io/sammy/ubuntu-nodejs] e3fbbfb44187: Pushed 5f70bf18a086: Pushed a3b5c80a4eba: Pushed 7f18b442972b: Pushed 3ce512daaf78: Pushed 7aae4540b42d: Pushed ...
پس از پوش، تصویر در داشبورد حساب شما لیست میشود.
اگر پوش با خطا مواجه شد، احتمالاً لاگین نکردهاید:
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 Compose
در حالی که Docker برای ساخت و اجرای کانتینرها عالی است، مدیریت اپلیکیشنهای چندکانتینری با Docker تنها میتواند خستهکننده باشد. اینجا Docker Compose وارد میشود.
Docker Compose ابزاری برای تعریف و اجرای اپلیکیشنهای چندکانتینری Docker با فایل YAML است. به جای اجرای دستی کانتینرهای جداگانه برای وبسرور، دیتابیس و لایه کش، همه را در فایل docker-compose.yml تعریف کنید و با این اجرا کنید:
docker-compose up
| ویژگی | Docker CLI | Docker Compose |
|---|---|---|
| کاربرد | عملیات تککانتینری | ارکستراسیون چندکانتینری |
| پیکربندی | فرمانهای CLI | فایل پیکربندی YAML |
| مدیریت وابستگی | دستی | خودکار سرویسهای لینکشده |
| بهترین مورد استفاده | تست کانتینرهای ایزوله | توسعه محلی و استیجینگ |
عیبیابی مشکلات رایج نصب Docker
مشکل: docker: command not found
راهحل: Docker CLI در $PATH شما نیست. Docker را دوباره نصب کنید یا مطمئن شوید /usr/bin شامل است.
sudo apt install docker-ce docker-ce-cli containerd.io
مشکل: Cannot connect to the Docker daemon
راهحل: Docker در حال اجرا نیست یا کاربر شما در گروه docker نیست.
sudo systemctl start docker sudo usermod -aG docker $USER
سپس خارج و دوباره وارد شوید.
مشکل: خطای کلید GPG یا مخزن
راهحل: اگر کلیدسرور یا کلید GPG Docker تغییر کرده، به مستندات رسمی Docker مراجعه کنید.
Docker Desktop روی Ubuntu (بتا)
Docker Desktop حالا در بتا برای توزیعهای لینوکس مثل Ubuntu در دسترس است. GUI، Docker Engine باندلشده و پشتیبانی Kubernetes فراهم میکند.
برای نصب Docker Desktop روی Ubuntu:
sudo apt install ./docker-desktop--.deb
به مستندات Docker Desktop for Linux برای پیشنیازها و لینکهای دانلود مراجعه کنید.
توجه: Docker Desktop برای محیطهای توسعه مناسب است. برای نصبهای سمت سرور، از Docker CE استفاده کنید.
نصب Docker با استفاده از Dockerfile
برای محیطهای خودکار، Docker را با Dockerfile نصب کنید. مثالی:
FROM ubuntu:20.04
RUN apt-get update && \
apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" && \
apt-get update && \
apt-get install -y docker-ce docker-ce-cli containerd.io
چگونه Docker را روی Ubuntu حذف کنیم
برای حذف Docker از سیستم:
sudo apt purge docker-ce docker-ce-cli containerd.io sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd
سؤالات متداول در مورد نصب Docker روی Ubuntu 20.04
1. بهترین راه نصب Docker روی Ubuntu چیست؟
بهترین و قابلاعتمادترین راه، استفاده از مخزن رسمی Docker است. این روش نسخه پایدار جدید را با پچهای امنیتی مستقیم از Docker تضمین میکند. ابتدا شاخص بسته را بهروزرسانی کنید و پیشنیازها مثل apt-transport-https، ca-certificates، curl، gnupg و lsb-release را نصب کنید. سپس کلید GPG رسمی Docker را اضافه کنید و مخزن پایدار را تنظیم کنید. پس از بهروزرسانی دوباره شاخص، با sudo apt install docker-ce docker-ce-cli containerd.io نصب کنید. این روش بهتر از مخازن پیشفرض Ubuntu است که ممکن است قدیمی باشند.
2. آیا برای اجرای فرمانهای Docker به sudo نیاز دارم؟
به طور پیشفرض، بله، اما میتوانید با اضافه کردن کاربر به گروه docker از sudo اجتناب کنید: sudo usermod -aG docker $USER. سپس خارج و وارد شوید. این دسترسی بدون root میدهد، اما فقط کاربران مورد اعتماد را اضافه کنید زیرا دسترسی root-level به daemon Docker میدهد.
3. چگونه بررسی کنم Docker درست کار میکند؟
با docker info اطلاعات دقیق ببینید. یا docker run hello-world را اجرا کنید تا تصویر تست دانلود و اجرا شود. اگر درست باشد، پیام موفقیت میبینید. وضعیت سرویس را با sudo systemctl status docker چک کنید.
4. آیا میتوانم نسخه خاصی از Docker نصب کنم؟
بله، نسخههای موجود را با apt-cache madison docker-ce لیست کنید. سپس با sudo apt install docker-ce= نصب کنید (مثلاً 5:20.10.7~3-0~ubuntu-focal).
5. تفاوت Docker و Docker Compose چیست؟
Docker برای کانتینرهای تک است، اما Docker Compose برای اپلیکیشنهای چندکانتینری با فایل YAML است. Compose وابستگیها را خودکار مدیریت میکند و برای توسعه پیچیده مناسب است.
6. چگونه Docker را کامل حذف کنم؟
با sudo apt purge docker-ce docker-ce-cli containerd.io بستهها را حذف کنید. سپس دایرکتوریهای داده را با sudo rm -rf /var/lib/docker و sudo rm -rf /var/lib/containerd پاک کنید. گروه docker را هم حذف کنید اگر لازم است.
7. آیا Docker Desktop برای Ubuntu در دسترس است و باید استفاده کنم؟
بله، در بتا. GUI و Kubernetes را فراهم میکند. با sudo apt install ./docker-desktop–.deb نصب کنید. برای توسعه خوب است، اما برای سرورها از Docker CE استفاده کنید.
نتیجهگیری
در این راهنما جامع، Docker را روی Ubuntu 20.04 نصب کردید، اصول مدیریت کانتینرها را یاد گرفتید و با تصاویر و کانتینرها کار کردید. همچنین تصویری تغییرشده را به Docker Hub پوش کردید. این مهارتها پایهای محکم برای توسعه مبتنی بر کانتینر است. برای پیشرفت، آموزشهای دیگر Docker در جامعه DigitalOcean را کاوش کنید، مثل ارکستراسیون، شبکه و بهترین Practices امنیتی.
### تگهای آماده برای SEO (برای بخش head یا افزونه Yoast):
این تگها را در بخش متا یا تنظیمات Yoast وارد کنید تا SEO بهینه شود: