چگونه Docker را روی Ubuntu 20.04 نصب و استفاده کنیم

به اشتراک بگذارید

how-to-install-and-use-docker-on-ubuntu

فهرست مطالب

در این راهنما، به شما نشان می‌دهیم چگونه 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 بهینه شود: