이 글은 도커를 깊게 공부하기 위한 글이 아닙니다.
서버에서 앱 하나를 실행하고, 업데이트하고, 문제가 생겼을 때 정리하는 정도만 다룹니다.
핵심 흐름은 간단합니다.
앱 폴더로 이동한다
Docker Compose 명령어를 실행한다
상태나 로그를 확인한다
필요하면 컨테이너, 이미지, 볼륨을 정리한다
1. 앱 폴더로 이동하기
도커 명령어를 실행하기 전에 먼저 앱이 설치된 폴더로 이동합니다.
예시:
cd /opt/apps/myapp
docker compose 명령어는 보통 현재 폴더의 compose.yaml 또는 docker-compose.yml 파일을 기준으로 실행됩니다.
그래서 먼저 해당 앱 폴더로 이동해야 합니다.
2. 앱 실행하기
앱을 백그라운드에서 실행합니다.
docker compose up -d
뜻은 이렇습니다.
up = 실행
-d = 백그라운드 실행
-d를 붙이지 않으면 터미널에 로그가 계속 붙어 있을 수 있습니다.
서버에서 앱을 켜둘 목적이면 보통 docker compose up -d를 사용합니다.
예시:
cd /opt/apps/myapp
docker compose up -d
3. 앱 중지하기
앱을 중지하고 컨테이너를 제거합니다.
docker compose down
보통 앱을 잠시 내리거나 다시 실행할 때 사용합니다.
docker compose down
docker compose up -d
down만 하면 보통 데이터 볼륨은 지워지지 않습니다.
4. 데이터까지 삭제하며 정리하기
컨테이너뿐 아니라 볼륨까지 삭제하려면 -v를 붙입니다.
docker compose down -v
볼륨에는 앱 데이터, 저장 파일, 설정 등이 들어 있을 수 있습니다.
그래서 down -v는 조심해서 써야 합니다.
여기서 -v는 volume, 즉 볼륨까지 같이 제거하겠다는 뜻입니다.
더 강하게 정리할 때는 다음 명령어를 씁니다.
docker compose down -v --remove-orphans
뜻은 대략 이렇습니다.
down = 컨테이너 중지 및 제거
-v = 연결된 볼륨도 제거
--remove-orphans = 현재 compose 파일에 없는 남은 컨테이너도 제거
정리하면:
docker compose down # 컨테이너 제거, 데이터는 보통 유지
docker compose down -v # 컨테이너와 볼륨 제거
docker compose down -v --remove-orphans # 더 강하게 정리
5. 앱 업데이트하기
새 이미지를 받아올 때 사용합니다.
docker compose pull
업데이트할 때는 보통 이렇게 합니다.
cd /opt/apps/myapp
docker compose pull
docker compose up -d
6. 다시 빌드하기
이미지를 직접 빌드하는 구조라면 다음 명령어를 쓸 수 있습니다.
docker compose build --no-cache
--no-cache는 이전 빌드 캐시를 쓰지 않고 처음부터 다시 빌드하겠다는 뜻입니다.
평소에는 자주 쓸 필요가 없고, 업데이트나 빌드가 이상하게 꼬였을 때 사용하면 됩니다.
빌드 후 실행:
docker compose build --no-cache
docker compose up -d
업데이트가 꼬였거나 설정 반영이 안 될 때 사용할 수 있습니다.
7. 상태 확인하기
실행 중인 컨테이너만 확인:
docker ps
중지된 컨테이너까지 모두 확인:
docker ps -a
Compose 기준으로 확인:
docker compose ps
처음에는 이 정도만 보면 됩니다.
docker ps = 지금 실행 중인 것
docker ps -a = 꺼진 것까지 전부
8. 로그 확인하기
앱이 제대로 실행되는지 확인할 때 로그를 봅니다.
컨테이너 이름을 알고 있을 때:
docker logs -f myapp
최근 로그 100줄만 보기:
docker logs --tail=100 myapp
-f는 follow의 의미로, 새 로그를 계속 따라가며 보여줍니다.
--tail=100은 최근 100줄만 보겠다는 뜻입니다.
Compose 기준으로 전체 로그 보기:
docker compose logs -f
로그 화면에서 빠져나오려면 보통 Ctrl + C를 누르면 됩니다.
9. 재시작하기
특정 컨테이너만 재시작:
docker restart myapp
Compose 기준으로 재시작:
docker compose restart
가볍게 다시 켜고 싶을 때 사용합니다.
10. 컨테이너 안으로 들어가기
컨테이너 내부 파일을 확인해야 할 때 사용합니다.
docker exec -it myapp sh
옵션과 이름은 이렇게 보면 됩니다.
exec = 실행 중인 컨테이너 안에서 명령 실행
-i = 입력을 유지
-t = 터미널처럼 사용
myapp = 컨테이너 이름
sh = 컨테이너 안에서 실행할 쉘
컨테이너 안에서 나오려면:
exit
직접 들어가지 않고 명령어만 실행할 수도 있습니다.
docker exec -it myapp sh -lc 'ls -la /app/save'
위 명령은 이렇게 나눠서 보면 됩니다.
docker exec = 컨테이너 안에서 명령 실행
-it = 터미널 입력을 받을 수 있게 실행
myapp = 컨테이너 이름
sh -lc = 쉘을 열고 뒤의 문자열 명령을 실행
'ls -la /app/save' = /app/save 폴더 내용을 자세히 보기
ls는 목록 보기, -la는 숨김 파일까지 자세히 보겠다는 뜻입니다.
Compose 기준으로 실행할 수도 있습니다.
docker compose exec myapp sh -lc 'ls -la /app/save'
11. 특정 파일 찾기
컨테이너 내부에서 특정 파일을 찾아야 할 때:
docker exec -it myapp sh -lc 'find /app -name "파일이름" -print'
여기서 find /app은 /app 폴더 아래를 찾는다는 뜻입니다.
-name "파일이름"은 찾을 파일 이름 조건이고, -print는 찾은 결과를 화면에 출력하라는 뜻입니다.
예시:
docker exec -it myapp sh -lc 'find /app -name "__password.txt" -print'
Compose 기준:
docker compose exec myapp sh -lc 'find /app -name "__password.txt" -print'
12. 특정 파일 삭제하기
컨테이너 내부의 특정 파일을 삭제해야 할 때:
docker exec -it myapp sh -lc 'rm -f /app/save/파일이름'
rm은 파일 삭제 명령입니다.
-f는 force의 의미로, 파일이 없어도 에러를 크게 내지 않고 강제로 처리합니다.
예시:
docker exec -it myapp sh -lc 'rm -f /app/save/__password.txt'
Compose 기준:
docker compose exec myapp sh -lc 'rm -f /app/save/__password.txt'
삭제 후 컨테이너를 재시작합니다.
docker restart myapp
또는:
docker compose restart
13. 이미지 확인하기
서버에 받아져 있는 도커 이미지 목록을 확인합니다.
docker image ls
짧은 명령어로는 아래도 같습니다.
docker images
이미지가 디스크를 얼마나 쓰는지 확인하려면:
docker system df
이미지를 삭제하기 전에 먼저 어떤 이미지가 있는지 확인하는 용도로 사용합니다.
14. 이미지 삭제하기
사용하지 않는 이미지를 삭제할 때 사용합니다.
docker image rm 이미지이름:태그
예시:
docker image rm myapp:latest
여러 이미지를 한 번에 삭제:
docker image rm myapp:latest myapp:old
이미지를 지워도 볼륨 데이터가 자동으로 지워지는 것은 아닙니다.
반대로 실행 중인 컨테이너가 사용 중인 이미지는 바로 삭제되지 않을 수 있습니다.
15. 볼륨 확인하기
볼륨 목록 확인:
docker volume ls
특정 볼륨 정보 확인:
docker volume inspect myapp_data
ls는 목록 보기, inspect는 자세한 정보 보기라고 생각하면 됩니다.
볼륨은 데이터 저장소라고 보면 됩니다.
앱 데이터가 들어 있을 수 있으니 삭제할 때 주의해야 합니다.
16. 볼륨 삭제하기
특정 볼륨 삭제:
docker volume rm myapp_data
여러 개를 한 번에 삭제:
docker volume rm myapp_data myapp_cache
볼륨 삭제는 데이터 삭제와 연결될 수 있습니다.
실행 전에 정말 지워도 되는지 확인하는 게 좋습니다.
17. 컨테이너 강제 삭제하기
컨테이너가 꼬였거나 일반 삭제가 안 될 때 강제로 지울 수 있습니다.
docker rm -f myapp
rm은 컨테이너 제거, -f는 강제 제거입니다.
여러 컨테이너를 한 번에 지울 수도 있습니다.
docker rm -f myapp myapp-worker
-f는 강제 삭제입니다.
실행 중인 컨테이너도 바로 삭제할 수 있으니 조심해서 사용합니다.
18. 자주 쓰는 명령어만 모아보기
앱 폴더로 이동:
cd /opt/apps/myapp
실행:
docker compose up -d
중지 및 컨테이너 제거:
docker compose down
중지 및 볼륨까지 제거:
docker compose down -v
강하게 정리:
docker compose down -v --remove-orphans
이미지 업데이트:
docker compose pull
캐시 없이 빌드:
docker compose build --no-cache
상태 확인:
docker ps
docker ps -a
docker compose ps
로그 확인:
docker logs -f myapp
docker compose logs -f
이미지와 용량 확인:
docker image ls
docker system df
볼륨 확인:
docker volume ls
재시작:
docker restart myapp
docker compose restart
19. 자주 보이는 옵션 뜻
도커 명령어에서 자주 보이는 옵션만 모아보면 이렇습니다.
-d = 백그라운드 실행
-v = 볼륨까지 처리
-f = 강제 실행 또는 계속 따라보기
-it = 컨테이너 안에 터미널로 들어갈 때 사용
--tail=100 = 최근 100줄만 보기
--no-cache = 캐시 없이 다시 빌드
--remove-orphans = 남은 불필요한 컨테이너 제거
주의할 점은 -f가 명령어에 따라 의미가 조금 다르다는 것입니다.
docker logs -f # 로그를 계속 따라보기
docker rm -f # 컨테이너 강제 삭제
rm -f 파일이름 # 파일 강제 삭제
즉, 같은 -f라도 로그에서는 follow, 삭제에서는 force 의미로 쓰입니다.
마무리
일반적으로는 아래 흐름만 기억하면 됩니다.
cd /opt/apps/myapp
docker compose pull
docker compose up -d
docker compose logs -f
내릴 때:
docker compose down
삭제 전에 확인할 때:
docker ps -a
docker image ls
docker volume ls
docker system df
데이터까지 지우고 새로 시작하고 싶을 때:
docker compose down -v --remove-orphans
docker compose pull
docker compose up -d
단, -v는 볼륨을 삭제합니다.
볼륨에는 저장 데이터가 들어 있을 수 있으니, 잘 모를 때는 먼저 docker compose down만 사용하는 것이 좋습니다.