๐Ÿณ Docker

Multilingual DevOps cheat sheet: Linux, Docker, Git, Kubernetes, Helm, Terraform, practical scenarios & templates.
๊ณต๊ฐœ

2025๋…„ 8์›” 31์ผ

Docker๋Š” ๊ฒฉ๋ฆฌ๋œ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ์ด ์น˜ํŠธ์‹œํŠธ์—๋Š” ์ด๋ฏธ์ง€, ์ปจํ…Œ์ด๋„ˆ, ๋„คํŠธ์›Œํฌ, ๋ณผ๋ฅจ, ๊ทธ๋ฆฌ๊ณ  Docker Compose์™€ Swarm์„ ๋‹ค๋ฃจ๋Š” ๋ช…๋ น์–ด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“ฆ ๊ธฐ๋ณธ ๋ช…๋ น์–ด

๋ช…๋ น์–ด

์˜ˆ์‹œ

์„ค๋ช…

docker ํ•˜์œ„ ๋ช…๋ น ์‹คํ–‰ ๋ฐ ์ปจํ…Œ์ด๋„ˆ, ์ด๋ฏธ์ง€, ๋„คํŠธ์›Œํฌ, ๋ณผ๋ฅจ์„ ๊ด€๋ฆฌํ•˜๋Š” ์ฃผ์š” Docker CLI ๋ช…๋ น์–ด
docker version ์„ค์น˜๋œ Docker ๋ฒ„์ „(ํด๋ผ์ด์–ธํŠธ ๋ฐ ์„œ๋ฒ„)์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ ํ™•์ธ์— ์œ ์šฉ
docker version --format '{{.Client.APIVersion}}'

Docker ํด๋ผ์ด์–ธํŠธ API ๋ฒ„์ „๋งŒ ํ‘œ์‹œ

docker version --format '{{.Server.Version}}'

Docker ์„œ๋ฒ„(์—”์ง„) ๋ฒ„์ „๋งŒ ํ‘œ์‹œ

docker version --format '{{json .}}'

์ „์ฒด ๋ฒ„์ „ ์ •๋ณด๋ฅผ JSON ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅ

docker system info ์ผ๋ฐ˜์ ์ธ Docker ์‹œ์Šคํ…œ ์ •๋ณด ํ‘œ์‹œ: ์ปจํ…Œ์ด๋„ˆ ์ˆ˜, ์ด๋ฏธ์ง€, ๋ฆฌ์†Œ์Šค
docker info

Docker ๋ฐ์ดํ„ฐ ํ‘œ์‹œ: ๋ฒ„์ „, ๋„คํŠธ์›Œํฌ, ์ปจํ…Œ์ด๋„ˆ ๋ฐ ์ด๋ฏธ์ง€ ์ˆ˜

docker info --format '{{json .}}'

JSON ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅ โ€” ์ž๋™ํ™”์— ์œ ์šฉ

docker info --format '{{.NCPU}} CPUs, {{.MemTotal}} bytes RAM'

CPU ์ˆ˜ ๋ฐ ์ด ๋ฉ”๋ชจ๋ฆฌ ํ‘œ์‹œ

docker info --format '{{.Driver}}'

Docker๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์Šคํ† ๋ฆฌ์ง€ ๋“œ๋ผ์ด๋ฒ„ ํ‘œ์‹œ

docker image pull Docker Hub ๋˜๋Š” ๋‹ค๋ฅธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ. ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด๋ฏธ์ง€ ์—†์ด๋Š” ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Œ
docker pull ubuntu

์ตœ์‹  Ubuntu ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ

docker pull nginx:alpine

Alpine Linux ๊ธฐ๋ฐ˜์˜ ๊ฒฝ๋Ÿ‰ Nginx ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ

docker pull redis:7

Redis ์ด๋ฏธ์ง€ ๋ฒ„์ „ 7 ๋‹ค์šด๋กœ๋“œ

docker container run ์ด๋ฏธ์ง€์—์„œ ์ƒˆ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰
docker run -it ubuntu bash

๋Œ€ํ™”ํ˜• Bash ํ„ฐ๋ฏธ๋„๋กœ Ubuntu ์‹คํ–‰

docker run -d nginx

Nginx๋ฅผ ๋ถ„๋ฆฌ(detached) ๋ชจ๋“œ๋กœ ์‹คํ–‰

docker run -p 8080:80 nginx

Nginx ์‹คํ–‰ ํ›„ ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ 80์„ ํ˜ธ์ŠคํŠธ ํฌํŠธ 8080์— ๋ฐ”์ธ๋”ฉ

docker container ls ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ๋‚˜์—ด
docker ps

์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋งŒ ํ‘œ์‹œ

docker ps -a

์ค‘์ง€๋œ ์ปจํ…Œ์ด๋„ˆ ํฌํ•จ ๋ชจ๋‘ ํ‘œ์‹œ

docker ps --format '{{.Names}}'

์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„๋งŒ ์ถœ๋ ฅ

docker container start ์ค‘์ง€๋œ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘
docker start container_name

์ด๋ฆ„์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘

docker start $(docker ps -aq)

๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘

docker start -ai container_name

์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ํ›„ ๋Œ€ํ™”ํ˜• ํ„ฐ๋ฏธ๋„ ์—ฐ๊ฒฐ

docker container stop ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€
docker stop container_name

์ด๋ฆ„์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€

docker stop $(docker ps -q)

์‹คํ–‰ ์ค‘์ธ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€

docker stop -t 5 container_name

์ปจํ…Œ์ด๋„ˆ์— 5์ดˆ๋ฅผ ์ฃผ๊ณ  ์ค‘์ง€

docker container restart ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘
docker restart container_name

ํŠน์ • ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘

docker restart $(docker ps -q)

์‹คํ–‰ ์ค‘์ธ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘

docker restart -t 10 container_name

10์ดˆ ์ง€์—ฐ ํ›„ ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘

docker container rm ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ
docker rm container_name

์ค‘์ง€๋œ ํŠน์ • ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ

docker rm $(docker ps -aq)

๋ชจ๋“  ์ค‘์ง€๋œ ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ

docker rm -f container_name

์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ๊ฐ•์ œ ์‚ญ์ œ

docker image ls ๋‹ค์šด๋กœ๋“œ๋œ ์ด๋ฏธ์ง€ ๋‚˜์—ด
docker images

ํ˜ธ์ŠคํŠธ์˜ ๋ชจ๋“  ์ด๋ฏธ์ง€ ํ‘œ์‹œ

docker images -a

์ค‘๊ฐ„ ๋ ˆ์ด์–ด ํฌํ•จ ๋ชจ๋“  ์ด๋ฏธ์ง€ ํ‘œ์‹œ

docker images --format '{{.Repository}}:{{.Tag}}'

์ด๋ฏธ์ง€ ์ด๋ฆ„๊ณผ ํƒœ๊ทธ๋งŒ ์ถœ๋ ฅ

docker image rm ๋กœ์ปฌ ์ €์žฅ์†Œ์—์„œ ์ด๋ฏธ์ง€ ์‚ญ์ œ
docker rmi test1:latest

test1 ์ €์žฅ์†Œ์˜ latest ํƒœ๊ทธ ์ด๋ฏธ์ง€ ์‚ญ์ œ

docker rmi 1a2b3c4d5e6f

ID๋กœ ์ด๋ฏธ์ง€ ์‚ญ์ œ

docker rmi $(docker images -q)

๋ชจ๋“  ์ด๋ฏธ์ง€ ์‚ญ์ œ (์ฃผ์˜ ํ•„์š”!)

๐Ÿ” ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ

๋ช…๋ น์–ด

์˜ˆ์‹œ

์„ค๋ช…

docker container exec ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ๋ช…๋ น ์‹คํ–‰
docker exec -it container bash

container๋ผ๋Š” ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ๋Œ€ํ™”ํ˜• bash ์…ธ ์‹คํ–‰

docker exec container ls /app

์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ /app ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ls ๋ช…๋ น ์‹คํ–‰

docker exec -d container touch /tmp/testfile

๋ถ„๋ฆฌ ๋ชจ๋“œ๋กœ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ๋ช…๋ น ์‹คํ–‰ (๋Œ€๊ธฐํ•˜์ง€ ์•Š์Œ)

docker container logs ์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ ๋ณด๊ธฐ
docker logs container

container ์ปจํ…Œ์ด๋„ˆ์˜ ๋ชจ๋“  ๋กœ๊ทธ ํ‘œ์‹œ

docker logs -f container

์‹ค์‹œ๊ฐ„์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ ํŒ”๋กœ์šฐ

docker logs --tail 50 container

๋งˆ์ง€๋ง‰ 50์ค„ ๋กœ๊ทธ ํ‘œ์‹œ

docker inspect ์ปจํ…Œ์ด๋„ˆ ๋˜๋Š” ์ด๋ฏธ์ง€์˜ ์ž์„ธํ•œ JSON ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ
docker inspect container

container ์ปจํ…Œ์ด๋„ˆ์˜ ์„ธ๋ถ€ ์ •๋ณด ํ‘œ์‹œ

docker inspect --format '{{.NetworkSettings.IPAddress}}' container

์ปจํ…Œ์ด๋„ˆ์˜ IP ์ฃผ์†Œ ํ‘œ์‹œ

docker container stats ์ปจํ…Œ์ด๋„ˆ์˜ ์‹ค์‹œ๊ฐ„ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ํ‘œ์‹œ
docker stats

๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์˜ CPU, ๋ฉ”๋ชจ๋ฆฌ, ๋„คํŠธ์›Œํฌ, ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰ ํ‘œ์‹œ

docker stats container_name

ํŠน์ • ์ปจํ…Œ์ด๋„ˆ๋งŒ ํ‘œ์‹œ

docker stats --no-stream

