๐ณ 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 (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 |
|
|
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/