๐ณ Docker
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 | 
 | |
| docker rmi 1a2b3c4d5e6f | ID๋ก ์ด๋ฏธ์ง ์ญ์  | |
| docker rmi $(docker images -q) | ๋ชจ๋ ์ด๋ฏธ์ง ์ญ์  (์ฃผ์ ํ์!) | 
๐ ์ปจํ ์ด๋ ๊ด๋ฆฌ
| ๋ช ๋ น์ด | ์์ | ์ค๋ช | 
|---|---|---|
| docker container exec | ์คํ ์ค์ธ ์ปจํ ์ด๋ ์์์ ๋ช ๋ น ์คํ | |
| docker exec -it container bash | 
 | |
| docker exec container ls /app | ์ปจํ
์ด๋ ๋ด๋ถ  | |
| docker exec -d container touch /tmp/testfile | ๋ถ๋ฆฌ ๋ชจ๋๋ก ์ปจํ ์ด๋ ์์์ ๋ช ๋ น ์คํ (๋๊ธฐํ์ง ์์) | |
| docker container logs | ์ปจํ ์ด๋ ๋ก๊ทธ ๋ณด๊ธฐ | |
| docker logs container | 
 | |
| docker logs -f container | ์ค์๊ฐ์ผ๋ก ์ปจํ ์ด๋ ๋ก๊ทธ ํ๋ก์ฐ | |
| docker logs --tail 50 container | ๋ง์ง๋ง 50์ค ๋ก๊ทธ ํ์ | |
| docker inspect | ์ปจํ ์ด๋ ๋๋ ์ด๋ฏธ์ง์ ์์ธํ JSON ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ | |
| docker inspect 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 | 
 | |
| 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 | 
 | |
| docker container pause | ์ปจํ ์ด๋์ ๋ชจ๋ ํ๋ก์ธ์ค ์ผ์ ์ ์ง | |
| docker pause container | 
 | |
| docker container unpause | ์ผ์ ์ ์ง๋ ์ปจํ ์ด๋ ์ฌ๊ฐ | |
| docker unpause container | 
 | |
| docker container update | ์ฌ์์ ์์ด ์ปจํ ์ด๋ ์ค์  ์ ๋ฐ์ดํธ | |
| docker update --memory 500m container | ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ 500MB๋ก ์ ํ | 
๐งฑ ์ด๋ฏธ์ง์ Dockerfile
| ๋ช ๋ น์ด | ์์ | ์ค๋ช | 
|---|---|---|
| docker buildx build | Dockerfile์์ Docker ์ด๋ฏธ์ง ๋น๋ | |
| docker build -t my_image . | ํ์ฌ ๋๋ ํฐ๋ฆฌ์์  | |
| docker build -t my_image:1.0 . | 
 | |
| docker build --no-cache -t my_image . | ์บ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ด๋ฏธ์ง ํด๋ฆฐ ๋น๋ | |
| docker container commit | ์ปจํ ์ด๋์ ํ์ฌ ์ํ์์ ์ด๋ฏธ์ง ์์ฑ | |
| docker commit 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 | 
 | |
| docker tag my_image:1.0 my_image:stable | 
 | |
| docker tag my_image my_image:backup | ๋ก์ปฌ ์ด๋ฏธ์ง์  | |
| docker image push | Docker Hub ๋๋ ๋ค๋ฅธ ๋ ์ง์คํธ๋ฆฌ์ ์ด๋ฏธ์ง ํธ์ | |
| docker push myrepo/my_image:latest | 
 | |
| docker push myrepo/my_image:1.0 | 
 | |
| docker push myrepo/my_image | ๊ธฐ๋ณธ ํ๊ทธ  | |
| 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 | 
 | |
| docker network ls --format '{{.Name}}' | ๋คํธ์ํฌ ์ด๋ฆ๋ง ํ์ | |
| docker network create | ์ Docker ๋คํธ์ํฌ ์์ฑ | |
| docker network create my_net | 
 | |
| docker network create --driver bridge my_bridge_net | 
 | |
| docker network create --subnet=192.168.10.0/24 my_custom_net | ์๋ธ๋ท ์ง์ ํ์ฌ ๋คํธ์ํฌ ์์ฑ | |
| docker network connect | ์ปจํ ์ด๋๋ฅผ ๋คํธ์ํฌ์ ์ฐ๊ฒฐ | |
| docker network connect my_net container | 
 | |
| docker network connect --alias db_net my_net container | ๋ณ์นญ  | |
| docker network disconnect | ์ปจํ ์ด๋๋ฅผ ๋คํธ์ํฌ์์ ๋ถ๋ฆฌ | |
| docker network disconnect my_net container | 
 | |
