Docker چیست؟
Docker یک پلتفرم متنباز برای ساخت، بستهبندی و اجرای برنامهها در محیطی ایزوله به نام Container است. با استفاده از Docker، برنامه به همراه تمام وابستگیها و تنظیمات موردنیاز خود در یک بسته استاندارد قرار میگیرد و میتواند بدون مشکل در محیطهای مختلف اجرا شود. این ویژگی باعث میشود فرآیند توسعه، تست و استقرار نرمافزار سریعتر، سادهتر و قابلاعتمادتر باشد.
معماری Docker ؟
- Docker Engine
- Docker Daemon
- Docker Client
- Docker Registry (Docker Hub)
- Image
- Container
در ادامه مقاله هر یک از این دو مفهوم Docker Image و Docker Container را بهصورت کامل و با مثالهای عملی بررسی خواهیم کرد.
DockerFile
یک فایل متنی شامل دستورالعملهایی است که مشخص میکند یک محیط چگونه ساخته شود. در Dockerfile تعیین میکنیم از چه سیستمعاملی استفاده شود، چه نرمافزارها و وابستگیهایی نصب شوند، چه فایلهایی اضافه شوند و برنامه چگونه اجرا شود.
Docker Image
نتیجه ساخت Dockerfile است. یک Image شامل تمام چیزهای لازم برای اجرای یک برنامه است؛ مثل سیستمعامل پایه، کتابخانهها، وابستگیها، فایلهای برنامه و تنظیمات موردنیاز
Docker container
یک نمونه در حال اجرای Docker Image است. وقتی یک Image را اجرا میکنیم، Docker از روی آن یک یا چند Container میسازد که برنامه داخل آن اجرا میشود.
برای درک بهتر رابطه Dockerfile، Docker Image و Docker Container میتوانیم از مثال آشپزی استفاده کنیم:
- Dockerfile مثل دستور پخت غذا (Recipe) است؛ میگوید چه مواد اولیهای لازم است و مراحل آمادهسازی چگونه باشد.
- Docker Image مثل غذای آمادهشده طبق دستور پخت است؛ تمام اجزای لازم را دارد.
- Docker Container مثل ظرف غذا است که آن غذا داخل آن قرار گرفته و آماده استفاده است.

Image vs container
ویژگی | Docker Image | Docker Container |
| تعریف | یک قالب آماده شامل فایلها، کتابخانهها، وابستگیها و تنظیمات موردنیاز برنامه است. | یک نمونه در حال اجرا از یک Docker Image است که برنامه داخل آن اجرا میشود. |
وضعیت | ثابت و غیرقابل تغییر (Immutable) است | قابل اجرا، متوقف شدن و مدیریت است. |
کاربرد | برای ساخت و ایجاد Container استفاده میشود | برای اجرای واقعی برنامه استفاده میشود. |
نحوه ایجاد | با استفاده از Dockerfile ساخته میشود یا از Registry مانند Docker Hub دریافت میشود | با استفاده از دستور docker run از روی Image ساخته میشود. |
تعداد | یک Image میتواند چندین Container ایجاد کن | هر Container یک نمونه مستقل از یک Image است. |
ذخیرهسازی | شامل تمام فایلها و وابستگیهای موردنیاز برنامه است. | شامل لایه تغییرات و محیط اجرای برنامه است. |
اجرای یک Container با استفاده از Docker Image
برای درک بهتر نحوه کار Docker، یک Image ساده به نام hello-world را اجرا میکنیم. این Image قبلاً در Docker Hub قرار داده شده است و برای تست نصب و عملکرد Docker استفاده میشود.
- ابتدا پس از اطمینان از نصب docker, Image را از Docker Hub دریافت میکنیم:
docker pull hello-world
سپس با استفاده از دستور زیر، لیست Imageهای موجود روی سیستم را بررسی میکنیم تا مطمئن شویم Image موردنظر با موفقیت Pull شده است و همچنین ببینیم چه Imageهایی در محیط Docker ما وجود دارند:
docker images
این دستور تمام Docker Imageهای ذخیرهشده روی سیستم را نمایش میدهد. اطلاعاتی مانند نام Image، نسخه (Tag)، شناسه Image (Image ID)، زمان ایجاد و حجم آن نمایش داده میشود.
- Docker Image مربوط به hello-world با موفقیت دانلود شده و در سیستم ما وجود دارد، مرحله بعد اجرای این Image و ساخت یک Container از روی آن است.
برای اجرای Container از دستور زیر استفاده میکنیم:
docker run hello-world
با اجرای این دستور، Docker بررسی میکند که آیا Image موردنظر روی سیستم وجود دارد یا خیر. چون Image قبلاً دانلود شده است، Docker مستقیماً از همان Image استفاده کرده و یک Container جدید ایجاد و اجرا میکند.
این Container یک برنامه ساده را اجرا میکند و پیام زیر را نمایش میدهد:
Hello from Docker!
This message shows that your installation appears to be working correctly.
- اجرای یک Container تعاملی با Ubuntu Image
docker run -it ubuntu bash
بررسی Containerهایی که ساخته شدهاند:
docker ps -a
خروجی چیزی شبیه این است:
CONTAINER ID IMAGE STATUS
3c781c1feb84 ubuntu Exited (0)
0c41a9e22d89 hello-world Exited (0)
حالا میتوان Container مربوط به Ubuntu را دوباره اجرا کرد:
docker start -ai 3c781c1feb84
وقتی وارد یک Container مثل Ubuntu شدید در واقع وارد یک محیط لینوکس جدا (ایزوله) شدی. داخل این Container میتوانی تقریباً مثل یک سیستم لینوکس معمولی کار کنید و نرم افزار هایی که نیاز است را نصب کرده و اجرا کنید.