مشاور زیرساخت. موسس سایت آموزشی DockerMe.ir
توضیح دستورات داکر – این قسمت docker history, login, logout, logs, port, diff
دستور docker history:
این دستور تاریخچه ایمیج را در اختیار ما قرار میدهد.
این دستور دارای آپشنهای زیر میباشد که در ادامه توضیح داده میشود.
آپشن q-: این آپشن تنها id ایمیجهای واقع در تاریخچه را نمایش میدهد.
آپشن H-: این آپشن خروجی را متناسب با انسان نمایش میدهد که به صورت پیشفرض فعال است. در خروجی حجم ایمیجها را به صورت صحیح و با MB یا GB نمایش میدهد در صورتی که این آپشن غیر فعال باشد تمام موارد بر اساس بایت نمایش میدهد.
آپشن no-trune: دیگر برخی از موارد را مختصر نمیکند و کامل نمایش میدهد.
آپشن format: با این آپشن شما میتوانید خروجی را طبق نظر خودتون تنظیم کنید. مواردی که میتوانید در خروجی آنها را قرار دهید به قرار زیر است.
برای درک بهتر این دستور به مثالهای زیر توجه کنید.
$ docker history busybox:latest
IMAGE CREATED CREATED BY SIZE COMMENT 8c811b4aec35 12 days ago /bin/sh -c #(nop) CMD ["sh"] 0B <missing> 12 days ago /bin/sh -c #(nop) ADD file:5f0439d8328ab58c0… 1.15MB
$ docker history --format "{{.ID}}: {{.Size}} +++ DockerMe.ir" busybox:latest
8c811b4aec35: 0B +++ DockerMe.ir
<missing>: 1.15MB +++ DockerMe.ir
دستور docker login:
با استفاده از این دستور میتوانید داخل ریجیستری لاگین کنید. اطلاعات مربوط به لاگین شما به صورت رمزنگاری شده در داکر کلاینت شما ذخیره میشود و تا زمانی که از آن ریجیستری logout نکنید این اطلاعات برقرار میباشد. نکته اینکه میتوانید به چندین ریجیستری به صورت همزمان نیز لاگین کنید. میتوانید از روشهای مختلفی نیز برای قرار دادن پسورد و اطلاعات مربوط به لاگین خود نیز استفاده کنید. این موضوع شامل ریجیستریهای عمومی و خصوصی میشود.
اطلاعات ورود و دسترسی شما به ریجیستری معمولا در مسیر زیر ذخیره میشود.
$HOME/.docker/config.json
آپشن p-: با استفاده از آن میتوانید پسورد را در دستور قرار بدهید. این موضوع از نظر امنیتی مشکل داشته و پسورد در history سرور باقی خواهد ماند.
آپشن password-stdin: پسورد را از روی یک فایل دریافت میکند.
آپشن u-: آپشن مربوط به حساب کاربری میباشد.
برای مشخصتر شدن موضوع به مثالهای زیر توجه کنید. دقت کنید اگر اطلاعات کاربری را در دستور وارد شده قرار ندهید بعد از اعمال دستور این موارد که شامل user و pass میباشد را از شما سوال میکند.
$ docker login https://docker.dockerme.ir
$ docker login --username admin https://docker.dockerme.ir
$ cat test.txt | docker login --username admin --password-stdin https://docker.dockerme.ir
cat /home/ahmad/.docker/config.json
{
"auths": {
"docker.dockerme.ir": {
"auth": "YWRtaW46WWFAQWJiYXM="
}
}
}
اگر لینک ریجیستری را نیز وارد نکنید به صورت پیشفرض به https://hub.docker.com وصل خواهد شد که یک ریجیستری عمومی است و برای لاگین به آن و قرار دادن ایمیجهای خود در آن از طریق این لینک باید ثبتنام انجام دهید.
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
$ cat test.txt | docker login --username ahmadrafiee --password-stdin
Login Succeeded
$ cat /home/ahmad/.docker/config.json
{
"auths": {
"docker.dockerme.ir": {
"auth": "YWRtaW46WWFAQWJiYXM="
},
"https://index.docker.io/v1/": {
"auth": "YWhtYWRyYWZpZWU6WWFAQWJiYXM="
}
}
همانطور که ملاحضه میکنید در حال حاضر در دو تا ریجیستری لاگین هستم و اطلاعات ورود هر دو تا ریجیستری موجود میباشد.
دستور docker logout:
با این دستور از ریجیستری که لاگین کرده بودیم قبلا خارج میشود و اطلاعات ارتباط با آن برداشته میشود.
این دستور آپشن دیگری ندارد. اگر بدون لینک ریجیستری دستور را وارد کنید به صورت پیشفرض اگر اطلاعات مربوط به لاگین در ریجیستری داکر وجود داشته باشد آن را پاک میکند. به مثال زیر توجه کنید در ابتدا اطلاعات مربوط به لاگین وجود دارد و بعد از logout اون اطلاعات برداشته میشود.
$ cat /home/ahmad/.docker/config.json
{
"auths":
{
"docker.dockerme.ir": {
"auth": "YWRtaW46WWFAQWJiYXM=" },
"https://index.docker.io/v1/": {
"auth": "YWhtYWRyYWZpZWU6WWFAQWJiYXM=" }
}
}
$ docker logout
Removing login credentials for https://index.docker.io/v1/
cat /home/ahmad/.docker/config.json
{
"auths":
{
"docker.dockerme.ir": {
"auth": "YWRtaW46WWFAQWJiYXM=" }
}
}
دستور docker logs:
با استفاده از این دستور لاگ کانتینر را مشاهده میکنید. به صورت پیش فرض تمام لاگ کانتیری که در مقابل دستور باشد را به شما نمایش میدهد.
نکتهی مهم اینکه اگر لاگ درایور سرویس داکر خود را تغییر داده باشید ممکن است این دستور برای شما کار نکند. این دستور تنها در زمان استفاده از لاگ درایور json-file یا journald کار میکند. در این لینک در مورد درایور لاگ داکر بیشتر صحبت شده است.
آپشن details: موارد اضافهتری را در لاگ به شما نمایش میدهد.
آپشن -f: با استفاده از این آپشن لاگ کانتینر را فالو میکند و همواره آن را نمایش میدهد تا زمانی که شما خودتون از این دستور خارج شوید.
آپشن since: با این آپشن میتوان زمان تعیین کرد به این صورت که از این زمان به بعد لاگ را در اختیار من قرار بده.
آپشن tail: این دستور تعداد خطهای آخر را مشخص میکند مثلا ۱۰۰ خط آخر را نمایش بده یا اینکه ۱۰ خط آخر لاگ را به من نمایش بده. حال ترکیب این آپشن با آپشن f- همواره ۱۰ خط آخر لاگ را به شما نمایش میدهد. اگر از این آپشن استفاده نکنید به صورت پیشفرض تمام خطهای لاگ را به شما نمایش میدهد.
آپشن -t: زمان اتفاقات را نیز در لاگ به شما نمایش میدهد.
آپشن until: با این آپشن میتوان زمان تعیین کرد به این صورت که تا این زمان لاگ را به من نشان بده.
نکتهی مهم اینکه این دستور بسیار مهم میباشد و به شدت به فرآیند رفع مشکل کمک میکند. برخی از ترکیبهای خوب این دستور در ادامه آورده شده است.
$ docker logs -f my-container
$ docker logs -f --tail 100 my-container
$ docker logs -f --tail 100 -t my-container
دستور docker port:
لیست پورتهای که از سرور به کانتینر مپ شده است را نمایش میدهد. هیچگونه آپشنی هم ندارد.
به مثالهای زیر توجه کنید.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b650456536c7 busybox:latest top 54 minutes ago Up 54 minutes 0.0.0.0:1234->9876/tcp, 0.0.0.0:4321->7890/tcp test
$ docker port test
7890/tcp -> 0.0.0.0:4321
9876/tcp -> 0.0.0.0:1234
$ docker port test 7890/tcp
0.0.0.0:4321
$ docker port test 7890/udp
2014/06/24 11:53:36 Error: No public port '7890/udp' published for test
$ docker port test 7890
0.0.0.0:4321
دستور docker diff:
توضیحی از تغییرات داخل فایل یا دایرکتوریهای داخل کانتینر در اختیار ما قرار میدهد. این دستور نیز هیچگونه آپشنی ندارد.
برای نمایش تغییرات از سمبلیکهایی استفاده میکند که در ادامه توضیح داده میشود.
سمبل A: یعنی اینکه یک فایل یا دایرکتوری اضافه شده است.
سمبل D: یعنی اینکه فایل یا دایرکتوری پاک شده است.
سمبل C: یعنی اینکه فایل یا دایرکتوری تغییر کرده است.
به صورت زیر از این دستور استفاده میشود.
$ docker diff my-container
C /tmp
D /tmp/hsperfdata_jenkins
A /tmp/hsperfdata_jenkins/8
D /tmp/jetty-0.0.0.0-8080-war-_-any-4465523861556992604.dir
A /tmp/jffi8867713240318490067.tmp
D /tmp/jna--1712433994
A /tmp/winstone1616795870189931273.jar
مطلبی دیگر از این انتشارات
راکت چت جایگزین خوبی برای اسلک
مطلبی دیگر از این انتشارات
۲۴.توضیح دستورات داکر – این قسمت docker stats, update
مطلبی دیگر از این انتشارات
همهی آن چیزی که باید در مورد داکرفایل بدانید.