docker
Docker Engine 24.0+æ¥åžžçã«äœ¿ã Docker CLI ã³ãã³ããçŽ æ©ãåç §:ã³ã³ããã®ã©ã€ããµã€ã¯ã«ãã€ã¡ãŒãž ãã«ãããã° / execããããã¯ãŒã¯ãããªã¥ãŒã ãComposeãã¬ãžã¹ããªãããŠã¹ããŒãã³ã° â ãã䜿ããªãã·ã§ã³ãšå®çšäŸããŸãšããŸããã
46 ã³ãã³ã
ã³ã³ããã®ã©ã€ããµã€ã¯ã«
docker run <image>ã€ã¡ãŒãžããæ°ããã³ã³ãããäœæããŠèµ·åããŸãã
-d ãã¿ãã; -it 察話TTY; --name ååãå²ãåœãŠ; -p host:container ããŒãå ¬é; -v ããªã¥ãŒã ããŠã³ã; -e KEY=VAL ç°å¢å€æ°; --rm çµäºæèªååé€; --restart=always|unless-stopped|on-failure
docker run -d --name web -p 8080:80 -v $PWD:/usr/share/nginx/html:ro nginx:alpinedocker start|stop|restart <container>æ¢åã®ã³ã³ãããèµ·å / 忢 / åèµ·åããŸã(ååãŸã㯠ID æå®)ã
-t N 匷å¶åæ¢ãŸã§ã®åŸ ã¡ç§æ°(æ¢å® 10)
docker restart web && docker logs --tail 50 webdocker rm <container>忢äžã®ã³ã³ããã 1 ã€ä»¥äžåé€ããŸãã
-f å®è¡äžã匷å¶åé€; -v å¿åããªã¥ãŒã ãåé€
docker rm -f $(docker ps -aq)docker psã³ã³ãããäžèŠ§è¡šç€ºããŸã(æ¢å®:å®è¡äžã®ã¿)ã
-a ãã¹ãŠ; -q ID ã®ã¿; -s ãµã€ãºä»ã; --format Go ãã³ãã¬ãŒã; --filter status|name=...
docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}'docker rename <c> <new>ã³ã³ããã®ååã倿ŽããŸãã
docker rename web-1 gateway-webdocker update <c>å®è¡äžã®ã³ã³ããã®ãªãœãŒã¹å¶éãåèµ·åããªã·ãŒãæŽæ°ããŸãã
--cpus N; --memory SIZE; --memory-swap SIZE; --restart policy
docker update --cpus 1.5 --memory 1g apidocker wait <c>ã³ã³ããã忢ãããŸã§åŸ æ©ããçµäºã³ãŒãã衚瀺ããŸãã
docker wait db && echo "db stopped"docker top <c>ã³ã³ããå ã§åäœããŠããããã»ã¹ã衚瀺ããŸã(ãã¹ã PID åå空éã® ps)ã
docker top webãã° / Exec
docker logs <c>ã³ã³ããã®ãã°ãååŸããŸãã
-f ãã©ããŒ; --tail N; --since ã¿ã€ã ã¹ã¿ã³ã|æé; -t ã¿ã€ã ã¹ã¿ã³ãä»ã; --details
docker logs -f --tail 200 -t api | grep ERRORdocker exec -it <c> <cmd>å®è¡äžã®ã³ã³ããå ã§ã³ãã³ããå®è¡ããŸã(å€ãã¯å¯Ÿè©±ã·ã§ã«)ã
-i STDIN ãéãããŸãŸ; -t ç䌌 TTY å²åœ; -u ãŠãŒã¶ãŒ; -w äœæ¥ãã£ã¬ã¯ããª; -e KEY=VAL
docker exec -it -u postgres db psql -U postgres app_productiondocker attach <c>ããŒã«ã«ã® STDIN/STDOUT ãå®è¡äžã³ã³ããã«æ¥ç¶ããŸã(`docker start -i` ãšåç)ã
--sig-proxy ã·ã°ãã«è»¢é; --no-stdin
docker attach web && Ctrl-p Ctrl-q to detachdocker cp <c>:<src> <dest>ã³ã³ãããšããŒã«ã« FS éã§ãã¡ã€ã« / ãã©ã«ããã³ããŒããŸãã
-L ã·ã³ããªã㯠ãªã³ã¯ã远跡; -a ã¢ãŒã«ã€ã ã¢ãŒã
docker cp db:/var/lib/postgresql/data ./pgdataæ å ±ç¢ºèª
docker inspect <obj>Docker ãªããžã§ã¯ã(ã³ã³ãã / ã€ã¡ãŒãž / ããªã¥ãŒã / ãããã¯ãŒã¯)ã®è©³çްãè¿ããŸãã
-f Go ãã³ãã¬ãŒã; --type container|image|network|volume; -s ãµã€ãº
docker inspect -f '{{.NetworkSettings.IPAddress}}' webdocker statså®è¡äžã³ã³ããã® CPU / ã¡ã¢ãª / ãããã¯ãŒã¯ / ãã£ã¹ã¯äœ¿çšéãã©ã€ã衚瀺ããŸãã
--no-stream 1 åã®ã¿; -a ãã¹ãŠ(忢äžã); --format; --no-trunc
docker stats --format 'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}'docker diff <c>ã³ã³ããã®ãã¡ã€ã« ã·ã¹ãã ãžã®å€æŽ(远å / å€æŽ / åé€)ã確èªããŸãã
docker diff web | head -20ã€ã¡ãŒãžæäœ
docker pull <image>[:tag]ã¬ãžã¹ããªããã€ã¡ãŒãž(ãŸãã¯ãªããžããª)ããã«ããŸãã
-a ã¿ã°ä»ããã¹ãŠ; --platform linux/amd64; -q éãã«; --disable-content-trust
docker pull --platform linux/amd64 nginx:1.27-alpinedocker imagesããŒã«ã« ããŒã¢ã³äžã®ã€ã¡ãŒãžã衚瀺ããŸãã
-a ãã¹ãŠ(äžéå«ã); -q ID ã®ã¿; --digests; --filter dangling=true
docker images --format '{{.Repository}}:{{.Tag}}\t{{.Size}}' | sort -k2 -h | tail -20docker build <path>Dockerfile ããã€ã¡ãŒãžããã«ãããŸãã
-t name:tag; -f Dockerfile ã®ãã¹; --no-cache; --build-arg KEY=VAL; --target stage; --progress=plain; --platform
docker build -t myapp:dev --build-arg NODE_ENV=development --progress=plain .docker tag <src> <dest>æ¢åã€ã¡ãŒãžãæãã¿ã°ãäœæããŸã(å¥å / ããã·ã¥å ã«)ã
docker tag myapp:dev registry.example.com/team/myapp:1.2.0docker push <image>ã€ã¡ãŒãž(ãŸãã¯ãªããžããª)ãã¬ãžã¹ããªã«ã¢ããããŒãããŸãã
--disable-content-trust; -a ã¿ã°ãããå šããªã¢ã³ã; --quiet
docker push registry.example.com/team/myapp:1.2.0docker rmi <image>ã€ã¡ãŒãžã 1 ã€ä»¥äžåé€ããŸãã
-f 匷å¶(åã€ã¡ãŒãžãããå Žå untag ã宿œ); --no-prune untag ããã芪ãä¿æ
docker rmi -f $(docker images --filter 'dangling=true' -q)docker image prune / docker save / docker loadãã£ã¹ã¯ãåå(dangling / N æé以äžå); tar ã«ã€ã¡ãŒãžä¿å / tar ããããŒãã
-a ãã¹ãŠ; --filter 'until=24h'; -o file.tar; -i file.tar
docker image prune -af --filter 'until=72h' && docker save -o nginx.tar nginx:alpinedocker history <image>ã€ã¡ãŒãžã®ã¬ã€ã€ / äžéå±¥æŽã衚瀺ããŸãã
--no-trunc; --human; -q ID ã®ã¿
docker history --no-trunc --human myapp:devãããã¯ãŒã¯
docker network lsãããã¯ãŒã¯ãäžèŠ§è¡šç€ºããŸãã
--filter driver=bridge|overlay; -q ID ã®ã¿; --format
docker network ls --filter driver=bridge --format '{{.Name}}'docker network create <name>ãµãŒãã¹æ€åº / DNS çšã®ãŠãŒã¶ãŒå®çŸ©ããªããž ãããã¯ãŒã¯ãäœæããŸãã
--driver bridge|overlay|macvlan; --subnet CIDR; --gateway; --ipv6; --internal
docker network create --driver bridge --subnet 10.20.0.0/24 mynetdocker network connect|disconnect <net> <c>å®è¡äžã³ã³ããããããã¯ãŒã¯ã«æ¥ç¶ / åæããŸãã
--ip IPv4; --ip6 IPv6; --alias ãã¹ãåå¥å; --link ã³ã³ãã
docker network connect mynet webdocker network rm / docker network pruneãããã¯ãŒã¯ã 1 ã€ä»¥äžåé€ / æªäœ¿çšãã¯ãªãŒã³ã¢ããããŸãã
-f 匷å¶; --filter 'until=24h'
docker network prune -fããªã¥ãŒã / ã¹ãã¬ãŒãž
docker volume lsããªã¥ãŒã ãäžèŠ§è¡šç€ºããŸãã
--filter dangling=true|driver|name; -q ID ã®ã¿; --format
docker volume ls --filter dangling=true -qdocker volume create <name>ååä»ãããªã¥ãŒã ãäœæããŸã(Docker ã«ãã管çãããã³ã³ãã UFS å€)ã
--driver local; --opt type=nfs; --opt o=addr; --opt device=:/path
docker volume create --driver local --opt type=nfs --opt o=addr=10.0.0.1 --opt device=:/exports/data pgdatadocker volume rm / docker volume pruneããªã¥ãŒã ã 1 ã€ä»¥äžåé€ / æªäœ¿çšãã¯ãªãŒã³ã¢ããããŸãã
-f 匷å¶; --filter 'label=...'
docker volume rm $(docker volume ls -q --filter dangling=true)docker volume inspect <vol>ããªã¥ãŒã ã®è©³çް(ããŠã³ã ãã€ã³ãããã©ã€ãããªãã·ã§ã³)ã衚瀺ããŸãã
docker volume inspect pgdata --format '{{.Mountpoint}}'Docker Compose
docker compose upcompose.yaml ãããµãŒãã¹ããã«ã(å¿ èŠãªã) / äœæ / èµ·åããŸãã
-d ãã¿ãã; --build 匷å¶ãã«ã; --force-recreate; --pull always|missing|never; -f ãã¡ã€ã«
docker compose -f compose.prod.yaml up -d --pull alwaysdocker compose downã³ã³ãããšãããã¯ãŒã¯ã忢 / åé€;æ¢å®ã§ã¯å¿åããªã¥ãŒã ãåé€ããŸãã
--volumes ååä»ãããªã¥ãŒã ã; --rmi all|local; --remove-orphans; -t N ã¿ã€ã ã¢ãŠã
docker compose down --rmi local --remove-orphansdocker compose ps / logsCompose ãµãŒãã¹ã®äžèЧ / ãã°è¡šç€ºã
ps -q ID ã®ã¿; logs -f ãã©ããŒ; --tail N; --since
docker compose ps --format json | jq '.[] | {Name, State}' && docker compose logs -f --tail 100 apidocker compose exec / runå®è¡äž / æ°èŠãµãŒãã¹ ã³ã³ããã§ã³ãã³ããå®è¡ããŸãã
exec --user; exec -e VAR=val; run --rm çµäºåŸã«ã³ã³ããåé€
docker compose exec db psql -U postgres app && docker compose run --rm api npm run migratedocker compose build / pull / pushCompose ãããžã§ã¯ãã®ã€ã¡ãŒãž ãã«ã / ã¬ãžã¹ããªããã®ãã« / ã¬ãžã¹ããªãžã®ããã·ã¥ã
--no-cache; --pull; --quiet; --parallel
docker compose build --no-cache api workerdocker compose restart / stop / start / scaleãµãŒãã¹ã®ã©ã€ããµã€ã¯ã« ã·ã§ãŒãã«ãã;scale ã§ã¬ããªã«æ°ã倿ŽããŸãã
restart <svc>; stop <svc>; start <svc>; scale api=4 worker=2
docker compose restart api && docker compose up -d --scale worker=4ã¬ãžã¹ã㪠/ Hub
docker login [server]ã¬ãžã¹ããªã«èªèšŒããŸãã`docker login` ã§ Docker Hubã
-u ãŠãŒã¶ãŒ; -p ãã¹ã¯ãŒã; --password-stdin
echo "$REGISTRY_TOKEN" | docker login ghcr.io -u myuser --password-stdindocker logout [server]ã¬ãžã¹ããªã®èªèšŒæ å ±ãèšå®ããåé€ããŸãã
docker logout && docker info 2>/dev/null | headdocker search <term>Docker Hub ããã€ã¡ãŒãžãæ€çŽ¢ããŸãã
--filter stars=N; --limit N; --format
docker search --filter stars=100 --limit 5 postgresã·ã¹ãã / ã¯ãªãŒã³ã¢ãã
docker system dfDocker ã®ãã£ã¹ã¯äœ¿çšé(ã€ã¡ãŒãž / ã³ã³ãã / ããªã¥ãŒã / ãã«ã ãã£ãã·ã¥)ã衚瀺ããŸãã
-v 詳现
docker system df -v | sort -k7 -h | taildocker system prune忢äžã³ã³ãã / dangling ã€ã¡ãŒãž / æªäœ¿çšãããã¯ãŒã¯ããã¹ãŠåé€ããŸãã
-a ãã¹ãŠã®ã€ã¡ãŒãž; --volumes ããªã¥ãŒã ã; --filter 'until=24h'; -f 匷å¶
docker system prune -af --volumes --filter 'until=72h'docker builder pruneãã«ã ãã£ãã·ã¥ãã¯ãªãŒã³ããŸã(å€ãã¬ã€ã€ã§ãã£ã¹ã¯ãè§£æŸ)ã
-af; --filter 'until=72h'; --keep-storage SIZE
docker builder prune -af --filter 'until=72h'docker context ls / useDocker ã³ã³ããã¹ãã管ç â ãã«ããã¹ã / ãã«ã ããŒã¢ã³(SSH çµç±ã®ãªã¢ãŒã ã³ã³ããã¹ãã)ã
ls --format json; use myctx
docker context create myhost --docker host=ssh://user@server && docker context use myhost && docker psdocker infoã·ã¹ãã å šäœã®æ å ±ã衚瀺;ãããã°æã«äŸ¿å©ã§ãã
--format
docker info -f '{{.DriverStatus}}'docker port <c>ã³ã³ããã®ããŒã ãããã³ã°(ãã¹ã â ã³ã³ãã)ã衚瀺ããŸãã
docker port web 80é¢é£ã³ãã³ã鿥
aws cli
AWS Command Line Interface ã®ã¯ã€ã㯠ãªãã¡ã¬ã³ã¹:è³æ Œæ å ±ã®æ§æãIAM IDãEC2 / Lambda / S3 / DynamoDB / IAMããããã¡ã€ã«ãSSOãããŒãžã³ã° / åºåãã©ãŒããã â ãã䜿ããªãã·ã§ã³ãšå®çšäŸããŸãšããŸããã
40 ã³ãã³ã
AWS CLI v2
azure cli
Azure CLI (az)ã®ã¯ã€ã㯠ãªãã¡ã¬ã³ã¹:èªèšŒããµãã¹ã¯ãªãã·ã§ã³ / ãªãœãŒã¹ç®¡çãVM / AKS / Storage / App Service / Key Vaultãã¯ãšãªæžåŒãCI 察å¿ã¯ãŒã¯ãã㌠â ãã䜿ããªãã·ã§ã³ãšå®çšäŸããŸãšããŸããã
43 ã³ãã³ã
Azure CLI 2.60+
gcloud
gcloud(Google Cloud CLI)ãgsutilãbq ã³ãã³ãã®ã¯ã€ã㯠ãªãã¡ã¬ã³ã¹:èªèšŒããããžã§ã¯ã / IAMãCompute / GKE / BigQuery / Cloud Storageãæ§æãCloud Build / Deploy â ãã䜿ããªãã·ã§ã³ãšå®çšäŸããŸãšããŸããã
48 ã³ãã³ã
gcloud 480+
kubectl
Kubernetes ã®ã³ãã³ãã©ã€ã³ ã¯ã©ã€ã¢ã³ã kubectl ãçŽ æ©ãåç §:ã³ã³ããã¹ããget/describeãapplyãlogs/execãrolloutãã¹ã±ãŒã«ããããã° â ãã䜿ããªãã·ã§ã³ãšå®çšäŸããŸãšããŸããã
40 ã³ãã³ã
kubectl 1.28+
åæšãšå©çšã«ã€ããŠã®åç¥
æ¬ã³ãã³ãã©ã€ã³ããŒã«ã»ããŒãã·ãŒãéã¯ãªãŒãã³ã³ãã¥ããã£ã®åèè³æã§ããæ¬æžã§èšåããããŒã«ã®ååãããŽãåæšïŒGitâ¢ãDockerâ¢ãKubernetes®ãkubectlãPostgreSQL®ãMySQL®ãRedisâ¢ãMongoDB®ãLinuxâ¢ãPowerShellâ¢ãVim⢠ãªã©ïŒã¯ãã¹ãŠããããã®æš©å©è ã®è²¡ç£ã§ãããæ¬æžã§ã¯èå¥ããã³åç §ã®ç®çã®ã¿ã«äœ¿çšããŠããŸãã
æ¬ããŒãã·ãŒãã®å šå 容ã¯ç¬ç«ããŠäœæãããç°¡ç¥åãããèªå·±å®çµåã®åèè³æã§ããããããªãå ¬åŒããã¥ã¡ã³ãã«ãæå±ãããæ¿èªãããŠãããããŸãåŒçšããããã®ã§ããããŸãããã³ãã³ãäžèЧããªãã·ã§ã³ãã©ã°ã®èª¬æãã³ãŒãäŸã¯ãã¹ãŠèè ã«ããç¬èªã®ç°¡ç¥åã§ããæš©åšããæ å ±ã«ã€ããŠã¯ãåããŒã«ã®å ¬åŒããã¥ã¡ã³ããåç §ããŠãã ããã
ã³ãã³ãã®æ§æããã³ãªãã·ã§ã³ãã©ã°ã¯ããŒã«ã®ããŒãžã§ã³ã«ãã£ãŠç°ãªãå ŽåããããŸãã衚瀺ãããããŒãžã§ã³ã¿ã°ã¯å®å®ãªãªãŒã¹ã瀺ããŠããŸããä»ã®ããŒãžã§ã³ã§ã¯åäœãç°ãªãå ŽåããããŸããæ¬æžã¯åæšæš©è ã«ããæšå¥šãéžå¥œãæå³ãããã®ã§ã¯ãããŸããã
åæšæš©è ãŸãã¯èäœæš©è ã®æ¹ã§ãåœãµã€ãã®äžéšå 容ã«ã€ããŠæš©å©äŸµå®³ã®æžå¿µãããå Žåã¯[email protected]ãŸã§ãé£çµ¡ãã ãããæå¹ãªæš©å©èšŒæãåé æ¬¡ç¬¬ãåççãªæéå ã«é¢é£å 容ãä¿®æ£ãŸãã¯åé€ããããŸãã
åœãµã€ãã®æ å ±ãå©çšããããšã§çãããããªãçŽæ¥çã»éæ¥çæå®³ã«ã€ããŠããåœãµã€ãã¯æ³ç責任ãè² ããŸããã
Docker ã«ã€ããŠ
Docker 㯠Solomon Hykes ã PyCon 2013 ã§åããŠçºè¡šãããªãŒãã³ãœãŒã¹ã®ã³ã³ãããšã³ãžã³ã§ãçŸåšã¯ Docker Inc. ãš Cloud Native Computing Foundation ãå ±åã§ç®¡çããŠããŸããçŸåšã®å®å®ç㯠Docker Engine 24.0+ïŒã©ã³ã¿ã€ã ã³ã³ããŒãã³ãïŒã§ã`dockerd` ã OCI æºæ ã€ã¡ãŒãžããæ§ç¯ãããã³ã³ããããªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŸããã³ã³ããã¯ã¢ããªã±ãŒã·ã§ã³ãšãã®äŸåé¢ä¿ïŒã©ã€ãã©ãªãèšå®ãã©ã³ã¿ã€ã ïŒãèªã¿åãå°çšã®ããŒã¹äžã«éå±€åãããã€ã¡ãŒãžãšããŠããã±ãŒãžåããŸããåã¬ã€ã€ãŒã¯ SHA-256 ã§ã³ã³ãã³ãã¢ãã¬ã¹ããããã«ãéã§ãã£ãã·ã¥ãããå®è¡äžã®ã³ã³ããéã§å ±æãããŸããDocker CLI ã¯ã©ã€ããµã€ã¯ã«å šäœââ`docker build`ã`docker run`ã`docker ps`ã`docker exec`ã`docker logs`ã`docker compose`ïŒè€æ°ã³ã³ããã¢ããªïŒã`docker network` / `docker volume`ïŒãããã¯ãŒã¯ãšããªã¥ãŒã ïŒã`docker push` / `docker pull`ïŒã¬ãžã¹ããªïŒââãã«ããŒããKubernetes ã¯ã©ã¹ã¿äžã§ãã³ã³ããæäœã®å ±éèªãšããŠæ©èœããŸããããŒã«ã«ã§æ¬çªãåçŸãããCI ã§åçŸå¯èœãªãžã§ããåããCompose ã§è€æ°ã³ã³ããã¹ã¿ãã¯ãåããââããããã¹ãŠã« Docker ã䜿ããèªåã¹ã±ãžã¥ãŒãªã³ã°ãèªå·±ä¿®åŸ©ãè€æ°ããŒãã§ã®ããŒãªã³ã°ãããã€ãå¿ èŠã«ãªã£ãã Kubernetes ãæ€èšããŠãã ãããDocker ããŒã¢ã³ã¯ããã©ã«ãã§ããŒã«ã«ãœã±ããã«ãã€ã³ãããããããTLS ã§ä¿è·ããã€ã³ã¿ãŒãããã«ã¯çµ¶å¯Ÿã«å ¬éããªãã§ãã ããã
ããŒãã·ãŒã ããŒãžã§ã³ 1.0.0