برنامه نویسی

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

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 را افزایش می دهد و عیب یابی برنامه های خود را برای کاربران آسان تر می کند.

به چند موضوع کلیدی می پردازد:

  1. عدم توانایی در اشکال زدایی موثر ظروف در حال اجرا و متوقف شده. Docker Debug به کاربران اجازه می دهد تا به زمینه اجرای یک کانتینر هدف بپیوندند یا یک زمینه اجرای موقت برای کانتینرهای متوقف شده ایجاد کنند و آنها را قادر می سازد تا کانتینرها را بررسی کنند.

  2. مشکلات در استفاده از دستور docker exec که فقط برای کانتینرهایی که دارای پوسته هستند کار می کند و برای کانتینرهای متوقف کار نمی کند.

  3. نیاز به یک محیط پوسته کاربرپسند و کارآمد، که Docker Debug هدف آن ارائه آن است. این شامل ویژگی هایی مانند اعلان توصیفی، تشخیص خودکار پوسته ای است که کاربر از آن استفاده می کند، سابقه دائمی در طول جلسات، و مدیر بسته مبتنی بر nix برای افزودن ابزار در صورت نیاز.

  4. مشکل خروج غیرمنتظره کانتینرها که اشکال زدایی را در آن نقطه غیرممکن می کند.

با پرداختن به این مشکلات، Docker Debug قابلیت استفاده Docker را افزایش می دهد و عیب یابی برنامه های خود را برای کاربران آسان تر می کند.

این برای کیست؟

Docker Debug عمدتاً توسعه دهندگان نرم افزار و متخصصان فناوری اطلاعات را هدف قرار می دهد که با برنامه های کاربردی کانتینری کار می کنند، به ویژه آنهایی که از Docker برای توسعه و استقرار استفاده می کنند. در اینجا به تفکیک افرادی که بیشترین سود را خواهند برد آورده شده است:

توسعه دهندگان:

  • ساخت و استقرار برنامه های کاربردی کانتینری
  • مشکلات اشکال زدایی در کانتینرهای در حال اجرا یا متوقف شده
  • بررسی رفتار زمان اجرا و عیب یابی مشکلات
  • ساده‌سازی گردش کار اشکال‌زدایی و ساده‌سازی چرخه‌های توسعه

متخصصان فناوری اطلاعات:

  • نگهداری و مدیریت محیط های کانتینری
  • تشخیص و رفع مشکلات در استقرار تولید
  • تجزیه و تحلیل عملکرد کانتینر و استفاده از منابع
  • درک داخلی برنامه های کاربردی کانتینری

در حالی که Docker Debug در حال حاضر در مرحله بتا و محدود به مشترکین Pro است، مزایای بالقوه آن فراتر از این گروه های اولیه است. هر کسی که با برنامه‌های کانتینری تعامل دارد، از جمله مدیران سیستم و مهندسان DevOps، می‌تواند از قابلیت‌های بهبود یافته اشکال‌زدایی و محیط پوسته کارآمد بهره مند شود.

شروع شدن

  1. مطمئن شوید که Docker Desktop 4.27.0+ را روی رایانه خود نصب کرده اید.

  2. بررسی اینکه آیا 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
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. اجرای 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

تصویر 11

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
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا