ãããããã«ïŒ èšäºã®ç¿»èš³ãã玹ä»ããŸã
ä»æ¥ã¯ãDocker ããã¹ã ãã·ã³ã®ãã£ã¹ã¯é åãã©ã®ããã«äœ¿çšãããã«ã€ããŠèª¬æããæªäœ¿çšã®ã€ã¡ãŒãžãšã³ã³ããã®ã¹ã¯ã©ãããããã®é åã解æŸããæ¹æ³ã«ã€ããŠã説æããŸãã
ç·æ¶è²»é
Docker ã¯çŽ æŽããããã®ã§ãããããããä»ã§ã¯ãããçã人ã¯ã»ãšãã©ããªãã§ãããã ã»ãã®æ°å¹Žåããã®è£œåã«ãããããããç°å¢ãæ§ç¯ãæäŸãå®è¡ãããŸã£ããæ°ããæ¹æ³ãæäŸãããCPU ãš RAM ã®ãªãœãŒã¹ãå€§å¹ ã«ç¯çŽã§ããããã«ãªããŸããã ããã«å ã㊠(ãããæãéèŠãªããšã«ãªã人ãããŸãã)ãDocker ã®ãããã§ãéçšç°å¢ã®ã©ã€ããµã€ã¯ã«ç®¡çãé©ãã»ã©ç°¡çŽ åãããçµ±åãããããã«ãªããŸããã
ããããçŸä»£ç掻ã®ããããã¹ãŠã®æ¥œãã¿ã«ã¯ä»£åã䌎ããŸãã ã³ã³ãããŒãå®è¡ããããç¬èªã®ã€ã¡ãŒãžãããŠã³ããŒããŸãã¯äœæããããè€éãªãšã³ã·ã¹ãã ããããã€ãããããã«ã¯ãæéãæ¯æããªããã°ãªããŸããã ãããŠããšããããã£ã¹ã¯å®¹éã«å¯ŸããŠæéãæ¯æããŸãã
Docker ãå®éã«ãã·ã³äžã§ã©ãã ãã®ã¹ããŒã¹ãå ãããèããããšããªãå Žåã¯ã次ã®ã³ãã³ãã®åºåãèŠãŠäžæå¿«ã«é©ããããããããŸããã
$ docker system df
ããã¯ãããŸããŸãªã³ã³ããã¹ãã§ã® Docker ã®ãã£ã¹ã¯äœ¿çšéã瀺ããŠããŸãã
- ã€ã¡ãŒãž â ã€ã¡ãŒãž ãªããžããªããããŠã³ããŒããããã·ã¹ãã äžã«æ§ç¯ãããã€ã¡ãŒãžã®åèšãµã€ãºã
- ã³ã³ãã â å®è¡äžã®ã³ã³ããã«ãã£ãŠäœ¿çšããããã£ã¹ã¯å®¹éã®åèš (ãã¹ãŠã®ã³ã³ããã®èªã¿åã/æžã蟌ã¿å±€ã®åèšå®¹éãæå³ããŸã)ã
- ããŒã«ã« ããªã¥ãŒã â ã³ã³ããã«ããŠã³ããããããŒã«ã« ã¹ãã¬ãŒãžã®ããªã¥ãŒã ã
- ãã«ã ãã£ãã·ã¥ â ã€ã¡ãŒãžæ§ç¯ããã»ã¹ã«ãã£ãŠçæãããäžæãã¡ã€ã« (BuildKit ããŒã«ã䜿çšãDocker ããŒãžã§ã³ 18.09 以éã§å©çšå¯èœ)ã
ãã®åçŽãªè»¢éã®åŸãããªãã¯ãã£ã¹ã¯ãããŽããåãé€ãã貎éãªã®ã¬ãã€ããçãè¿ãããããšåæããŠããã§ããã (泚: ç¹ã«æ¯æãããã®ã®ã¬ãã€ãã®å®¶è³ãæã£ãŠããå Žå)ã
ã³ã³ããããšã®ãã£ã¹ã¯äœ¿çšé
ãã¹ã ãã·ã³äžã§ã³ã³ãããŒãäœæãããã³ã«ãããã€ãã®ãã¡ã€ã«ãšãã£ã¬ã¯ããªã /var/lib/docker ãã£ã¬ã¯ããªã«äœæãããŸãããã®ãã¡ã®æ¬¡ã®ç¹ã«æ³šç®ããŠãã ããã
- ãã£ã¬ã¯ã㪠/var/lib/docker/containers/container_ID â æšæºã®ãã° ãã©ã€ããŒã䜿çšããå Žåãããã«ã€ãã³ã ãã°ã JSON 圢åŒã§ä¿åãããŸãã 詳现ããããã°ãã誰ãèªã¿åã£ããåŠçãããããªããã°ã¯ããã£ã¹ã¯ããã£ã±ãã«ãªãããšããããããŸãã
- /var/lib/docker/overlay2 ãã£ã¬ã¯ããªã«ã¯ãã³ã³ãããŒã®èªã¿åã/æžã蟌ã¿ã¬ã€ã€ãŒãå«ãŸããŠããŸã (overlay2 ã¯ãã»ãšãã©ã® Linux ãã£ã¹ããªãã¥ãŒã·ã§ã³ã§åªå ããããã©ã€ããŒã§ã)ã ã³ã³ããããã®ãã¡ã€ã« ã·ã¹ãã ã«ããŒã¿ãä¿åããå ŽåãããŒã¿ã¯ãã®ãã£ã¬ã¯ããªã«é 眮ãããŸãã
ã³ã³ãããŒã®èµ·åãã€ã¡ãŒãžã®æ§ç¯ã«ãŸã£ããé¢äžããŠããªããçŽç²ãª Docker ãã€ã³ã¹ããŒã«ãããŠããã·ã¹ãã ãæ³åããŠã¿ãŸãããã ãã£ã¹ã¯å®¹éã®äœ¿çšç¶æ³ã¬ããŒãã¯æ¬¡ã®ããã«ãªããŸãã
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 0 0 0B 0B
Containers 0 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
ããšãã°ãNGINX ãªã©ã®ã³ã³ãããèµ·åããŠã¿ãŸãããã
$ docker container run --name www -d -p 8000:80 nginx:1.16
ãã£ã¹ã¯ã«äœãèµ·ããã:
- ç»å㯠126 MB ãå ããŸããããã¯ã³ã³ããå ã§èµ·åãããã®ãšåã NGINX ã§ãã
- ã³ã³ããã¯ãšãã§ããªã 2 ãã€ããæ¶è²»ããŸãã
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 1 1 126M 0B (0%)
Containers 1 1 2B 0B (0%)
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
çµè«ããèšããšã解æŸã§ããã¹ããŒã¹ã¯ãŸã ãããŸããã 2 ãã€ããšããã®ã¯ãŸã£ããç¡æå³ãªã®ã§ãNGINX ãäºæããã©ãã 100 ã¡ã¬ãã€ãã®ããŒã¿ãæžã蟌ã¿ããŸãã«ãã®ãµã€ãºã®ãã¡ã€ã« test.img ãå éšã«äœæãããšæ³åããŠã¿ãŸãããã
$ docker exec -ti www
dd if=/dev/zero of=test.img bs=1024 count=0 seek=$[1024*100]
ãã¹ãäžã®ãã£ã¹ã¯é åã®äœ¿çšç¶æ³ãããäžåºŠèª¿ã¹ãŠã¿ãŸãããã ããã§ã¯ãã³ã³ãããŒã 100 ã¡ã¬ãã€ããå æããŠããããšãããããŸãã
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 1 1 126M 0B (0%)
Containers 1 1 104.9MB 0B (0%)
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
ããªãã®å¥œå¥å¿æºçãªè³ã¯ãtest.img ãã¡ã€ã«ãã©ãã«ããã®ããã§ã«çåã«æã£ãŠãããšæããŸãã æ¢ããŠã¿ãŸããã:
$ find /var/lib/docker -type f -name test.img
/var/lib/docker/overlay2/83f177...630078/merged/test.img
/var/lib/docker/overlay2/83f177...630078/diff/test.img
詳现ã«ã¯ç«ã¡å ¥ããŸããããtest.img ãã¡ã€ã«ã¯èªã¿æžãã¬ãã«ã«é 眮ãããŠãããoverlay2 ãã©ã€ããŒã«ãã£ãŠå¶åŸ¡ãããŠããããšãããããŸãã ã³ã³ãããåæ¢ãããšããã¹ãã¯ååãšããŠãã®ã¹ããŒã¹ã解æŸã§ããããšãéç¥ããŸãã
# Stopping the www container
$ docker stop www
# Visualizing the impact on the disk usage
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 1 1 126M 0B (0%)
Containers 1 0 104.9MB 104.9MB (100%)
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
ã©ãããã°ãããã§ããã§ããããïŒ ã³ã³ãããŒãåé€ãããšã察å¿ããã¹ããŒã¹ãèªã¿åã/æžã蟌ã¿ã¬ãã«ã§ã¯ãªã¢ãããŸãã
次ã®ã³ãã³ãã䜿çšãããšãã€ã³ã¹ããŒã«ãããŠãããã¹ãŠã®ã³ã³ãããäžåºŠã«åé€ããã³ã³ããã«ãã£ãŠäœæããããã¹ãŠã®èªã¿åã/æžã蟌ã¿ãã¡ã€ã«ããã£ã¹ã¯ããã¯ãªã¢ã§ããŸãã
$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
5e7f8e5097ace9ef5518ebf0c6fc2062ff024efb495f11ccc89df21ec9b4dcc2
Total reclaimed space: 104.9MB
ããã§ãã³ã³ãããåé€ããããšã§ 104,9 ã¡ã¬ãã€ãã解æŸããŸããã ãã ãã以åã«ããŠã³ããŒãããã€ã¡ãŒãžã¯ãã䜿çšããªããããåé€ããŠãªãœãŒã¹ã解æŸããåè£ã«ããªããŸãã
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 1 0 126M 126M (100%)
Containers 0 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
泚: ã€ã¡ãŒãžãå°ãªããšã XNUMX ã€ã®ã³ã³ãããŒã§äœ¿çšãããŠããéãããã®ããªãã¯ã¯äœ¿çšã§ããŸããã
äžèšã§äœ¿çšãã prune ãµãã³ãã³ãã¯ãåæ¢ããã³ã³ãããŒã«ã®ã¿åœ±é¿ããŸãã åæ¢ããã³ã³ããã ãã§ãªãå®è¡äžã®ã³ã³ãããåé€ãããå Žåã¯ã次ã®ã³ãã³ãã®ããããã䜿çšããå¿ èŠããããŸãã
# Historical command
$ docker rm -f $(docker ps âaq)
# More recent command
$ docker container rm -f $(docker container ls -aq)
è£è¶³: ã³ã³ãããŒã®èµ·åæã« -rm ãã©ã¡ãŒã¿ãŒã䜿çšãããšãã³ã³ãããŒãåæ¢ãããšãã³ã³ãããŒãå æããŠãããã¹ãŠã®ãã£ã¹ã¯é åã解æŸãããŸãã
ãã£ã¹ã¯ã€ã¡ãŒãžã®äœ¿çš
æ°å¹ŽåãŸã§ã¯ãæ°çŸã¡ã¬ãã€ãã®ã€ã¡ãŒãž ãµã€ãºã¯ãŸã£ããæ®éã§ãããUbuntu ã€ã¡ãŒãžã®éã㯠600 ã¡ã¬ãã€ããMicrosoft .Net ã€ã¡ãŒãžã®éãã¯æ°ã®ã¬ãã€ãã§ããã ãã®æ¯ãããããã®æ代ã«ã¯ãã€ã¡ãŒãžéã§ã¬ãã«ãå ±æããŠãããšããŠããã€ã¡ãŒãžã XNUMX ã€ããŠã³ããŒãããã ãã§ã空ããã£ã¹ã¯å®¹éã«å€§ããªè² æ ããããå¯èœæ§ããããŸããã çŸåšã§ã¯ãå倧ãªæ¹ã«æ¬æãè¡šããŸãããç»åã®éãã¯ã¯ããã«è»œããªããŸããããããã§ããäœããã®äºé²çãè¬ããªããšãå©çšå¯èœãªãªãœãŒã¹ãããã«ãã£ã±ãã«ãªã£ãŠããŸãå¯èœæ§ããããŸãã
ãšã³ã ãŠãŒã¶ãŒã«ã¯çŽæ¥è¡šç€ºãããªãç»åã«ã¯ããã€ãã®çš®é¡ããããŸãã
- äžéã€ã¡ãŒãžãããã«åºã¥ããŠä»ã®ã€ã¡ãŒãžãåéãããŸãããããã®ãä»ã®ãã€ã¡ãŒãžã«åºã¥ããã³ã³ããã䜿çšããå Žåãäžéã€ã¡ãŒãžã¯åé€ã§ããŸããã
- ãã³ã°ãªã³ã° ã€ã¡ãŒãžã¯ãå®è¡äžã®ã©ã®ã³ã³ãããããåç §ãããªãäžéã€ã¡ãŒãžã§ãããåé€ããããšãã§ããŸãã
- 次ã®ã³ãã³ãã䜿çšãããšãã·ã¹ãã äžã®æªè§£æ±ºã€ã¡ãŒãžã確èªã§ããŸãã
$ docker image ls -f dangling=true
REPOSITORY TAG IMAGE ID CREATED SIZE
none none 21e658fe5351 12 minutes ago 71.3MB
ãããã¯æ¬¡ã®æ¹æ³ã§åé€ã§ããŸãã
$ docker image rm $(docker image ls -f dangling=true -q)
prune ãµãã³ãã³ãã䜿çšããããšãã§ããŸãã
$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Deleted Images:
deleted: sha256:143407a3cb7efa6e95761b8cd6cea25e3f41455be6d5e7cda
deleted: sha256:738010bda9dd34896bac9bbc77b2d60addd7738ad1a95e5cc
deleted: sha256:fa4f0194a1eb829523ecf3bad04b4a7bdce089c8361e2c347
deleted: sha256:c5041938bcb46f78bf2f2a7f0a0df0eea74c4555097cc9197
deleted: sha256:5945bb6e12888cf320828e0fd00728947104da82e3eb4452f
Total reclaimed space: 12.9kB
çªç¶ãXNUMX ã€ã®ã³ãã³ãã§ãã¹ãŠã®ã€ã¡ãŒãžã (ã¶ãäžãã£ãŠããã ãã§ãªã) å®å šã«åé€ãããå Žåã¯ã次ã®ããã«ããããšãã§ããŸãã
$ docker image rm $(docker image ls -q)
ããªã¥ãŒã ããšã®ãã£ã¹ã¯äœ¿çšé
ããªã¥ãŒã ã¯ãã³ã³ããã®ãã¡ã€ã« ã·ã¹ãã ã®å€éšã«ããŒã¿ãä¿åããããã«äœ¿çšãããŸãã ããšãã°ãã¢ããªã±ãŒã·ã§ã³ã®çµæãä»ã®æ¹æ³ã§äœ¿çšããããã«ä¿åãããå Žåã§ãã äžè¬çãªäŸã¯ããŒã¿ããŒã¹ã§ãã
MongoDB ã³ã³ãããèµ·åããã³ã³ããã®å€éšã«ããªã¥ãŒã ãããŠã³ãããããããããŒã¿ããŒã¹ ããã¯ã¢ããã埩å ããŸããã (bck.json ãã¡ã€ã«ã§å©çšå¯èœã§ã)ã
# Running a mongo container
$ docker run --name db -v $PWD:/tmp -p 27017:27017 -d mongo:4.0
# Importing an existing backup (from a huge bck.json file)
$ docker exec -ti db mongoimport
--db 'test'
--collection 'demo'
--file /tmp/bck.json
--jsonArray
ããŒã¿ã¯ããã¹ã ãã·ã³ã® /var/lib/docker/volumes ãã£ã¬ã¯ããªã«é 眮ãããŸãã ããããã³ã³ããã®èªã¿åã/æžã蟌ã¿ã¬ãã«ã§ã¯ãªãããã§ã¯ãªãã®ã§ãããã? MongoDB ã€ã¡ãŒãžã® Dockerfile ã§ã¯ã/data/db ãã£ã¬ã¯ã㪠(MongoDB ãããã©ã«ãã§ããŒã¿ãä¿åããå Žæ) ãããªã¥ãŒã ãšããŠå®çŸ©ãããŠããããã§ãã
è£è¶³: ããŒã¿ãçæããå¿ èŠãããã€ã¡ãŒãžã®å€ãã¯ããã®ããŒã¿ãä¿åããããã«ããªã¥ãŒã ã䜿çšããŸãã
MongoDB ãååã«è©ŠããŠã³ã³ãããåæ¢ (ãŸãã¯åé€) ããŠããããªã¥ãŒã ã¯åé€ãããŸããã 次ã®ãããªã³ãã³ãã§æ瀺çã«åé€ãããŸã§ã貎éãªãã£ã¹ã¯é åãå æãç¶ããŸãã
$ docker volume rm $(docker volume ls -q)
ãŸãã¯ããã§ã«ããªãã¿ã® prune ãµãã³ãã³ãã䜿çšããããšãã§ããŸãã
$ docker volume prune
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
d50b6402eb75d09ec17a5f57df4ed7b520c448429f70725fc5707334e5ded4d5
8f7a16e1cf117cdfddb6a38d1f4f02b18d21a485b49037e2670753fa34d115fc
599c3dd48d529b2e105eec38537cd16dac1ae6f899a123e2a62ffac6168b2f5f
...
732e610e435c24f6acae827cd340a60ce4132387cfc512452994bc0728dd66df
9a3f39cc8bd0f9ce54dea3421193f752bda4b8846841b6d36f8ee24358a85bae
045a9b534259ec6c0318cb162b7b4fca75b553d4e86fc93faafd0e7c77c79799
c6283fe9f8d2ca105d30ecaad31868410e809aba0909b3e60d68a26e92a094da
Total reclaimed space: 25.82GB
luc@saturn:~$
ã€ã¡ãŒãžãã«ããã£ãã·ã¥ã«ãã£ã¹ã¯ã䜿çšãã
Docker 18.09 ã§ã¯ãBuildKit ããŒã«ã®ãããã§ã€ã¡ãŒãžäœæããã»ã¹ãããã€ãå€æŽãããŸããã ããã«ãããããã»ã¹ã®é床ãåäžããããŒã¿ ã¹ãã¬ãŒãžãšã»ãã¥ãªãã£ç®¡çãæé©åãããŸãã ããã§ã¯ããã®çŽ æŽãããããŒã«ã®è©³çŽ°ããã¹ãŠæ€èšããã®ã§ã¯ãªãããã®ããŒã«ããã£ã¹ã¯é åã®äœ¿çšã®åé¡ã«ã©ã®ããã«å¯ŸåŠãããã®ã¿ã«çŠç¹ãåœãŠãŸãã
å®å šã«åçŽãª Node.Js ã¢ããªã±ãŒã·ã§ã³ããããšããŸãã
- Index.js ãã¡ã€ã«ã¯ãåä¿¡ããåãªã¯ãšã¹ãã« XNUMX è¡ã§å¿çããåçŽãª HTTP ãµãŒããŒãèµ·åããŸãã
- package.json ãã¡ã€ã«ã¯äŸåé¢ä¿ãå®çŸ©ããŸããäŸåé¢ä¿ã®ãã¡ãHTTP ãµãŒããŒã®å®è¡ã«ã¯ Expressjs ã®ã¿ã䜿çšãããŸãã
$ cat index.js
var express = require('express');
var util = require('util');
var app = express();
app.get('/', function(req, res) {
res.setHeader('Content-Type', 'text/plain');
res.end(util.format("%s - %s", new Date(), 'Got Request'));
});
app.listen(process.env.PORT || 80);
$ cat package.json
{
"name": "testnode",
"version": "0.0.1",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "^4.14.0"
}
}
ã€ã¡ãŒãžãæ§ç¯ããããã® Dockerfile ã¯æ¬¡ã®ããã«ãªããŸãã
FROM node:13-alpine
COPY package.json /app/package.json
RUN cd /app && npm install
COPY . /app/
WORKDIR /app
EXPOSE 80
CMD ["npm", "start"]
BuildKit ã䜿çšããã«ãéåžžã®æ¹æ³ã§ã€ã¡ãŒãžããã«ãããŸãããã
$ docker build -t app:1.0 .
ãã£ã¹ã¯é åã®äœ¿çšç¶æ³ã確èªãããšãåºæ¬ã€ã¡ãŒãž (node:13-alpine) ãšå®å ã€ã¡ãŒãž (app:1.0) ã®ã¿ãé åãå æããŠããããšãããããŸãã
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 2 0 109.3MB 109.3MB (100%)
Containers 0 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
BuildKit ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã® 1 çªç®ã®ããŒãžã§ã³ãæ§ç¯ããŸãããã ãããè¡ãã«ã¯ãDOCKER_BUILDKIT å€æ°ã XNUMX ã«èšå®ããã ãã§ãã
$ DOCKER_BUILDKIT=1 docker build -t app:2.0 .
ããã§ãã£ã¹ã¯äœ¿çšéã確èªãããšãããã«ãã«ã ãã£ãã·ã¥ (buid-cache) ãé¢äžããŠããããšãããããŸãã
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 2 0 109.3MB 109.3MB (100%)
Containers 0 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 11 0 8.949kB 8.949kB
ãããã¯ãªã¢ããã«ã¯ã次ã®ã³ãã³ãã䜿çšããŸãã
$ docker builder prune
WARNING! This will remove all dangling build cache.
Are you sure you want to continue? [y/N] y
Deleted build cache objects:
rffq7b06h9t09xe584rn4f91e
ztexgsz949ci8mx8p5tzgdzhe
3z9jeoqbbmj3eftltawvkiayi
Total reclaimed space: 8.949kB
ãã¹ãŠã¯ãªã¢ïŒ
ããã§ãã³ã³ãããã€ã¡ãŒãžãããªã¥ãŒã ãå æããŠãããã£ã¹ã¯é åãã¯ãªãŒã³ã¢ããããããšã«æ³šç®ããŸããã ããã«ã¯ prune ãµãã³ãã³ãã圹ç«ã¡ãŸãã ãã ããDocker ã·ã¹ãã ã¬ãã«ã§ã䜿çšã§ããã§ããéããã¹ãŠãã¯ãªãŒã³ã¢ããããŸãã
$ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache
Are you sure you want to continue? [y/N]
äœããã®çç±ã§ Docker ãã·ã³ã®ãã£ã¹ã¯é åãç¯çŽããŠããå Žåã¯ããã®ã³ãã³ããå®æçã«å®è¡ããããšãç¿æ £ã«ãªãã¯ãã§ãã
åºæïŒ habr.com