์Šค๋ƒ…์ƒท ํ†ต๊ณ„ ํ•œ ๋ฒˆ๋งŒ ์ถœ๋ ฅ ํ›„ ์ข…๋ฃŒ

docker container rename ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„ ๋ณ€๊ฒฝ
docker rename old_name new_name

old_name์—์„œ new_name์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ

docker container cp ์ปจํ…Œ์ด๋„ˆ์™€ ํ˜ธ์ŠคํŠธ ๊ฐ„ ํŒŒ์ผ ๋ณต์‚ฌ
docker cp container:/src/file.txt ./file.txt

์ปจํ…Œ์ด๋„ˆ์—์„œ ํŒŒ์ผ์„ ํ˜„์žฌ ํ˜ธ์ŠคํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ๋ณต์‚ฌ

docker cp ./config.yaml container:/app/config.yaml

ํ˜ธ์ŠคํŠธ์—์„œ ์ปจํ…Œ์ด๋„ˆ๋กœ ํŒŒ์ผ ๋ณต์‚ฌ

docker cp CONTAINER:/var/logs/app.log - | tar x -O | grep "ERROR"

์ปจํ…Œ์ด๋„ˆ์˜ ๋กœ๊ทธ ํŒŒ์ผ์„ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜์—ฌ โ€œERRORโ€ ์ค„๋งŒ ํ•„ํ„ฐ๋ง (๋””์Šคํฌ ์ €์žฅ ์—†์ด)

docker container top ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ํ‘œ์‹œ
docker top container

container๋ผ๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ํ”„๋กœ์„ธ์Šค ํ‘œ์‹œ

docker container pause ์ปจํ…Œ์ด๋„ˆ์˜ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค ์ผ์‹œ ์ •์ง€
docker pause container

container ์ปจํ…Œ์ด๋„ˆ ์ผ์‹œ ์ •์ง€

docker container unpause ์ผ์‹œ ์ •์ง€๋œ ์ปจํ…Œ์ด๋„ˆ ์žฌ๊ฐœ
docker unpause container

container ์ปจํ…Œ์ด๋„ˆ ์žฌ๊ฐœ

docker container update ์žฌ์‹œ์ž‘ ์—†์ด ์ปจํ…Œ์ด๋„ˆ ์„ค์ • ์—…๋ฐ์ดํŠธ
docker update --memory 500m container

์ปจํ…Œ์ด๋„ˆ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ 500MB๋กœ ์ œํ•œ

๐Ÿงฑ ์ด๋ฏธ์ง€์™€ Dockerfile

๋ช…๋ น์–ด

์˜ˆ์‹œ

์„ค๋ช…

docker buildx build Dockerfile์—์„œ Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ
docker build -t my_image .

ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ my_image ํƒœ๊ทธ๋กœ ์ด๋ฏธ์ง€ ๋นŒ๋“œ

docker build -t my_image:1.0 .

1.0 ๋ฒ„์ „ ํƒœ๊ทธ๋กœ ์ด๋ฏธ์ง€ ๋นŒ๋“œ

docker build --no-cache -t my_image .

์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ด๋ฏธ์ง€ ํด๋ฆฐ ๋นŒ๋“œ

docker container commit ์ปจํ…Œ์ด๋„ˆ์˜ ํ˜„์žฌ ์ƒํƒœ์—์„œ ์ด๋ฏธ์ง€ ์ƒ์„ฑ
docker commit container my_img:v1

container์—์„œ my_img:v1 ์ด๋ฏธ์ง€ ์ƒ์„ฑ

docker commit -m "Added config" container my_img:v2

์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ํฌํ•จํ•ด ์ด๋ฏธ์ง€ ์ƒ์„ฑ

docker commit -a "John Doe" container my_img:latest

์ž‘์„ฑ์ž๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ด๋ฏธ์ง€ ์ƒ์„ฑ

docker image tag ์ด๋ฏธ์ง€ ํƒœ๊ทธ ์ถ”๊ฐ€ ๋˜๋Š” ๋ณ€๊ฒฝ
docker tag my_image myrepo/my_image:latest

myrepo ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ํ‘ธ์‹œํ•  ํƒœ๊ทธ ์ถ”๊ฐ€

docker tag my_image:1.0 my_image:stable

1.0 ํƒœ๊ทธ ์ด๋ฏธ์ง€์— stable ํƒœ๊ทธ ์ƒ์„ฑ

docker tag my_image my_image:backup

๋กœ์ปฌ ์ด๋ฏธ์ง€์— backup ํƒœ๊ทธ ์ถ”๊ฐ€

docker image push Docker Hub ๋˜๋Š” ๋‹ค๋ฅธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ด๋ฏธ์ง€ ํ‘ธ์‹œ
docker push myrepo/my_image:latest

myrepo ์ €์žฅ์†Œ์— latest ํƒœ๊ทธ ์ด๋ฏธ์ง€ ํ‘ธ์‹œ

docker push myrepo/my_image:1.0

1.0 ํƒœ๊ทธ ์ด๋ฏธ์ง€ ํ‘ธ์‹œ

docker push myrepo/my_image

๊ธฐ๋ณธ ํƒœ๊ทธ latest๋กœ ์ด๋ฏธ์ง€ ํ‘ธ์‹œ

docker login Docker Hub ๋˜๋Š” ๋‹ค๋ฅธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋กœ๊ทธ์ธ
docker login

Docker Hub์— ์‚ฌ์šฉ์ž๋ช…๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๋กœ๊ทธ์ธ

docker login myregistry.local:5000

๊ฐœ์ธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋กœ๊ทธ์ธ

docker login -u username -p password

๋ช…๋ น์–ด๋กœ ์‚ฌ์šฉ์ž๋ช…๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ (๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ)

docker logout Docker Hub ๋˜๋Š” ๋‹ค๋ฅธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ๋กœ๊ทธ์•„์›ƒ
docker logout

Docker Hub์—์„œ ๋กœ๊ทธ์•„์›ƒ

docker logout myregistry.local:5000

๊ฐœ์ธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ๋กœ๊ทธ์•„์›ƒ

HEALTHCHECK ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ๋ฅผ ์ž๋™์œผ๋กœ ํ™•์ธํ•˜๋Š” Dockerfile ์ง€์‹œ์–ด
HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD curl -f http://localhost/ || exit 1

30์ดˆ๋งˆ๋‹ค ์„œ๋น„์Šค ๊ฐ€์šฉ์„ฑ ํ™•์ธ ํ—ฌ์Šค์ฒดํฌ ์ถ”๊ฐ€

docker inspect --format='{{json .State.Health}}' container_name

์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์˜ ํ—ฌ์Šค์ฒดํฌ ์ƒํƒœ ํ™•์ธ

๐Ÿ”Œ ๋„คํŠธ์›Œํฌ์™€ ๋ณผ๋ฅจ

๋ช…๋ น์–ด

์˜ˆ์‹œ

์„ค๋ช…

docker network ls ๋ชจ๋“  Docker ๋„คํŠธ์›Œํฌ ๋‚˜์—ด
docker network ls

์ƒ์„ฑ๋œ ๋ชจ๋“  Docker ๋„คํŠธ์›Œํฌ ํ‘œ์‹œ

docker network ls --filter driver=bridge

bridge ๋“œ๋ผ์ด๋ฒ„ ๋„คํŠธ์›Œํฌ๋งŒ ํ‘œ์‹œ

docker network ls --format '{{.Name}}'

๋„คํŠธ์›Œํฌ ์ด๋ฆ„๋งŒ ํ‘œ์‹œ

docker network create ์ƒˆ Docker ๋„คํŠธ์›Œํฌ ์ƒ์„ฑ
docker network create my_net

my_net ์ด๋ฆ„์œผ๋กœ ๊ธฐ๋ณธ ์„ค์ • ๋„คํŠธ์›Œํฌ ์ƒ์„ฑ

docker network create --driver bridge my_bridge_net

bridge ๋“œ๋ผ์ด๋ฒ„๋กœ ๋„คํŠธ์›Œํฌ ์ƒ์„ฑ

docker network create --subnet=192.168.10.0/24 my_custom_net

์„œ๋ธŒ๋„ท ์ง€์ •ํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ์ƒ์„ฑ

docker network connect ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ
docker network connect my_net container

container ์ปจํ…Œ์ด๋„ˆ๋ฅผ my_net ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ

docker network connect --alias db_net my_net container

๋ณ„์นญ db_net์œผ๋กœ ์—ฐ๊ฒฐ

docker network disconnect ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„คํŠธ์›Œํฌ์—์„œ ๋ถ„๋ฆฌ
docker network disconnect my_net container

container ์ปจํ…Œ์ด๋„ˆ๋ฅผ my_net์—์„œ ๋ถ„๋ฆฌ

docker volume ls ๋ชจ๋“  Docker ๋ณผ๋ฅจ ๋‚˜์—ด
docker volume ls

๋ชจ๋“  Docker ๋ณผ๋ฅจ ํ‘œ์‹œ

docker volume ls --filter dangling=true

์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ณผ๋ฅจ ํ‘œ์‹œ

docker volume create ์ƒˆ Docker ๋ณผ๋ฅจ ์ƒ์„ฑ
docker volume create my_vol

my_vol ์ด๋ฆ„์˜ ๋ณผ๋ฅจ ์ƒ์„ฑ

docker volume create --driver local --opt type=tmpfs my_tmp_vol

tmpfs๋ฅผ ์‚ฌ์šฉํ•ด ์ž„์‹œ ๋ณผ๋ฅจ ์ƒ์„ฑ

docker volume inspect ๋ณผ๋ฅจ์˜ ์„ธ๋ถ€ ์ •๋ณด ํ‘œ์‹œ
docker volume inspect my_vol

