۳۴. دستورات مدیریتی داکر - docker secret

docker secretاین محتوا تنها در زمانی که از داکر به صورت swarm mode استفاده شود کاربرد دارد. آن هم برای زمانی که بخواهیم دیتای حساسی رو در شبکه منتقل کنیم که از جمله‌ی آنها می‌‌توان به موارد زیر اشاره کرد:Usernames and passwordsTLS certificates and keysSSH keysGeneric strings or binary content (up to 500 kb in size)Other important data such as the name of a database or internal serverبه صورت کلی به جای اینکه دیتای مهم و حساس رو در داخل ایمیج یا سورس کد به صورت غیر رمزنگاری شده نگهداری کنند از secret استفاده می‌کنند تا امنیت لازم روی دیتا رعایت شود.گاهی هم برای احراز هویت از docker secret استفاده می‌شود که بتوان با استفاده از آن محیط‌های Deployment را مدیریت و کنترل کرد.البته می‌توان با استفاده از docker secret موارد دیگه همانند کانفیگ‌ها را نیز مدیریت کرد. چطوری کار می‌کند؟به این صورت عمل می‌کند که در تمامی نودهای Swarm سرویس داکر Secret خود را در بستر کاملا TLS به سمت نود Swarm Manager ارسال می‌کند و این Secretها به صورت غیر رمزنگاری شده در تمامی Managerهای Swarm قرار دارند و همواره این اطلاعات بین آنها sync می‌باشد. بعد از اجرای کانتینر درون آن Secret به صورت decrypted شده در مسیر زیر Mount می‌شود.Linux Container: /run/secrets/<secret_name>Windows Container: C:\ProgramData\Docker\secretsنودها تنها دسترسی به encrypted secrets ها دارند در صورتی که Manager نود باشد یا اون سرویس را اجرا کرده باشد به خود Secret دسترسی دارد. زمانی که یک کانتینر در حال کار متوقف می‌شود مجدد Secret رمزنگاری شده و مواردی که در رم سرور Mount شده بود پاک می‌شود.به زبان ساده‌تر تنها در زمانی secretها به صورت غیر رمزنگاری در دسترس هستند که توسط خود swarm سرویس‌ آنها راه‌اندازی شده باشد. در صورتی که کانتینر متوقف شود تمام سکرت‌ها مجدد رمزگذاری خواهند شد.دستور docker secret:با استفاده از دستور docker secret می‌توان secretها را مدیریت کرد.docker secret --helpهمانطور که مشاهده می‌کنید با استفاده از این دستور و آپشن‌های آن می‌توانید secret ایجاد و یا اینکه آن‌ها را پاک کنید. در ادامه با توضیح یک مثال نحوه‌ی استفاده از secret و دستور docker secret توضیح داده می‌شود.با استفاده از دستور زیر می‌توانید یک secret با نام my_secret_data ایجاد کنید. printf &quotThis is a secret&quot | docker secret create my_secret_data -با استفاده از دستور زیر یک سرویس با نام redis ایجاد می‌کنیم که از این secret استفاده می‌کند. docker service create --name redis --secret my_secret_data redis:alpineبعد از راه‌اندازی کانتینر redis حتما اطمینان پیدا کنید که بدون مشکل راه‌اندازی شده باشد. دقت کنید secret ایجاد شده که در کانتینر redis در مسیر /run/secrets قرار دارد. با استفاده از دستورات زیر می‌توانید نام secret و سپس محتوای آن را مشاهده کنید.docker ps --filter name=redis -q 5cb1c2348a59docker container exec $(docker ps --filter name=redis -q) ls -l /run/secrets -r--r--r-- 1 root root 17 Dec 13 22:48 my_secret_datadocker container exec $(docker ps --filter name=redis -q) cat /run/secrets/my_secret_data This is a secretدر صورتی که الان از این کانتینر یک ایمیج تهیه کنید و آن را commit کنید و از ایمیج جدید هم یک کانتینر ایجاد کنید داخل کانتینر جدید دیگر secret وجود ندارد و secret داخل ایمیج نیست. این نکته‌ بسیار اهمیت دارد. تا زمانی که سرویس redis برقرار باشد امکان اینکه این secret را پاک کنید میسر نمی‌باشد. می‌توانید با دستور زیر secret مربوط به هر سرویس‌ در حال کار را پاک کنید.docker service update --secret-rm my_secret_data redisحال اگر بعد از این دستور داخل دایرکتوری مد نظر را بگردید دیگه secret قبلی رو مشاهده نخواهید کرد.docker container exec -it $(docker ps --filter name=redis -q) cat /run/secrets/my_secret_data cat: can't open '/run/secrets/my_secret_data': No such file or directoryبا استفاده از دستور زیر نیز می‌توانید secret ایجاد شده را پاک کنید. docker secret rm my_secret_dataطی یک مثال ساده نحوه‌ی استفاده از secret رو بررسی کردیم. بعدا در زمان توضیح swarm و استفاده از آن بیشتر با موضوع secret آشنا خواهیم شد.منبعآموزش داکر و پلتفرم به زبان فارسی و رایگان https://dockerme.ir