docker-commands

دستور docker history:

این دستور تاریخچه‌ ایمیج را در اختیار ما قرار می‌دهد.

docker history --help

این دستور دارای آپشن‌های زیر می‌باشد که در ادامه توضیح داده می‌شود.

آپشن q-: این آپشن تنها id ایمیج‌های واقع در تاریخچه را نمایش می‌دهد.

آپشن H-: این آپشن خروجی را متناسب با انسان نمایش می‌دهد که به صورت پیش‌فرض فعال است. در خروجی حجم ایمیج‌ها را به صورت صحیح و با MB یا GB نمایش می‌دهد در صورتی که این آپشن غیر فعال باشد تمام موارد بر اساس بایت نمایش می‌دهد.

آپشن no-trune: دیگر برخی از موارد را مختصر نمی‌کند و کامل نمایش می‌دهد.

آپشن format: با این آپشن شما می‌توانید خروجی را طبق نظر خودتون تنظیم کنید. مواردی که می‌توانید در خروجی آنها را قرار دهید به قرار زیر است.

docker history --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:

با این دستور از ریجیستری که لاگین کرده بودیم قبلا خارج می‌شود و اطلاعات ارتباط با آن برداشته می‌شود.

docker logout --help

این دستور آپشن دیگری ندارد. اگر بدون لینک ریجیستری دستور را وارد کنید به صورت پیشفرض اگر اطلاعات مربوط به لاگین در ریجیستری داکر وجود داشته باشد آن را پاک می‌کند. به مثال زیر توجه کنید در ابتدا اطلاعات مربوط به لاگین وجود دارد و بعد از 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:

با استفاده از این دستور لاگ کانتینر را مشاهده می‌کنید. به صورت پیش فرض تمام لاگ‌ کانتیری که در مقابل دستور باشد را به شما نمایش می‌دهد.

docker logs --help

نکته‌ی مهم اینکه اگر لاگ درایور سرویس داکر خود را تغییر داده باشید ممکن است این دستور برای شما کار نکند. این دستور تنها در زمان استفاده از لاگ درایور 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 port --help

به مثال‌های زیر توجه کنید.

$ 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:

توضیحی از تغییرات داخل فایل یا دایرکتوری‌های داخل کانتینر در اختیار ما قرار می‌دهد. این دستور نیز هیچ‌گونه آپشنی ندارد.

docker diff --help

برای نمایش تغییرات از سمبلیک‌هایی استفاده می‌کند که در ادامه توضیح داده می‌شود.

سمبل 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