my_vol ๋ณผ๋ฅจ์„ JSON ํ˜•์‹์œผ๋กœ ํ‘œ์‹œ

docker volume rm ๋ณผ๋ฅจ ์‚ญ์ œ
docker volume rm my_vol

my_vol ๋ณผ๋ฅจ ์‚ญ์ œ

docker volume rm $(docker volume ls -qf dangling=true)

์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ๋ณผ๋ฅจ ์‚ญ์ œ

๐Ÿงฉ ๋„์ปค ํ”Œ๋Ÿฌ๊ทธ์ธ

๋ช…๋ น์–ด

์˜ˆ์‹œ

์„ค๋ช…

docker plugin ls ์„ค์น˜๋œ Docker ํ”Œ๋Ÿฌ๊ทธ์ธ ๋‚˜์—ด
docker plugin ls

๋ชจ๋“  ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ์ƒํƒœ ํ‘œ์‹œ

docker plugin install ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ Docker ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜
docker plugin install vieux/sshfs

SSHFS ๋ณผ๋ฅจ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜

docker plugin install store/weaveworks/net-plugin:latest_release

Weave ๋„คํŠธ์›Œํฌ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜

docker plugin disable ์„ค์น˜๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋น„ํ™œ์„ฑํ™”
docker plugin disable vieux/sshfs

SSHFS ํ”Œ๋Ÿฌ๊ทธ์ธ ๋น„ํ™œ์„ฑํ™”

docker plugin enable ๋น„ํ™œ์„ฑํ™”๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ ํ™œ์„ฑํ™”
docker plugin enable vieux/sshfs

SSHFS ํ”Œ๋Ÿฌ๊ทธ์ธ ํ™œ์„ฑํ™”

docker plugin rm Docker ํ”Œ๋Ÿฌ๊ทธ์ธ ์ œ๊ฑฐ
docker plugin rm vieux/sshfs

SSHFS ํ”Œ๋Ÿฌ๊ทธ์ธ ์ œ๊ฑฐ

๐Ÿ“‹ ๋„์ปค ์ปดํฌ์ฆˆ

๋ช…๋ น์–ด

์˜ˆ์‹œ

์„ค๋ช…

docker compose up docker-compose.yml์— ์ •์˜๋œ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘
docker compose up

ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๋ชจ๋“  ์„œ๋น„์Šค๋ฅผ ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ๋กœ ์‹œ์ž‘

docker compose up -d

์„œ๋น„์Šค๋ฅผ ๋ถ„๋ฆฌ(detached) ๋ชจ๋“œ(๋ฐฑ๊ทธ๋ผ์šด๋“œ)๋กœ ์‹œ์ž‘

docker compose up --build

์„œ๋น„์Šค ์‹œ์ž‘ ์ „์— ์ด๋ฏธ์ง€ ๋นŒ๋“œ

docker compose down up์œผ๋กœ ์ƒ์„ฑ๋œ ์ปจํ…Œ์ด๋„ˆ, ๋„คํŠธ์›Œํฌ, ๋ณผ๋ฅจ ์ค‘์ง€ ๋ฐ ์ œ๊ฑฐ
docker compose down

์‹คํ–‰ ์ค‘์ธ ๋ชจ๋“  ์„œ๋น„์Šค ์ค‘์ง€ ๋ฐ ๊ด€๋ จ ๋ฆฌ์†Œ์Šค ์ œ๊ฑฐ

docker compose down --volumes

Compose๊ฐ€ ์ƒ์„ฑํ•œ ๋ณผ๋ฅจ๋„ ์ œ๊ฑฐ

docker compose down --rmi all

Compose๊ฐ€ ์ƒ์„ฑํ•œ ์ด๋ฏธ์ง€๋„ ์ œ๊ฑฐ

docker compose logs ๋ชจ๋“  ์„œ๋น„์Šค ๋˜๋Š” ํŠน์ • ์„œ๋น„์Šค์˜ ๋กœ๊ทธ ๋ณด๊ธฐ
docker compose logs

๋ชจ๋“  ์„œ๋น„์Šค ๋กœ๊ทธ ํ‘œ์‹œ

docker compose logs -f

์‹ค์‹œ๊ฐ„์œผ๋กœ ๋กœ๊ทธ ํŒ”๋กœ์šฐ

docker compose logs web

web ์„œ๋น„์Šค์˜ ๋กœ๊ทธ๋งŒ ํ‘œ์‹œ

docker compose exec ์‹คํ–‰ ์ค‘์ธ ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋ช…๋ น ์‹คํ–‰
docker compose exec web bash

web ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ๋Œ€ํ™”ํ˜• bash ์…ธ ์‹คํ–‰

docker compose exec db ls /var/lib/postgresql

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปจํ…Œ์ด๋„ˆ์—์„œ ls ๋ช…๋ น ์‹คํ–‰

docker compose exec -d worker touch /tmp/done

worker ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ๋ถ„๋ฆฌ ๋ชจ๋“œ๋กœ ๋ช…๋ น ์‹คํ–‰

docker compose build ์„œ๋น„์Šค ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋˜๋Š” ์žฌ๋นŒ๋“œ
docker compose build

docker-compose.yml์— ์ •์˜๋œ ๋ชจ๋“  ์ด๋ฏธ์ง€ ๋นŒ๋“œ

docker compose build web

web ์„œ๋น„์Šค ์ด๋ฏธ์ง€ ๋นŒ๋“œ

docker compose build --no-cache

์บ์‹œ ์—†์ด ์ด๋ฏธ์ง€ ๋นŒ๋“œ

docker compose ps ๋ชจ๋“  ์„œ๋น„์Šค์™€ ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ ํ‘œ์‹œ
docker compose ps -a

์ค‘์ง€๋œ ์ปจํ…Œ์ด๋„ˆ ํฌํ•จ ๋ชจ๋‘ ํ‘œ์‹œ

docker compose ps --services

์„œ๋น„์Šค ์ด๋ฆ„๋งŒ ํ‘œ์‹œ

docker compose pull ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์„œ๋น„์Šค ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ/์—…๋ฐ์ดํŠธ
docker compose pull web

web ์„œ๋น„์Šค์˜ ์ด๋ฏธ์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ

docker compose pull --ignore-pull-failures

์ผ๋ถ€ ์ด๋ฏธ์ง€๊ฐ€ ์‹คํŒจํ•ด๋„ ๊ณ„์† ๊ฐ€์ ธ์˜ค๊ธฐ

docker compose restart ๋ชจ๋“  ์„œ๋น„์Šค ๋˜๋Š” ์ง€์ •ํ•œ ์„œ๋น„์Šค ์žฌ์‹œ์ž‘
docker compose restart db

db ์„œ๋น„์Šค๋งŒ ์žฌ์‹œ์ž‘

docker compose restart -t 10

10์ดˆ ํƒ€์ž„์•„์›ƒ์œผ๋กœ ์„œ๋น„์Šค ์žฌ์‹œ์ž‘

docker compose config ์ตœ์ข… Compose ์„ค์ •์„ YAML ํ˜•์‹์œผ๋กœ ํ‘œ์‹œ
docker compose config --services

์„ค์ •์— ์ •์˜๋œ ๋ชจ๋“  ์„œ๋น„์Šค ๋‚˜์—ด

docker compose config --volumes

์„ค์ •์— ์ •์˜๋œ ๋ชจ๋“  ๋ณผ๋ฅจ ๋‚˜์—ด

docker compose start ์ค‘์ง€๋œ ์„œ๋น„์Šค๋ฅผ ์ปจํ…Œ์ด๋„ˆ ์žฌ์ƒ์„ฑ ์—†์ด ์‹œ์ž‘
docker compose start web

web ์„œ๋น„์Šค ์‹œ์ž‘

docker compose start db api

์—ฌ๋Ÿฌ ์„œ๋น„์Šค ํ•œ ๋ฒˆ์— ์‹œ์ž‘

docker compose stop ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ๊ฑฐํ•˜์ง€ ์•Š๊ณ  ์„œ๋น„์Šค ์ค‘์ง€
docker compose stop web

web ์„œ๋น„์Šค ์ค‘์ง€

docker compose stop -t 5

5์ดˆ ํƒ€์ž„์•„์›ƒ์œผ๋กœ ์„œ๋น„์Šค ์ค‘์ง€

๐Ÿ“ค ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฐ ๊ฐ€์ ธ์˜ค๊ธฐ

๋ช…๋ น์–ด

์˜ˆ์‹œ

์„ค๋ช…

docker image save ํ•˜๋‚˜ ์ด์ƒ์˜ Docker ์ด๋ฏธ์ง€๋ฅผ tar ์•„์นด์ด๋ธŒ๋กœ ์ €์žฅํ•˜์—ฌ ๋‚˜์ค‘์— ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์ „์†ก
docker save -o image.tar my_img:tag

Docker ์ด๋ฏธ์ง€๋ฅผ tar ์•„์นด์ด๋ธŒ ํŒŒ์ผ๋กœ ์ €์žฅ

docker save my_image > my_image.tar

์ด๋ฏธ์ง€๋ฅผ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๋Š” ๋Œ€์ฒด ๋ฐฉ๋ฒ•

docker save -o redis_latest.tar redis:latest

ํŠน์ • Redis ์ด๋ฏธ์ง€๋ฅผ ํŒŒ์ผ๋กœ ์ €์žฅ

docker image load ์ด์ „์— ์ €์žฅ๋œ tar ์•„์นด์ด๋ธŒ์—์„œ Docker ์ด๋ฏธ์ง€ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
docker load < image.tar

tar ์•„์นด์ด๋ธŒ ํŒŒ์ผ์—์„œ Docker ์ด๋ฏธ์ง€ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

docker load --input redis_latest.tar

๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํŒŒ์ผ์„ ์ง€์ •ํ•˜์—ฌ ์ด๋ฏธ์ง€ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

docker load --quiet < my_image.tar

์ง„ํ–‰ ์ถœ๋ ฅ ์—†์ด ์ด๋ฏธ์ง€ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

docker container export ์ปจํ…Œ์ด๋„ˆ ํŒŒ์ผ์‹œ์Šคํ…œ์„ ์ด๋ฏธ์ง€ ๊ธฐ๋ก์ด๋‚˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์—†์ด tar ์•„์นด์ด๋ธŒ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ
docker export container > file.tar

์ปจํ…Œ์ด๋„ˆ ํŒŒ์ผ์‹œ์Šคํ…œ์„ ์•„์นด์ด๋ธŒ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ

docker export my_container > my_container_fs.tar

์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ

docker export -o container_fs.tar container_id

-o ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ID๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ

docker image import ํŒŒ์ผ์‹œ์Šคํ…œ tar ์•„์นด์ด๋ธŒ์—์„œ ์ƒˆ ์ด๋ฏธ์ง€ ์ƒ์„ฑ
docker import file.tar new_img

์•„์นด์ด๋ธŒ ํŒŒ์ผ์„ ์ƒˆ Docker ์ด๋ฏธ์ง€๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ

docker import https://example.com/image.tar my_new_image

URL์—์„œ ์ง์ ‘ ์ด๋ฏธ์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ

docker import - my_image < file.tar

ํ‘œ์ค€ ์ž…๋ ฅ์—์„œ ์ด๋ฏธ์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ

๐Ÿงน ์ •๋ฆฌ ๋ฐ ์ง„๋‹จ

๋ช…๋ น์–ด

์˜ˆ์‹œ

์„ค๋ช…

docker system df Docker ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰ ํ‘œ์‹œ: ๋ณผ๋ฅจ, ์ด๋ฏธ์ง€, ์ปจํ…Œ์ด๋„ˆ, ๋นŒ๋“œ ์บ์‹œ
docker system df -v

๊ฐ ์ด๋ฏธ์ง€, ์ปจํ…Œ์ด๋„ˆ, ๋ณผ๋ฅจ์˜ ์ž์„ธํ•œ ์ •๋ณด ์ถœ๋ ฅ

docker system df --format '{{json .}}'

JSON ํ˜•์‹์œผ๋กœ ์ •๋ณด ์ถœ๋ ฅ

docker system prune ๋ชจ๋“  ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” Docker ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ: ์ค‘์ง€๋œ ์ปจํ…Œ์ด๋„ˆ, ๋ฏธ์‚ฌ์šฉ ๋„คํŠธ์›Œํฌ, ์ค‘๊ฐ„ ์ด๋ฏธ์ง€, ๋นŒ๋“œ ์บ์‹œ
docker system prune -a

์ค‘๊ฐ„ ์ด๋ฏธ์ง€ ํฌํ•จ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด๋ฏธ์ง€ ์ œ๊ฑฐ

docker system prune --volumes

๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค์™€ ํ•จ๊ป˜ ๋ฏธ์‚ฌ์šฉ ๋ณผ๋ฅจ ์ œ๊ฑฐ

docker image prune ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” Docker ์ด๋ฏธ์ง€ ์ œ๊ฑฐ (dangling ๋ ˆ์ด์–ด ํฌํ•จ)
docker image prune -a

dangling ํฌํ•จ ๋ชจ๋“  ๋ฏธ์‚ฌ์šฉ ์ด๋ฏธ์ง€ ์ œ๊ฑฐ

docker image prune --filter "until=24h"

24์‹œ๊ฐ„ ์ด์ƒ ๋œ ์ด๋ฏธ์ง€ ์ œ๊ฑฐ

docker container prune ํ•„ํ„ฐ์— ๋งž๋Š” ์ค‘์ง€๋œ ์ปจํ…Œ์ด๋„ˆ ๋˜๋Š” ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ชจ๋‘ ์ œ๊ฑฐ
docker container prune --filter "until=24h"

24์‹œ๊ฐ„ ์ด์ƒ ๋œ ์ค‘์ง€๋œ ์ปจํ…Œ์ด๋„ˆ ์ œ๊ฑฐ

docker container prune --force

ํ™•์ธ ์—†์ด ์ œ๊ฑฐ

๐Ÿ ๋„์ปค ์Šค์›œ

๋ช…๋ น์–ด

์˜ˆ์‹œ

์„ค๋ช…

docker swarm init ํ˜„์žฌ ๋…ธ๋“œ์—์„œ ์ƒˆ Docker Swarm ํด๋Ÿฌ์Šคํ„ฐ ์ดˆ๊ธฐํ™”
docker swarm init --advertise-addr 192.168.1.100

IP ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ ์ดˆ๊ธฐํ™”

docker swarm init --listen-addr 0.0.0.0:2377

๋ฆฌ์Šค๋‹ ํฌํŠธ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ดˆ๊ธฐํ™”

docker service create Swarm ํด๋Ÿฌ์Šคํ„ฐ์— ์ƒˆ ์„œ๋น„์Šค ์ƒ์„ฑ
docker service create --name nginx nginx

Swarm์—์„œ Nginx ์„œ๋น„์Šค ์ƒ์„ฑ

docker service create --replicas 3 --name web webserver

3๊ฐœ์˜ ๋ณต์ œ๋ณธ์œผ๋กœ ์„œ๋น„์Šค ์ƒ์„ฑ

docker service create --name redis --publish 6379:6379 redis

ํฌํŠธ ๋งคํ•‘์œผ๋กœ ์„œ๋น„์Šค ์ƒ์„ฑ

docker stack deploy Compose ํŒŒ์ผ ๊ธฐ๋ฐ˜์œผ๋กœ Swarm ํด๋Ÿฌ์Šคํ„ฐ์— ์Šคํƒ ๋ฐฐํฌ
docker stack deploy -c docker-compose.yml mystack

Compose ํŒŒ์ผ์—์„œ ์Šคํƒ ๋ฐฐํฌ

docker stack deploy --with-registry-auth -c compose.yml mystack

๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์ธ์ฆ ์ „๋‹ฌ๊ณผ ํ•จ๊ป˜ ๋ฐฐํฌ

docker stack deploy -c swarm-compose.yml mystack

๋Œ€์ฒด Compose ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํƒ ๋ฐฐํฌ

docker stack rm Swarm ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํ•˜๋‚˜ ์ด์ƒ์˜ ์Šคํƒ ์ œ๊ฑฐ
docker stack rm mystack

mystack ์Šคํƒ ์ œ๊ฑฐ

docker stack rm

๋ชจ๋“  ์Šคํƒ ์ œ๊ฑฐ (๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ)

docker stack rm mystack && docker swarm leave --force

์Šคํƒ ์ œ๊ฑฐ ํ›„ Swarm์—์„œ ํƒˆํ‡ด

๐Ÿ’ผ ๊ณ ๊ธ‰ Docker ์‚ฌ์šฉ

๐Ÿš€ ์ „๋ฌธ๊ฐ€์šฉ Docker ๋ช…๋ น์–ด

๋ช…๋ น์–ด

์˜ˆ์‹œ

์„ค๋ช…

docker buildx docker build๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ณ ๊ธ‰ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋„๊ตฌ. ๋‹ค์ค‘ ํ”Œ๋žซํผ, ์บ์‹ฑ, ๋ณ‘๋ ฌ ๋นŒ๋“œ ๋ฐ ๋‹ค์–‘ํ•œ ํ˜•์‹์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์ง€์›. CI/CD ๋ฐ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๊ฐœ๋ฐœ์— ์œ ์šฉ
docker buildx build --platform linux/arm64,linux/amd64 -t myimg:multi .

๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ ์ด๋ฏธ์ง€ ๋นŒ๋“œ (ARM๊ณผ x86 ๋™์‹œ์—)

docker buildx build --load -t localimg .

์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ๋กœ์ปฌ Docker ์—”์ง„ ์บ์‹œ์— ๋กœ๋“œ

docker buildx build --push --platform linux/amd64,linux/arm64 -t repo/app:latest .

๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ ์ด๋ฏธ์ง€๋ฅผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋นŒ๋“œ ๋ฐ ํ‘ธ์‹œ

docker context ์›๊ฒฉ ๋˜๋Š” ๋‹ค์ค‘ ํ™˜๊ฒฝ ์ž‘์—…์„ ์œ„ํ•œ Docker ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ. ๋กœ์ปฌ๊ณผ ์›๊ฒฉ Docker ์—”์ง„ ๊ฐ„ ๋น ๋ฅธ ์ „ํ™˜ ๊ฐ€๋Šฅ
docker context create myremote --docker "host=ssh://user@host"

์›๊ฒฉ Docker ํ˜ธ์ŠคํŠธ์— ์—ฐ๊ฒฐํ•  ์ปจํ…์ŠคํŠธ ์ƒ์„ฑ

docker context use myremote

์›๊ฒฉ ์ปจํ…์ŠคํŠธ๋กœ ์ „ํ™˜

docker context ls

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปจํ…์ŠคํŠธ์™€ ํ™œ์„ฑ ์ปจํ…์ŠคํŠธ ๋‚˜์—ด

docker system events ์‹ค์‹œ๊ฐ„์œผ๋กœ Docker ์ด๋ฒคํŠธ ์ˆ˜์‹ . ์ด๋ฒคํŠธ ์œ ํ˜•๋ณ„ ํ•„ํ„ฐ๋ง ์ง€์› (์˜ˆ: ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘). ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์ž๋™ํ™”์— ์œ ์šฉ
docker events --filter 'event=start'

์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ์ด๋ฒคํŠธ๋งŒ ํ‘œ์‹œ

docker events --since 1h --until 10m