| docker volume ls | ๋ชจ๋ Docker ๋ณผ๋ฅจ ๋์ด | |
| docker volume ls | ๋ชจ๋ Docker ๋ณผ๋ฅจ ํ์ | |
| docker volume ls --filter dangling=true | ์ฌ์ฉํ์ง ์๋ ๋ณผ๋ฅจ ํ์ | |
| docker volume create | ์ Docker ๋ณผ๋ฅจ ์์ฑ | |
| docker volume create my_vol | 
 | |
| docker volume create --driver local --opt type=tmpfs my_tmp_vol | tmpfs๋ฅผ ์ฌ์ฉํด ์์ ๋ณผ๋ฅจ ์์ฑ | |
| docker volume inspect | ๋ณผ๋ฅจ์ ์ธ๋ถ ์ ๋ณด ํ์ | |
| docker volume inspect my_vol | 
 | |
| docker volume rm | ๋ณผ๋ฅจ ์ญ์  | |
| docker volume rm 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 | 
 | |
| docker compose exec | ์คํ ์ค์ธ ์๋น์ค ์ปจํ ์ด๋์์ ๋ช ๋ น ์คํ | |
| docker compose exec web bash | 
 | |
| docker compose exec db ls /var/lib/postgresql | ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปจํ
์ด๋์์  | |
| docker compose exec -d worker touch /tmp/done | 
 | |
| docker compose build | ์๋น์ค ์ด๋ฏธ์ง ๋น๋ ๋๋ ์ฌ๋น๋ | |
| docker compose build | 
 | |
| docker compose build web | 
 | |
| docker compose build --no-cache | ์บ์ ์์ด ์ด๋ฏธ์ง ๋น๋ | |
| docker compose ps | ๋ชจ๋ ์๋น์ค์ ์ปจํ ์ด๋ ์ํ ํ์ | |
| docker compose ps -a | ์ค์ง๋ ์ปจํ ์ด๋ ํฌํจ ๋ชจ๋ ํ์ | |
| docker compose ps --services | ์๋น์ค ์ด๋ฆ๋ง ํ์ | |
| docker compose pull | ๋ ์ง์คํธ๋ฆฌ์์ ์๋น์ค ์ด๋ฏธ์ง ๋ค์ด๋ก๋/์ ๋ฐ์ดํธ | |
| docker compose pull web | 
 | |
| docker compose pull --ignore-pull-failures | ์ผ๋ถ ์ด๋ฏธ์ง๊ฐ ์คํจํด๋ ๊ณ์ ๊ฐ์ ธ์ค๊ธฐ | |
| docker compose restart | ๋ชจ๋ ์๋น์ค ๋๋ ์ง์ ํ ์๋น์ค ์ฌ์์ | |
| docker compose restart 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 | 
 | |
| docker compose start db api | ์ฌ๋ฌ ์๋น์ค ํ ๋ฒ์ ์์ | |
| docker compose stop | ์ปจํ ์ด๋๋ฅผ ์ ๊ฑฐํ์ง ์๊ณ ์๋น์ค ์ค์ง | |
| docker compose stop 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 | 
 | |
| 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 | 
 | |
| 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' | 
 | |
