Docker Debug چیست و چه مشکلی را حل می کند؟

را docker debug
دستور جدیدی است که در Docker Desktop 4.27.0 معرفی شده است. این به شما امکان می دهد پوسته اشکال زدایی را در هر ظرف یا تصویری باز کنید. در حال حاضر در نسخه بتا است و برای مشترکین Pro در دسترس است. هدف این دستور ارائه یک اکوسیستم جامع تر از ابزارهای اشکال زدایی است و به عنوان بخش مهمی از تجربه Docker دیده می شود، نه فقط یک دستور CLI.
Docker Debug یک ابزار جدید برای سرعت بخشیدن به فرآیند اشکال زدایی است. Docker Debug ابزاری است که برای بهبود فرآیند عیب یابی در Docker طراحی شده است.
چه مشکلی را حل می کند؟
یکی از مشکلات اصلی که با آن مقابله می کند، مشکل در اشکال زدایی در حال اجرا و توقف ظروف است. Docker Debug به توسعه دهندگان اجازه می دهد تا به زمینه اجرای یک کانتینر هدف بپیوندند یا یک زمینه اجرای موقت برای کانتینرهای متوقف شده ایجاد کنند و آنها را قادر می سازد تا کانتینرها را بررسی کنند.
Docker Debug همچنین محیط پوسته را برای کاربران بهبود می بخشد و آن را کاربرپسند و کارآمد می کند. این شامل ویژگیهایی مانند اعلان توصیفی، تشخیص خودکار پوستهای است که کاربر از آن استفاده میکند، تاریخچه دائمی در طول جلسات، و مدیر بسته مبتنی بر Nix برای افزودن ابزار در صورت نیاز.
علاوه بر این، Docker Debug به مشکل خروج غیرمنتظره کانتینرها کمک می کند، که قبلاً اشکال زدایی را در آن نقطه غیرممکن می کرد.
با پرداختن به این مشکلات، Docker Debug قابلیت استفاده Docker را افزایش می دهد و عیب یابی برنامه های خود را برای کاربران آسان تر می کند.
به چند موضوع کلیدی می پردازد:
-
عدم توانایی در اشکال زدایی موثر ظروف در حال اجرا و متوقف شده. Docker Debug به کاربران اجازه می دهد تا به زمینه اجرای یک کانتینر هدف بپیوندند یا یک زمینه اجرای موقت برای کانتینرهای متوقف شده ایجاد کنند و آنها را قادر می سازد تا کانتینرها را بررسی کنند.
-
مشکلات در استفاده از دستور docker exec که فقط برای کانتینرهایی که دارای پوسته هستند کار می کند و برای کانتینرهای متوقف کار نمی کند.
-
نیاز به یک محیط پوسته کاربرپسند و کارآمد، که Docker Debug هدف آن ارائه آن است. این شامل ویژگی هایی مانند اعلان توصیفی، تشخیص خودکار پوسته ای است که کاربر از آن استفاده می کند، سابقه دائمی در طول جلسات، و مدیر بسته مبتنی بر nix برای افزودن ابزار در صورت نیاز.
-
مشکل خروج غیرمنتظره کانتینرها که اشکال زدایی را در آن نقطه غیرممکن می کند.
با پرداختن به این مشکلات، Docker Debug قابلیت استفاده Docker را افزایش می دهد و عیب یابی برنامه های خود را برای کاربران آسان تر می کند.
این برای کیست؟
Docker Debug عمدتاً توسعه دهندگان نرم افزار و متخصصان فناوری اطلاعات را هدف قرار می دهد که با برنامه های کاربردی کانتینری کار می کنند، به ویژه آنهایی که از Docker برای توسعه و استقرار استفاده می کنند. در اینجا به تفکیک افرادی که بیشترین سود را خواهند برد آورده شده است:
توسعه دهندگان:
- ساخت و استقرار برنامه های کاربردی کانتینری
- مشکلات اشکال زدایی در کانتینرهای در حال اجرا یا متوقف شده
- بررسی رفتار زمان اجرا و عیب یابی مشکلات
- سادهسازی گردش کار اشکالزدایی و سادهسازی چرخههای توسعه
متخصصان فناوری اطلاعات:
- نگهداری و مدیریت محیط های کانتینری
- تشخیص و رفع مشکلات در استقرار تولید
- تجزیه و تحلیل عملکرد کانتینر و استفاده از منابع
- درک داخلی برنامه های کاربردی کانتینری
در حالی که Docker Debug در حال حاضر در مرحله بتا و محدود به مشترکین Pro است، مزایای بالقوه آن فراتر از این گروه های اولیه است. هر کسی که با برنامههای کانتینری تعامل دارد، از جمله مدیران سیستم و مهندسان DevOps، میتواند از قابلیتهای بهبود یافته اشکالزدایی و محیط پوسته کارآمد بهره مند شود.
شروع شدن
-
مطمئن شوید که Docker Desktop 4.27.0+ را روی رایانه خود نصب کرده اید.
-
بررسی اینکه آیا
docker debug
دستور به درستی کار می کند
docker debug --help
Usage: docker debug [OPTIONS] {CONTAINER|IMAGE}
Get an enhanced shell with additional tools into any container or image
Options:
-c, --command string Evaluate the specified commands instead, passing additional positional arguments through
$argv.
--host string Daemon docker socket to connect to. E.g.: 'ssh://root@example.org',
'unix:///some/path/docker.sock'
--shell shell Select a shell. Supported: "bash", "fish", "zsh", "auto". (default auto)
--version Display version of the docker-debug plugin
- اجرای Docker Debug برای تصاویر Docker
را docker debug
دستور به عنوان آرگومان خط فرمان به نام ظرف یا تصویر نیاز دارد. اگر کانتینری در حال اجرا ندارید یا حتی اگر پوسته ای در کانتینر در حال اجرا ندارید، Docker Debug به شما کمک می کند تا به پوسته کانتینر دسترسی داشته باشید.
من فرض می کنم شما به تازگی Docker Desktop 4.27.0 را نصب کرده اید و در حال حاضر هیچ تصویر یا محفظه ای روی سیستم خود ندارید. بیایید مستقیماً به تصویر Nginx برویم.
docker debug nginx
Pulling image, this might take a moment...
0.0.22: Pulling from docker/desktop-docker-debug-service
10c7e62bcff5: Pull complete
Digest: sha256:60b0227c4304f2d703255448aba2863c9a97e21ad0233514de3c7f200904869f
Status: Downloaded newer image for docker/desktop-docker-debug-service:0.0.22
latest: Pulling from library/nginx
a5573528b1f0: Pull complete
8897d65c8417: Pull complete
fbc138d1d206: Pull complete
06f386eb9182: Pull complete
aeb2f3db77c3: Pull complete
64fb762834ec: Pull complete
e5a7e61f6ff4: Pull complete
Digest: sha256:4c0fdaa8b6341bfdeca5f18f7837462c80cff90527ee35ef185571e1c327beac
Status: Downloaded newer image for nginx:latest
▄
▄ ▄ ▄ ▀▄▀
▄ ▄ ▄ ▄ ▄▇▀ █▀▄ █▀█ █▀▀ █▄▀ █▀▀ █▀█
▀████████▀ █▄▀ █▄█ █▄▄ █ █ ██▄ █▀▄
▀█████▀ DEBUG
Builtin commands:
- install [tool1] [tool2] ... Add Nix packages from: https://search.nixos.org/packages
- uninstall [tool1] [tool2] ... Uninstall NixOS package(s).
- entrypoint Print/lint/run the entrypoint.
- builtins Show builtin commands.
Checks:
✓ distro: Debian GNU/Linux 12 (bookworm)
✓ entrypoint linter: no errors (run 'entrypoint' for details)
Note: This is a sandbox shell. All changes will not affect the actual image.
Version: 0.0.22 (BETA)
root@6c7be49d2a11 / [nginx:latest]
docker >
نقطه ورودی را بررسی کنید
docker > entrypoint
Understand how ENTRYPOINT/CMD work and if they are set correctly.
From CMD in Dockerfile:
['nginx', '-g', 'daemon off;']
From ENTRYPOINT in Dockerfile:
['/docker-entrypoint.sh']
به طور پیش فرض، هر کانتینری از این تصویر با دستور زیر شروع می شود:
/docker-entrypoint.sh nginx -g daemon off;
path: /docker-entrypoint.sh
args: nginx -g daemon off;
cwd:
PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Lint results:
PASS: '/docker-entrypoint.sh' found
PASS: no mixing of shell and exec form
PASS: no double use of shell form
Docs:
- https://docs.docker.com/engine/reference/builder/#cmd
- https://docs.docker.com/engine/reference/builder/#entrypoint
- https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact
root@6c7be49d2a11 / [nginx:latest]
مشاهده تمام دستورات داخلی
builtins
A docker debugging toolbox. 0.0.22
Builtin commands:
- install [tool1] [tool2] ... Add Nix packages from: https://search.nixos.org/packages
- uninstall [tool1] [tool2] ... Uninstall NixOS package(s).
- entrypoint Print/lint/run the entrypoint.
- builtins Show builtin commands.
Note: This is a sandbox shell. All changes will not affect the actual image.
Version: 0.0.22 (BETA)
root@6c7be49d2a11 / [nginx:latest]
نصب بسته های NIXOS
install crossplane
Tip: You can install any package available at: https://search.nixos.org/packages.
[2024-01-22T07:13:47.863328585Z][W] tcp keep alive: request failed (Not Found): 404
[2024-01-22T07:13:52.866284045Z][W] tcp keep alive: request failed (Not Found): 404
installing 'crossplane-0.5.8'
these 2 paths will be fetched (0.07 MiB download, 0.26 MiB unpacked):
/nix/store/dnyyy0nbr9ybyh6b49b450arp3d4zgnq-python3.10-crossplane-0.5.8
/nix/store/ah81s4zhrdiz24avnfj92jw440kxy7f0-python3.10-crossplane-0.5.8-dist
copying path '/nix/store/dnyyy0nbr9ybyh6b49b450arp3d4zgnq-python3.10-crossplane-0.5.8' from 'https://cache.nixos.org'...
copying path '/nix/store/ah81s4zhrdiz24avnfj92jw440kxy7f0-python3.10-crossplane-0.5.8-dist' from 'https://cache.nixos.org'...
building '/nix/store/ryyfmaqkmy80333cprzipb8v82ghl5nf-user-environment.drv'...
root@6c7be49d2a11 / [nginx:latest]
نمایش محتوای یک فایل در داخل Nginx
docker > bash -c "cat /usr/share/nginx/html/index.html"
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.
root@6c7be49d2a11 / [nginx:latest]
docker >
ابزارهای موجود در Docker Debug
تعدادی ابزار وجود دارد که در دسترس هستند. آنها ظرف شما را تغییر نمی دهند بلکه فقط با CLI ارسال می شوند.
1. ابزار vim
docker > vim
root@6c7be49d2a11 / [nginx:latest]
docker > vi hello
root@6c7be49d2a11 / [nginx:latest]
docker > ls
bin dev docker-entrypoint.sh hello lib mnt opt root sbin sys usr
boot docker-entrypoint.d etc home media nix proc run srv tmp var
root@6c7be49d2a11 / [nginx:latest]
docker >
2. ابزار Htop
2. کدام ابزار
which vim
/nix/var/nix/profiles/default/bin/vim
root@6c7be49d2a11 / [nginx:latest]
4. فوروارد کردن پورت به طور موقت
root@6c7be49d2a11 / [nginx:latest]
docker > forward --port 81:80 nginx
2024/01/22 09:54:02 [notice] 59#59: using the "epoll" event method
2024/01/22 09:54:02 [notice] 59#59: nginx/1.25.3
2024/01/22 09:54:02 [notice] 59#59: built by gcc 12.2.0 (Debian 12.2.0-14)
2024/01/22 09:54:02 [notice] 59#59: OS: Linux 6.6.12-linuxkit
2024/01/22 09:54:02 [notice] 59#59: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2024/01/22 09:54:02 [notice] 64#64: start worker processes
2024/01/22 09:54:02 [notice] 64#64: start worker process 65
2024/01/22 09:54:02 [notice] 64#64: start worker process 66
2024/01/22 09:54:02 [notice] 64#64: start worker process 67
2024/01/22 09:54:02 [notice] 64#64: start worker process 68
2024/01/22 09:54:02 [notice] 64#64: start worker process 69
2024/01/22 09:54:02 [notice] 64#64: start worker process 70
2024/01/22 09:54:02 [notice] 64#64: start worker process 71
2024/01/22 09:54:02 [notice] 64#64: start worker process 72
5. اجرای Docker Debug برای کانتینرهای در حال اجرا
docker run -d -p 6379:6379 redis
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1ce95fc8430 redis "docker-entrypoint.s…" 26 seconds ago Up 26 seconds 0.0.0.0:6379->6379/tcp eloquent_hamilton
docker debug eloquent_hamilton
▄
▄ ▄ ▄ ▀▄▀
▄ ▄ ▄ ▄ ▄▇▀ █▀▄ █▀█ █▀▀ █▄▀ █▀▀ █▀█
▀████████▀ █▄▀ █▄█ █▄▄ █ █ ██▄ █▀▄
▀█████▀ DEBUG
Builtin commands:
- install [tool1] [tool2] ... Add Nix packages from: https://search.nixos.org/packages
- uninstall [tool1] [tool2] ... Uninstall NixOS package(s).
- entrypoint Print/lint/run the entrypoint.
- builtins Show builtin commands.
Checks:
✓ distro: Debian GNU/Linux 12 (bookworm)
✓ entrypoint linter: no errors (run 'entrypoint' for details)
This is an attach shell, i.e.:
- Any changes to the container filesystem are visible to the container directly.
- The /nix directory is invisible to the actual container.
Version: 0.0.22 (BETA)
redis@a1ce95fc8430 /data [eloquent_hamilton]
docker > ps -aef
UID PID PPID C STIME TTY TIME CMD
redis 1 0 0 10:08 ? 00:00:04 redis-server *:6379
root 47 0 0 10:24 pts/0 00:00:00 /bin/sh
root 54 47 0 10:24 pts/0 00:00:00 bash
redis 57 0 0 10:29 pts/0 00:00:00 /nix/var/nix/profiles/default/bin/zsh -i
redis 69 57 0 10:29 pts/0 00:00:00 ps -aef
redis@a1ce95fc8430 /data [eloquent_hamilton]
docker >
5. نصب بسته های nmap
docker > install nmap
Tip: You can install any package available at: https://search.nixos.org/packages.
[2024-01-22T10:36:46.561468511Z][W] tcp keep alive: request failed (Not Found): 404
[2024-01-22T10:36:51.567299097Z][W] tcp keep alive: request failed (Not Found): 404
replacing old 'nmap-7.93'
installing 'nmap-7.93'
redis@a1ce95fc8430 /data [eloquent_hamilton]
برای بررسی اینکه چه پورت هایی برای scanme.nmap.org باز شده اند، دستور زیر را اجرا کنید
docker > nmap -v -A scanme.nmap.org
Starting Nmap 7.93 ( https://nmap.org ) at 2024-01-22 10:38 UTC
NSE: Loaded 155 scripts for scanning.
NSE: Script Pre-scanning.
Initiating NSE at 10:38
Completed NSE at 10:38, 0.00s elapsed
Initiating NSE at 10:38
Completed NSE at 10:38, 0.00s elapsed
Initiating NSE at 10:38
Completed NSE at 10:38, 0.00s elapsed
Initiating Ping Scan at 10:38
Scanning scanme.nmap.org (45.33.32.156) [2 ports]
Completed Ping Scan at 10:38, 0.22s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 10:38
Completed Parallel DNS resolution of 1 host. at 10:38, 0.84s elapsed
Initiating Connect Scan at 10:38
Scanning scanme.nmap.org (45.33.32.156) [1000 ports]
Discovered open port 80/tcp on 45.33.32.156
Discovered open port 22/tcp on 45.33.32.156