์ง€๋‚œ 1์‹œ๊ฐ„๋ถ€ํ„ฐ 10๋ถ„ ์ „๊นŒ์ง€ ์ด๋ฒคํŠธ ํ‘œ์‹œ

docker events --filter 'type=network'

๋„คํŠธ์›Œํฌ ๊ด€๋ จ ์ด๋ฒคํŠธ๋งŒ ํ‘œ์‹œ

docker events --filter 'image=nginx'

nginx ์ด๋ฏธ์ง€์™€ ๊ด€๋ จ๋œ ์ด๋ฒคํŠธ ํ‘œ์‹œ

docker container update ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฆฌ์†Œ์Šค ์ œํ•œ ๋ฐ ์„ค์ •์„ ์žฌ์‹œ์ž‘ ์—†์ด ๋ณ€๊ฒฝ
docker update --cpus 2 --memory 1g my_container

CPU 2๊ฐœ์™€ RAM 1GB๋กœ ์ œํ•œ

docker update --restart unless-stopped my_container

์ž๋™ ์žฌ์‹œ์ž‘ ์ •์ฑ…์„ unless-stopped๋กœ ์„ค์ •

docker update --pids-limit 200 my_container

ํ”„๋กœ์„ธ์Šค ์ˆ˜๋ฅผ 200์œผ๋กœ ์ œํ•œ

docker container diff ์ปจํ…Œ์ด๋„ˆ์˜ ํŒŒ์ผ์‹œ์Šคํ…œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์›๋ณธ ์ด๋ฏธ์ง€์™€ ๋น„๊ตํ•˜์—ฌ ํ‘œ์‹œ. ๋””๋ฒ„๊น… ๋ฐ ๊ฐ์‚ฌ์— ์œ ์šฉ
docker diff my_container

์ปจํ…Œ์ด๋„ˆ์˜ ๋ชจ๋“  ํŒŒ์ผ์‹œ์Šคํ…œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ํ‘œ์‹œ

docker diff my_container | grep '^A'

์ถ”๊ฐ€๋œ ํŒŒ์ผ๋งŒ ํ‘œ์‹œ (A โ€” Added)

docker image history ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด์˜ ํžˆ์Šคํ† ๋ฆฌ ํ‘œ์‹œ: ๋นŒ๋“œ ๋ช…๋ น, ๊ฐ ๋ ˆ์ด์–ด ํฌ๊ธฐ ๋ฐ ์ƒ์„ฑ ์‹œ๊ฐ„. ์ตœ์ ํ™” ๋ฐ ๊ฐ์‚ฌ์— ์œ ์šฉ
docker history my_image

์ด๋ฏธ์ง€์˜ ๋ ˆ์ด์–ด ํžˆ์Šคํ† ๋ฆฌ ํ‘œ์‹œ

docker history --no-trunc my_image

์ƒ๋žต ์—†์ด ์ „์ฒด ๋นŒ๋“œ ๋ช…๋ น ํ‘œ์‹œ

docker history --format "{{.CreatedBy}}: {{.Size}}" my_image

๋นŒ๋“œ ๋ช…๋ น๊ณผ ๋ ˆ์ด์–ด ํฌ๊ธฐ๋งŒ ์ถœ๋ ฅ