| docker container update | ์คํ ์ค์ธ ์ปจํ ์ด๋์ ๋ฆฌ์์ค ์ ํ ๋ฐ ์ค์ ์ ์ฌ์์ ์์ด ๋ณ๊ฒฝ | |
| docker update --cpus 2 --memory 1g my_container | CPU 2๊ฐ์ RAM 1GB๋ก ์ ํ | |
| docker update --restart unless-stopped my_container | ์๋ ์ฌ์์ ์ ์ฑ
์  | |
| docker update --pids-limit 200 my_container | ํ๋ก์ธ์ค ์๋ฅผ 200์ผ๋ก ์ ํ | |
| docker container diff | ์ปจํ ์ด๋์ ํ์ผ์์คํ  ๋ณ๊ฒฝ ์ฌํญ์ ์๋ณธ ์ด๋ฏธ์ง์ ๋น๊ตํ์ฌ ํ์. ๋๋ฒ๊น ๋ฐ ๊ฐ์ฌ์ ์ ์ฉ | |
| docker diff my_container | ์ปจํ ์ด๋์ ๋ชจ๋ ํ์ผ์์คํ  ๋ณ๊ฒฝ ์ฌํญ ํ์ | |
| docker diff my_container | grep '^A' | ์ถ๊ฐ๋ ํ์ผ๋ง ํ์ ( | |
| 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 Swarm
๐ 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(withstrace) | 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 | 
 | |
| docker top my_container -eo pid,cmd | ํ๋ก์ธ์ค์ PID์ ๋ช ๋ น๋ง ํ์ | |
| docker diff | ์ปจํ ์ด๋ ํ์ผ์์คํ ์ด ๊ธฐ๋ณธ ์ด๋ฏธ์ง์ ๋น๊ตํด ๋ณ๊ฒฝ๋ ๋ถ๋ถ ํ์ (์ถ๊ฐ, ๋ณ๊ฒฝ, ์ญ์ ๋ ํ์ผ) | |
| docker diff my_container | ์ปจํ ์ด๋ ํ์ผ์์คํ  ๋ณ๊ฒฝ ์ฌํญ ํ์ | |
| docker diff my_container | grep '^A' | ์ถ๊ฐ๋ ํ์ผ๋ง ํ์ ( | |
| docker diff my_container | grep '^C' | ๋ณ๊ฒฝ๋ ํ์ผ๋ง ํ์ ( | |
| 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 | 
 | |
| 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 | 
 | |
| docker compose pull | ๋ชจ๋ ๋๋ ํน์  ์๋น์ค์ ์ต์ ์ด๋ฏธ์ง ๋ ์ง์คํธ๋ฆฌ์์ ๋ค์ด๋ก๋ | |
| docker compose pull | ๋ชจ๋ ์๋น์ค ์ด๋ฏธ์ง ๊ฐ์ ธ์ค๊ธฐ | |
| docker compose pull db | 
 | |
| docker compose pull --ignore-pull-failures | ๊ฐ์ ธ์ค๋ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํด๋ ๋ฌด์ํ๊ณ ๊ณ์ ์คํ | |
| docker compose restart | ์ปจํ ์ด๋ ์ฌ์์ฑ ์์ด ๋ชจ๋ ๋๋ ํน์  ์๋น์ค ์ฌ์์ | |
| docker compose restart | ํ์ฌ ํ๋ก์ ํธ์ ๋ชจ๋ ์๋น์ค ์ฌ์์ | |
| docker compose restart worker | 
 | |
| docker compose restart web db | ์ฌ๋ฌ ์๋น์ค๋ฅผ ๋์์ ์ฌ์์ | |
| docker compose exec | ์คํ ์ค์ธ ์๋น์ค ์ปจํ ์ด๋ ์์์ ๋ํํ ๋ชจ๋ ์ ํ์ ์ผ๋ก ๋ช ๋ น ์คํ | |
| docker compose exec db psql -U user -d database | 
 | |
| docker compose exec web sh | 
 | |
| docker compose exec api curl http://localhost:8080 | 
 | |
| 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 | 
 | |
| docker compose pause | ์๋น์ค ์ผ์ ์ค์ง | |
| docker compose pause api | 
 | |
| docker compose unpause | ์ผ์ ์ค์ง๋ ์๋น์ค ์ฌ๊ฐ | |
| docker compose unpause api | 
 | |
| docker compose create | ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ ์์ํ์ง ์์ | |
| docker compose create web db | 
 | |
| docker compose images | ์๋น์ค์์ ์ฌ์ฉํ๋ ์ด๋ฏธ์ง ๋ชฉ๋ก ํ์ | |
| docker compose images | ๋ชจ๋ ์๋น์ค ์ด๋ฏธ์ง ํ์ | |
| docker compose top | ์๋น์ค ์ปจํ ์ด๋ ์์์ ์คํ ์ค์ธ ํ๋ก์ธ์ค ํ์ | |
| docker compose top 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 | 
 | |
| docker compose exec db psql -U user -d database | 
 | |
| docker compose logs | ์ง๋จ ๋ฐ ๋ชจ๋ํฐ๋ง์ ์ํ ์๋น์ค ๋ก๊ทธ ๋ณด๊ธฐ | |
| docker compose logs -f db | 
 | |
| docker compose logs --tail=50 api | 
 | |
| docker compose logs --since=1h web | 
 | |
| docker inspect | ์๋น์ค๋ฅผ ์คํํ๋ ์ปจํ ์ด๋์ ์์ธ ์ ๋ณด ๋ณด๊ธฐ | |
| docker inspect $(docker compose ps -q web) | 
 | |
| docker container stats | ์๋น์ค ์ปจํ ์ด๋์ ๋ฆฌ์์ค ์ฌ์ฉ๋ ๋ชจ๋ํฐ๋ง | |
| docker stats $(docker compose ps -q worker) | 
 | |
| docker compose run --rm | ์๋น์ค ์ค์ ์ผ๋ก ์์ ์ปจํ ์ด๋ ์คํ โ ๋๋ฒ๊น ์ ์ ์ฉ | |
| docker compose run --rm web sh | 
 | |
| docker container cp | ํธ์คํธ์ ์ปจํ ์ด๋ ๊ฐ ํ์ผ ๋ณต์ฌ | |
| docker cp $(docker compose ps -q db):/dump.sql ./dump.sql | 
 | 
๐ก ๋ณต์กํ ๋ค์ค ์๋น์ค ๋๋ฒ๊น ์๋
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/