๐Ÿ›  ์œ ์šฉํ•œ Docker ํ™œ์šฉ ๋ฐ ์ž๋™ํ™”

  • ์ด๋ฏธ์ง€ ํฌ๊ธฐ ์ตœ์†Œํ™”
    alpine ๋˜๋Š” scratch ๊ฐ™์€ ์ตœ์†Œ ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉ.
    ๋ ˆ์ด์–ด๋ฅผ ํ•ฉ์น˜๋ ค๋ฉด ๋นŒ๋“œ ์‹œ --squash ์˜ต์…˜ ์‚ฌ์šฉ (์‹คํ—˜์  ๊ธฐ๋Šฅ ํ•„์š”).
    ๋˜ํ•œ ์ž„์‹œ ํŒŒ์ผ๊ณผ ์บ์‹œ๋Š” ํ•˜๋‚˜์˜ ๋ ˆ์ด์–ด์—์„œ ์ œ๊ฑฐ:

    RUN apk add --no-cache curl && rm -rf /var/cache/apk/*
  • ๋ ˆ์ด์–ด ์ˆ˜ ์ตœ์†Œํ™”
    ๋ช…๋ น์„ ํ•˜๋‚˜์˜ RUN์— ๊ฒฐํ•ฉํ•˜์—ฌ ๋ ˆ์ด์–ด ์ˆ˜์™€ ์ตœ์ข… ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋ฅผ ์ค„์ž„:

    RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
  • Dockerfile ๋นŒ๋“œ ์ตœ์ ํ™”
    ๋ฉ€ํ‹ฐ ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ตœ์ข… ์ด๋ฏธ์ง€์— ํ•„์š”ํ•œ ํŒŒ์ผ๋งŒ ๋‚จ๊ธฐ๊ธฐ.
    ๋จผ์ € ์˜์กด์„ฑ์„ ๋ณต์‚ฌ ๋ฐ ์„ค์น˜ํ•œ ํ›„ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌ โ€” ์ด๋Š” ๋ ˆ์ด์–ด ์บ์‹ฑ์„ ๊ฐœ์„ ํ•˜๊ณ  ๋นŒ๋“œ ์†๋„๋ฅผ ๋†’์ž„.

  • ๋น„๋ฐ€๊ณผ ์„ค์ • ๋ถ„๋ฆฌ
    .env ํŒŒ์ผ, API ํ‚ค, ๊ฐœ์ธ ์ธ์ฆ์„œ๋ฅผ ์ด๋ฏธ์ง€ ๋‚ด๋ถ€์— ์ €์žฅํ•˜์ง€ ๋ง ๊ฒƒ.
    ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•:

    • docker secret (Swarm์—์„œ)
    • ํ™˜๊ฒฝ ๋ณ€์ˆ˜ (-e VAR=value ๋˜๋Š” .env)
    • ๊ตฌ์„ฑ์„ ์œ„ํ•œ ์™ธ๋ถ€ ๋ณผ๋ฅจ

  • ๋นŒ๋“œ ์‹œํฌ๋ฆฟ (BuildKit)
    ๋นŒ๋“œ ์ค‘ ๋ณด์•ˆ์„ ์œ„ํ•ด --secret ํ”Œ๋ž˜๊ทธ ์‚ฌ์šฉ:

    docker buildx build --secret id=mysecret,src=./secret.txt .

    Dockerfile์—์„œ ์‹œํฌ๋ฆฟ์€ /run/secrets/mysecret ๊ฒฝ๋กœ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ:

    RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret

    ๐Ÿ›ก ์ด ๋ฐฉ์‹์€ ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด์— ์‹œํฌ๋ฆฟ์ด ์ €์žฅ๋˜์ง€ ์•Š๋„๋ก ํ•จ.

  • ๋ฃจํŠธ๋ฆฌ์Šค Docker
    ๋ฃจํŠธ ๊ถŒํ•œ ์—†์ด Docker ์‹คํ–‰ ์‹œ ๋ณด์•ˆ์ด ํ–ฅ์ƒ๋˜๊ณ  ํ˜ธ์ŠคํŠธ ์†์ƒ ์œ„ํ—˜์ด ์ค„์–ด๋“ฆ.
    ํ™œ์„ฑํ™” ๋ฐฉ๋ฒ•:

    dockerd-rootless-setuptool.sh install
    export PATH=/usr/bin:$PATH

    ํ™•์ธ:

    docker info | grep Rootless

    โš  ์ผ๋ถ€ ๊ธฐ๋Šฅ(์˜ˆ: 1024 ๋ฏธ๋งŒ ํฌํŠธ ํฌ์›Œ๋”ฉ)์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ.

  • ์ด๋ฏธ์ง€ ์ทจ์•ฝ์  ์Šค์บ”
    ๋‚ด์žฅ ๋„๊ตฌ ์‚ฌ์šฉ:

    docker scan my_image

    ๋˜๋Š” ์ƒˆ๋กœ์šด CLI ์‚ฌ์šฉ:

    docker scout cves my_image

    ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€์™€ ์˜์กด์„ฑ์˜ ์ทจ์•ฝ์ ์„ ํƒ์ง€ํ•  ์ˆ˜ ์žˆ์Œ.

  • ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ ์ œํ•œ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง
    ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ, CPU, ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜๋กœ ์ œํ•œ:

    docker run --memory=512m --cpus="1.5" --pids-limit=200 myimage

    ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฆฌ์†Œ์Šค ๊ณผ๋„ ์‚ฌ์šฉ ๋ฐฉ์ง€.
    ๋˜ํ•œ I/O ์ œํ•œ ๊ฐ€๋Šฅ:

    docker run --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb myimage

    ๋””์Šคํฌ ์„œ๋ธŒ์‹œ์Šคํ…œ ๊ณผ๋ถ€ํ•˜ ๋ฐฉ์ง€๊ฐ€ ํ•„์š”ํ•œ ์ปจํ…Œ์ด๋„ˆ์— ์œ ์šฉ.

  • ์ž๋™ ์ •๋ฆฌ
    ์ •๊ธฐ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด๋ฏธ์ง€, ์ปจํ…Œ์ด๋„ˆ, ๋ณผ๋ฅจ, ๋„คํŠธ์›Œํฌ ์ œ๊ฑฐ:

    docker system prune -af --volumes

    โš  ์ฃผ์˜: ์ด ๋ช…๋ น์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

    ์„ ํƒ์ ์œผ๋กœ ์ •๋ฆฌํ•˜๋ ค๋ฉด:

    docker image prune --filter "until=24h"
  • CI/CD ํ†ตํ•ฉ
    GitHub Actions, GitLab CI, Jenkins ํŒŒ์ดํ”„๋ผ์ธ์— ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ํ†ตํ•ฉ.
    ์˜ˆ์‹œ GitHub Actions ๋‹จ๊ณ„:

    - run: docker build -t myapp:${GITHUB_SHA} .
    - run: docker push myapp:${GITHUB_SHA}
  • ๋กœ๊ทธ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง
    ๋กœ๊ทธ ๋“œ๋ผ์ด๋ฒ„(--log-driver)๋ฅผ ELK, Loki, Splunk์™€ ๊ฐ™์€ ์ค‘์•™ ์‹œ์Šคํ…œ์— ์—ฐ๊ฒฐ.
    ์ปจํ…Œ์ด๋„ˆ ๋ฉ”ํŠธ๋ฆญ์€ Prometheus + cAdvisor ์‚ฌ์šฉ.

  • ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ
    docker-compose.override.yml์„ ์‚ฌ์šฉํ•ด ๊ฐœ๋ฐœ ๋ฐ ํ”„๋กœ๋•์…˜ ๊ตฌ์„ฑ์„ ๋ถ„๋ฆฌ.
    ๊ณ ๊ฐ€์šฉ์„ฑ๊ณผ ํ™•์žฅ์„ ์œ„ํ•ด:

    • Docker Swarm
    • Kubernetes

๐Ÿž Docker ์ปจํ…Œ์ด๋„ˆ ๋””๋ฒ„๊น… ๋ฐ ํ”„๋กœํŒŒ์ผ๋ง

๋ช…๋ น์–ด

์˜ˆ์‹œ

์„ค๋ช…

docker container exec ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ๋Œ€ํ™”ํ˜• ์ ‘๊ทผ ๋˜๋Š” ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์—์„œ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰ ๊ฐ€๋Šฅ
docker exec -it my_container bash

์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ๋Œ€ํ™”ํ˜• ํ„ฐ๋ฏธ๋„(bash) ์‹œ์ž‘

docker exec -it my_container sh

์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ์ตœ์†Œ ์…ธ ์‹œ์ž‘ (bash๊ฐ€ ์—†์„ ๊ฒฝ์šฐ)

docker exec my_container ls /app

๋Œ€ํ™”ํ˜• ๋ชจ๋“œ ์—†์ด ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ๋ช…๋ น ์‹คํ–‰

docker container logs ์ง€์ •๋œ ์ปจํ…Œ์ด๋„ˆ์˜ ๋กœ๊ทธ๋ฅผ ํ‘œ์‹œํ•˜์—ฌ ์ž‘๋™ ๊ด€๋ จ ์ถœ๋ ฅ๊ณผ ์ด๋ฒคํŠธ๋ฅผ ํ™•์ธํ•˜๊ณ  ์ง„๋‹จ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฐ€๋Šฅ
docker logs -f --tail 100 my_container

์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ์œผ๋กœ ์ตœ๊ทผ 100์ค„ ๋กœ๊ทธ ๋ณด๊ธฐ

docker logs my_container

์ปจํ…Œ์ด๋„ˆ์˜ ๋ชจ๋“  ๋กœ๊ทธ ํ‘œ์‹œ

docker logs --since 1h my_container

์ง€๋‚œ 1์‹œ๊ฐ„์˜ ๋กœ๊ทธ ๋ณด๊ธฐ

docker inspect ์ปจํ…Œ์ด๋„ˆ, ์ด๋ฏธ์ง€, ๋„คํŠธ์›Œํฌ ๋“ฑ Docker ๊ฐ์ฒด์˜ ๊ตฌ์„ฑ ๋ฐ ์ƒํƒœ๋ฅผ ํฌํ•จํ•œ ์ƒ์„ธ ์ •๋ณด๋ฅผ JSON ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅ
docker inspect my_container

์ปจํ…Œ์ด๋„ˆ์˜ ์ „์ฒด JSON ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ

docker inspect --format '{{.State.Pid}}' my_container

ํ˜ธ์ŠคํŠธ์—์„œ ์ปจํ…Œ์ด๋„ˆ ๋ฉ”์ธ ํ”„๋กœ์„ธ์Šค์˜ PID ํ™•์ธ

docker inspect --format '{{.NetworkSettings.IPAddress}}' my_container

์ปจํ…Œ์ด๋„ˆ์˜ IP ์ฃผ์†Œ ํ‘œ์‹œ

nsenter (with strace) Linux ์œ ํ‹ธ๋ฆฌํ‹ฐ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค(์—ฌ๊ธฐ์„œ๋Š” ์ปจํ…Œ์ด๋„ˆ)์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์ง„์ž…. strace์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ ๋‚ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ถ”์  ๊ฐ€๋Šฅ
nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid strace -p 1

์ปจํ…Œ์ด๋„ˆ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์ง„์ž…ํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค 1์˜ ์‹œ์Šคํ…œ ํ˜ธ์ถœ ์ถ”์ 

nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid bash

์ปจํ…Œ์ด๋„ˆ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์•ˆ์—์„œ bash ์…ธ ์—ด๊ธฐ

nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --net netstat -tulnp

์ปจํ…Œ์ด๋„ˆ ๋‚ด ์—ด๋ฆฐ ํฌํŠธ ํ™•์ธ

tcpdump (inside container) ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ์บก์ฒ˜ ๋ฐ ๋ถ„์„์šฉ ์ฝ˜์†” ๋„๊ตฌ. ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ ์ง„๋‹จ, ํŒจํ‚ท ๋ถ„์„, ์—ฐ๊ฒฐ ๋ชจ๋‹ˆํ„ฐ๋ง์— ์‚ฌ์šฉ
docker exec -it my_container tcpdump -i any

์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ์บก์ฒ˜ ๋ฐ ๋ถ„์„

docker exec -it my_container tcpdump -nn port 80

ํฌํŠธ 80์˜ ํŠธ๋ž˜ํ”ฝ๋งŒ ์บก์ฒ˜

docker exec -it my_container tcpdump -w /tmp/dump.pcap

ํŠธ๋ž˜ํ”ฝ์„ ํŒŒ์ผ์— ์ €์žฅํ•˜์—ฌ ๋‚˜์ค‘์— ๋ถ„์„

docker container stats ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•ด CPU, ๋ฉ”๋ชจ๋ฆฌ, ๋„คํŠธ์›Œํฌ, ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ‘œ์‹œ
docker stats my_container

์ปจํ…Œ์ด๋„ˆ์˜ ์‹ค์‹œ๊ฐ„ CPU, ๋ฉ”๋ชจ๋ฆฌ, ๋„คํŠธ์›Œํฌ, ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰ ํ‘œ์‹œ

docker stats

๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์˜ ํ†ต๊ณ„ ํ‘œ์‹œ

docker stats --no-stream

ํ•œ ๋ฒˆ๋งŒ ์ถœ๋ ฅํ•˜๊ณ  ์ข…๋ฃŒ

docker container top ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ‘œ์‹œ (ps์™€ ์œ ์‚ฌ)ํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ํ™œ๋™ ๋ถ„์„
docker top my_container

์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ํ‘œ์‹œ

docker top my_container aux

ps aux์™€ ๊ฐ™์€ ๋Œ€์ฒด ์ถœ๋ ฅ ํ˜•์‹ ์‚ฌ์šฉ

docker top my_container -eo pid,cmd

ํ”„๋กœ์„ธ์Šค์˜ PID์™€ ๋ช…๋ น๋งŒ ํ‘œ์‹œ

docker diff ์ปจํ…Œ์ด๋„ˆ ํŒŒ์ผ์‹œ์Šคํ…œ์ด ๊ธฐ๋ณธ ์ด๋ฏธ์ง€์™€ ๋น„๊ตํ•ด ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„ ํ‘œ์‹œ (์ถ”๊ฐ€, ๋ณ€๊ฒฝ, ์‚ญ์ œ๋œ ํŒŒ์ผ)
docker diff my_container

์ปจํ…Œ์ด๋„ˆ ํŒŒ์ผ์‹œ์Šคํ…œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ํ‘œ์‹œ

docker diff my_container | grep '^A'

์ถ”๊ฐ€๋œ ํŒŒ์ผ๋งŒ ํ‘œ์‹œ (A โ€” Added)

docker diff my_container | grep '^C'

๋ณ€๊ฒฝ๋œ ํŒŒ์ผ๋งŒ ํ‘œ์‹œ (C โ€” Changed)

docker cp ์ปจํ…Œ์ด๋„ˆ์™€ ํ˜ธ์ŠคํŠธ ๊ฐ„ ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ณต์‚ฌ๋กœ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ๋ฐ ๋ฐฑ์—… ๊ฐ€๋Šฅ
โ€” โ€” โ€”
docker cp my_container:/path/to/file ./file

์ปจํ…Œ์ด๋„ˆ์—์„œ ํ˜ธ์ŠคํŠธ๋กœ ํŒŒ์ผ ๋ณต์‚ฌ

docker cp ./config.yaml my_container:/app/config.yaml

ํ˜ธ์ŠคํŠธ์—์„œ ์ปจํ…Œ์ด๋„ˆ๋กœ ํŒŒ์ผ ๋ณต์‚ฌ

docker cp my_container:/var/log/app.log - | tar x -O | grep "ERROR"

๋กœ๊ทธ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  โ€œERRORโ€ ์ค„๋งŒ ํ•„ํ„ฐ๋งํ•˜์—ฌ ํ‘œ์‹œ

๐Ÿ’ก ๊ณ ๊ธ‰ ๋””๋ฒ„๊น…์—๋Š” nsenter, strace, tcpdump, gdb์™€ ๊ฐ™์€ ์ €์ˆ˜์ค€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ผ Docker Compose ๊ณ ๊ธ‰ ์‚ฌ์šฉ๋ฒ•

๐Ÿš€ ์ „๋ฌธ๊ฐ€์šฉ Docker Compose ๋ช…๋ น์–ด

๋ช…๋ น์–ด

์˜ˆ์‹œ

์„ค๋ช…

docker compose up docker-compose.yml ํŒŒ์ผ์—์„œ ์ง€์ •๋œ ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ ๊ฐ€๋Šฅ
docker compose up -d web db

web๊ณผ db ์„œ๋น„์Šค๋งŒ ๋ถ„๋ฆฌ ๋ชจ๋“œ๋กœ ์‹คํ–‰

docker compose up --build

์„œ๋น„์Šค ์‹œ์ž‘ ์ „์— ์ด๋ฏธ์ง€ ์žฌ๋นŒ๋“œ

docker compose up --remove-orphans

ํ˜„์žฌ compose ํŒŒ์ผ์— ์ •์˜๋˜์ง€ ์•Š์€ ์ปจํ…Œ์ด๋„ˆ ์ œ๊ฑฐ

docker compose build ์บ์‹œ ์ œ์–ด์™€ ๋ณ‘๋ ฌ ๋นŒ๋“œ๋ฅผ ํ†ตํ•ด compose ํŒŒ์ผ์— ์ •์˜๋œ ์„œ๋น„์Šค ์ด๋ฏธ์ง€ ๋นŒ๋“œ
docker compose build --no-cache

์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ „์ฒด ์ด๋ฏธ์ง€ ์žฌ๋นŒ๋“œ

docker compose build --parallel

๋ชจ๋“  ์„œ๋น„์Šค๋ฅผ ๋™์‹œ์— ๋นŒ๋“œํ•˜์—ฌ ์†๋„ ํ–ฅ์ƒ

docker compose build web

web ์„œ๋น„์Šค ์ด๋ฏธ์ง€ ๋นŒ๋“œ

docker compose pull ๋ชจ๋“  ๋˜๋Š” ํŠน์ • ์„œ๋น„์Šค์˜ ์ตœ์‹  ์ด๋ฏธ์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ๋‹ค์šด๋กœ๋“œ
docker compose pull

๋ชจ๋“  ์„œ๋น„์Šค ์ด๋ฏธ์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ

docker compose pull db

db ์„œ๋น„์Šค ์ด๋ฏธ์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ

docker compose pull --ignore-pull-failures

๊ฐ€์ ธ์˜ค๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๋ฌด์‹œํ•˜๊ณ  ๊ณ„์† ์‹คํ–‰

docker compose restart ์ปจํ…Œ์ด๋„ˆ ์žฌ์ƒ์„ฑ ์—†์ด ๋ชจ๋“  ๋˜๋Š” ํŠน์ • ์„œ๋น„์Šค ์žฌ์‹œ์ž‘
docker compose restart

ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ์„œ๋น„์Šค ์žฌ์‹œ์ž‘

docker compose restart worker

worker ์„œ๋น„์Šค๋งŒ ์žฌ์‹œ์ž‘

docker compose restart web db

์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ๋™์‹œ์— ์žฌ์‹œ์ž‘

docker compose exec ์‹คํ–‰ ์ค‘์ธ ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ ์„ ํƒ์ ์œผ๋กœ ๋ช…๋ น ์‹คํ–‰
docker compose exec db psql -U user -d database

db ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ psql ์‹คํ–‰

docker compose exec web sh

web ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ์…ธ ์—ด๊ธฐ

docker compose exec api curl http://localhost:8080

api ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ์—์„œ curl ์š”์ฒญ ์‹คํ–‰

docker compose config ๋ชจ๋“  ํŒŒ์ผ๊ณผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์ตœ์ข… Compose ์„ค์ • ์ถœ๋ ฅ
docker compose config

๋ณ‘ํ•ฉ๋œ ์„ค์ •์„ YAML ํ˜•์‹์œผ๋กœ ํ‘œ์‹œ

docker compose config --services

๋ชจ๋“  ์„œ๋น„์Šค ๋‚˜์—ด

docker compose config --environment

์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํ‘œ์‹œ

docker compose watch ์†Œ์Šค ํŒŒ์ผ ๋ณ€๊ฒฝ ์‹œ ์„œ๋น„์Šค๋ฅผ ์ž๋™์œผ๋กœ ์žฌ์‹œ์ž‘ โ€” ๊ฐœ๋ฐœ์— ์œ ์šฉ
docker compose watch

ํŒŒ์ผ ๋ณ€๊ฒฝ์„ ๊ฐ์‹œํ•˜๊ณ  ์„œ๋น„์Šค ์žฌ์‹œ์ž‘

docker compose events ์„œ๋น„์Šค ์‹œ์ž‘, ์ค‘์ง€, ์—…๋ฐ์ดํŠธ์™€ ๊ฐ™์€ Compose ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ
docker compose events --json

JSON ํ˜•์‹์œผ๋กœ ์ด๋ฒคํŠธ ์ˆ˜์‹ 

docker compose rm ์ค‘์ง€๋œ ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ ์ œ๊ฑฐ
docker compose rm web db

web๊ณผ db ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ ์ œ๊ฑฐ

docker compose pause ์„œ๋น„์Šค ์ผ์‹œ ์ค‘์ง€
docker compose pause api

api ์„œ๋น„์Šค ์ผ์‹œ ์ค‘์ง€

docker compose unpause ์ผ์‹œ ์ค‘์ง€๋œ ์„œ๋น„์Šค ์žฌ๊ฐœ
docker compose unpause api

api ์„œ๋น„์Šค ์žฌ๊ฐœ

docker compose create ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๋˜ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Œ
docker compose create web db

web๊ณผ db ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ (์‹œ์ž‘ํ•˜์ง€ ์•Š์Œ)

docker compose images ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฏธ์ง€ ๋ชฉ๋ก ํ‘œ์‹œ
docker compose images

๋ชจ๋“  ์„œ๋น„์Šค ์ด๋ฏธ์ง€ ํ‘œ์‹œ

docker compose top ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ํ‘œ์‹œ
docker compose top web

web ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ ๋‚ด ํ”„๋กœ์„ธ์Šค ํ‘œ์‹œ

๐Ÿ›  Docker Compose ํ™œ์šฉ ๋ฐ ์ž๋™ํ™”

  • ํ™˜๊ฒฝ ๋ถ„๋ฆฌ
    ํ™˜๊ฒฝ๋ณ„(development, staging, production)๋กœ ๋ณ„๋„์˜ docker-compose.override.yml ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด๋Š” ๊ตฌ์„ฑ์„ ๋ถ„๋ฆฌํ•˜๊ณ  ์„ค์ • ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
    -f ํ”Œ๋ž˜๊ทธ๋กœ ์—ฌ๋Ÿฌ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๊ฒฐํ•ฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค:

    docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d

    ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ .env ํŒŒ์ผ(.env.dev, .env.prod ๋“ฑ)์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • ๋น„๋ฐ€ ๋ฐ์ดํ„ฐ ์•ˆ์ „ ์ €์žฅ
    ๋น„๋ฐ€๋ฒˆํ˜ธ, ํ† ํฐ ๊ฐ™์€ ๋ฏผ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ Compose ํŒŒ์ผ์— ์ง์ ‘ ํฌํ•จํ•˜์ง€ ๋งˆ์„ธ์š”. ๋Œ€์‹  ์‚ฌ์šฉํ•˜์„ธ์š”:

    • ํ™˜๊ฒฝ ๋ณ€์ˆ˜์šฉ .env ํŒŒ์ผ (๋‹จ, .env ํŒŒ์ผ์€ ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์œผ๋ฉฐ ๊ณต๊ฐœ ์ €์žฅ์†Œ์— ์ปค๋ฐ‹ํ•˜์ง€ ๋ง์•„์•ผ ํ•จ)
    • Docker Swarm์˜ docker secret ๋ฐ docker config
    • ๋น„๋ฐ€์ด ํฌํ•จ๋œ ๊ตฌ์„ฑ ํŒŒ์ผ์šฉ ์™ธ๋ถ€ ๋ณผ๋ฅจ
    • ์™ธ๋ถ€ ๋น„๋ฐ€ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ (์˜ˆ: HashiCorp Vault, AWS Secrets Manager)

  • depends_on ๋ฐ healthcheck์œผ๋กœ ์‹œ์ž‘ ์ˆœ์„œ ์ œ์–ด
    ์„œ๋น„์Šค๊ฐ€ ์ข…์† ์„œ๋น„์Šค ์ค€๋น„๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋„๋ก ์„ค์ •:

    services:
      db:
        image: postgres
        healthcheck:
          test: ["CMD-SHELL", "pg_isready -U postgres"]
          interval: 10s
          retries: 5
      api:
        image: my_api
        depends_on:
          db:
            condition: service_healthy
  • ์—…๋ฐ์ดํŠธ ์ค‘ ๋‹ค์šดํƒ€์ž„ ์ตœ์†Œํ™”
    ์„œ๋น„์Šค ์—…๋ฐ์ดํŠธ ์ „์— ์‹คํ–‰:

    docker compose pull && docker compose up -d --remove-orphans

    -d ์˜ต์…˜์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰, --remove-orphans๋Š” ํ˜„์žฌ ๊ตฌ์„ฑ์— ์—†๋Š” ์ปจํ…Œ์ด๋„ˆ ์ œ๊ฑฐ.
    ํ•„์š”ํ•˜๋‹ค๋ฉด ์˜ค๋ž˜๋œ ์ปจํ…Œ์ด๋„ˆ ์™„์ „ํžˆ ์ค‘์ง€ ๋ฐ ์ œ๊ฑฐ:

    docker compose down --remove-orphans

    ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ƒˆ ์ด๋ฏธ์ง€๊ฐ€ ๋กœ๋“œ๋˜๊ณ  ๋ถˆํ•„์š”ํ•œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‹ค์šดํƒ€์ž„ ์—†์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

  • ๊ฐœ๋ฐœ์šฉ ์ฝ”๋“œ ํ•ซ ๋ฆฌ๋กœ๋“œ (๋ณผ๋ฅจ ์‚ฌ์šฉ)
    ๋กœ์ปฌ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ปจํ…Œ์ด๋„ˆ์— ๋งˆ์šดํŠธํ•˜๊ธฐ ์œ„ํ•ด volumes๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ด๋ฏธ์ง€๋ฅผ ์žฌ๋นŒ๋“œํ•˜์ง€ ์•Š๊ณ ๋„ ์ฝ”๋“œ ๋ณ€๊ฒฝ์„ ์ฆ‰์‹œ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    Windows์™€ macOS์—์„œ ํŒŒ์ผ ๊ถŒํ•œ ๋ฌธ์ œ ๋ฐ ํŒŒ์ผ์‹œ์Šคํ…œ ์บ์‹ฑ ํŠน์„ฑ์— ์ฃผ์˜ํ•˜์—ฌ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜์„ธ์š”.

  • ๋ณผ๋ฅจ ์—†์ด ํ•ซ ๋ฆฌ๋กœ๋“œ (Compose 2.22+)

    develop:
      watch:
        - path: ./src
          action: sync
          target: /app
  • ์„œ๋น„์Šค ์ค‘์•™ ๋กœ๊ทธ ๊ด€๋ฆฌ
    ์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ๋ฅผ ELK Stack, Loki, Prometheus, Fluentd ๊ฐ™์€ ์‹œ์Šคํ…œ์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜์—ฌ ๋ถ„์„ ๋ฐ ์•Œ๋ฆผ์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    Docker ๋กœ๊น… ๋“œ๋ผ์ด๋ฒ„(--log-driver)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ๋ฅผ ์ค‘์•™ ์ˆ˜์ง‘ ๋ฐ ์ฒ˜๋ฆฌ.
    Compose์—์„œ ์ปจํ…Œ์ด๋„ˆ์˜ ๋กœ๊น… ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์„ค์ •:

    services:
      api:
        image: my_api
        logging:
          driver: "json-file"
          options:
            max-size: "10m"
            max-file: "3"
  • ์ž๋™ ์„œ๋น„์Šค ์žฌ์‹œ์ž‘
    docker-compose.yml์—์„œ ์žฌ์‹œ์ž‘ ์ •์ฑ… ๊ตฌ์„ฑ:

    restart: unless-stopped

    ๋‹ค๋ฅธ ์žฌ์‹œ์ž‘ ์ •์ฑ…:

    • no โ€” ์ž๋™ ์žฌ์‹œ์ž‘ ์—†์Œ (๊ธฐ๋ณธ๊ฐ’)
    • always โ€” ํ•ญ์ƒ ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘
    • on-failure โ€” ์‹คํŒจ ์‹œ์—๋งŒ ์žฌ์‹œ์ž‘ (์žฌ์‹œ๋„ ํšŸ์ˆ˜ ์ง€์ • ๊ฐ€๋Šฅ)

    ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” unless-stopped๊ฐ€ ์„œ๋น„์Šค ๋ณต์›์„ฑ ํ™•๋ณด์— ์ตœ์ .
    ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์žฅ์• ๋‚˜ ํ˜ธ์ŠคํŠธ ์žฌ๋ถ€ํŒ… ํ›„์—๋„ ์„œ๋น„์Šค๊ฐ€ ์ž๋™ ๋ณต๊ตฌ๋ฉ๋‹ˆ๋‹ค.

  • ์„œ๋น„์Šค ํ”„๋กœํŒŒ์ผ
    ํŠน์ • ์„œ๋น„์Šค ๊ทธ๋ฃน๋งŒ ์‹คํ–‰ ๊ฐ€๋Šฅ:

    services:
      db:
        image: postgres
        profiles: ["backend"]
      web:
        image: nginx
        profiles: ["frontend"]

    ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœํŒŒ์ผ๋งŒ ์‹คํ–‰:

    docker compose --profile frontend up

๐Ÿž Docker Compose ์„œ๋น„์Šค ๋””๋ฒ„๊น… ๋ฐ ํ”„๋กœํŒŒ์ผ๋ง

๋ช…๋ น์–ด

์˜ˆ์‹œ

์„ค๋ช…

docker compose exec ์‹คํ–‰ ์ค‘์ธ ์„œ๋น„์Šค ์•ˆ์—์„œ ๋ช…๋ น ์‹คํ–‰, ์ปจํ…Œ์ด๋„ˆ ์ ‘๊ทผ ๋˜๋Š” ๊ฐœ๋ณ„ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰ ๊ฐ€๋Šฅ
docker compose exec web sh

web ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ์…ธ ์—ด๊ธฐ

docker compose exec db psql -U user -d database

db ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ psql ๋ช…๋ น ์‹คํ–‰

docker compose logs ์ง„๋‹จ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•œ ์„œ๋น„์Šค ๋กœ๊ทธ ๋ณด๊ธฐ
docker compose logs -f db

db ์„œ๋น„์Šค ๋กœ๊ทธ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณด๊ธฐ

docker compose logs --tail=50 api

api ์„œ๋น„์Šค์˜ ๋งˆ์ง€๋ง‰ 50์ค„ ๋กœ๊ทธ ํ‘œ์‹œ

docker compose logs --since=1h web

web ์„œ๋น„์Šค์˜ ์ง€๋‚œ 1์‹œ๊ฐ„ ๋กœ๊ทธ ํ‘œ์‹œ

docker inspect ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒ์„ธ ์ •๋ณด ๋ณด๊ธฐ
docker inspect $(docker compose ps -q web)

web ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒ์„ธ JSON ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ

docker container stats ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง
docker stats $(docker compose ps -q worker)

worker ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ์˜ CPU, ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ์ถ”์ 

docker compose run --rm ์„œ๋น„์Šค ์„ค์ •์œผ๋กœ ์ž„์‹œ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ โ€” ๋””๋ฒ„๊น…์— ์œ ์šฉ
docker compose run --rm web sh

web ์„œ๋น„์Šค์šฉ ์ž„์‹œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋Œ€ํ™”ํ˜• ์…ธ๋กœ ์‹คํ–‰

docker container cp ํ˜ธ์ŠคํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํŒŒ์ผ ๋ณต์‚ฌ
docker cp $(docker compose ps -q db):/dump.sql ./dump.sql

db ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ์—์„œ ํ˜ธ์ŠคํŠธ๋กœ ํŒŒ์ผ ๋ณต์‚ฌ

๐Ÿ’ก ๋ณต์žกํ•œ ๋‹ค์ค‘ ์„œ๋น„์Šค ๋””๋ฒ„๊น…์—๋Š” docker compose run --rm์„ ์‚ฌ์šฉํ•ด ๊ฐœ๋ณ„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•„์š”ํ•œ ๋„คํŠธ์›Œํฌ์™€ ๋ณผ๋ฅจ์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ”์ธ ์„œ๋น„์Šค์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๐Ÿ“š ์ถ”๊ฐ€ ์ž๋ฃŒ

๐Ÿšซ .dockerignore๋กœ ํŒŒ์ผ ๋ฌด์‹œํ•˜๊ธฐ

์ด๋ฏธ์ง€์— ํฌํ•จํ•˜์ง€ ์•Š์•„์•ผ ํ•  ํŒŒ์ผ๊ณผ ํด๋”๋ฅผ .dockerignore์— ์ถ”๊ฐ€ํ•˜์—ฌ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ  ๋นŒ๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜์„ธ์š”:

node_modules/
*.log
.env

โšก ๋ณ„์นญ์œผ๋กœ ๋ช…๋ น ๋‹จ์ถ•

์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด๋Š” ๋ณ„์นญ์„ ๋งŒ๋“ค์–ด ๋” ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

alias dcu="docker compose up -d"
alias dcd="docker compose down"
alias dcb="docker compose build"

๐Ÿง  ํŒ: Docker ์‚ฌ์šฉ ์กฐ์–ธ

  • ๋ชจ๋“  ๊ฑธ ์™ธ์šฐ๋ ค ํ•˜์ง€ ๋ง๊ณ  docker --help ๋˜๋Š” docker <command> --help๋กœ ๋ช…๋ น ํƒ์ƒ‰ํ•˜์„ธ์š”.
  • ์ •๊ธฐ์ ์œผ๋กœ ์—ฐ์Šตํ•˜๊ณ  ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ๋กœ ์‹คํ—˜ํ•˜์„ธ์š”.
  • ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋ฅผ ์ฃผ์‹œํ•˜๊ณ  .dockerignore๋ฅผ ์‚ฌ์šฉํ•ด ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ์ œ๊ฑฐ.

๐ŸŒ ์œ ์šฉํ•œ ๋งํฌ

๐Ÿ“˜ ๊ณต์‹ Docker ๋ฌธ์„œ โ€” Docker ๊ด€๋ จ ๋ชจ๋“  ์ฃผ์ œ์— ๋Œ€ํ•œ ํฌ๊ด„์  ๊ฐ€์ด๋“œ์™€ ์ฐธ๊ณ  ์ž๋ฃŒ:
https://docs.docker.com/

๐Ÿ“™ Docker ์น˜ํŠธ ์‹œํŠธ โ€” ๊ณต์‹ Docker ์น˜ํŠธ์‹œํŠธ ์ „์ฒด:
https://dockerlabs.collabnix.com/docker/cheatsheet/

๐Ÿ“— Docker Hub โ€” ์ด๋ฏธ์ง€์™€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ:
https://hub.docker.com/