매번 도커 명령어를 까먹어서 자주 사용하거나 알아두면 유용한 명령어들을 이번에 한번 정리해보고자 합니다.
1. 이미지 관련 명령어
도커 이미지는 컨테이너를 생성하기 위한 설계도와 같습니다. 애플리케이션과 필요한 모든 종속성, 라이브러리, 환경 설정 등을 포함하고 있습니다. 효율적인 컨테이너 운영을 위해서는 이러한 이미지를 효과적으로 관리하는 것이 중요합니다.
1. docker pull NAME[:TAG|@DIGEST]
- 기능: 도커 레지스트리(기본: Docker Hub)에서 이미지를 다운로드합니다.
- 주요 사용법: 이미지 이름(NAME)은 필수입니다. 특정 버전(TAG 또는 DIGEST)을 지정할 수 있으며, 생략 시 latest 태그가 사용됩니다.
- 예시:
- docker pull nginx (최신 Nginx 이미지 다운로드)
- docker pull ubuntu:20.04 (Ubuntu 20.04 이미지 다운로드)
2. docker build [OPTIONS] PATH | URL | -
- 기능: Dockerfile과 빌드 컨텍스트(지정된 경로 또는 URL의 파일들)를 사용하여 새 이미지를 생성합니다.
- 주요 사용법:
- -t, --tag NAME[:TAG]: 생성될 이미지에 이름과 태그를 부여합니다 (예: myapp:1.0). 이미지 식별에 중요합니다.
- .: 현재 디렉토리를 빌드 컨텍스트로 사용합니다.
- -f, --file FILENAME: 기본 Dockerfile 이름이나 경로가 아닐 때 사용합니다.
- 예시:
- docker build -t my-custom-app:v1 . (현재 디렉토리의 Dockerfile로 빌드)
3. docker images [REPOSITORY[:TAG]]
- 기능: 로컬 시스템에 저장된 이미지 목록을 보여줍니다.
- 주요 사용법: REPOSITORY, TAG, IMAGE ID, 생성 시각(CREATED), 크기(SIZE) 정보를 표시합니다. 특정 레포지토리 이름으로 필터링할 수 있습니다.
- --filter filter: 특정 조건으로 필터링 (예: --filter "dangling=true"는 이름 없는 이미지 표시).
- 예시:
- docker images (로컬의 모든 이미지 나열)
- docker images myapp ('myapp' 레포지토리의 이미지들만 나열)
4. docker rmi IMAGE [IMAGE...]
- 기능: 로컬에 저장된 하나 이상의 이미지를 삭제합니다.
- 주요 사용법: 이미지 ID 또는 REPOSITORY:TAG 형식으로 삭제할 이미지를 지정합니다.
- 주의: 해당 이미지를 사용하는 컨테이너(실행 중이거나 중지된 상태 모두)가 있으면 삭제되지 않습니다. 먼저 컨테이너를 삭제(docker rm)해야 합니다.
- -f, --force: 컨테이너가 있더라도 강제로 삭제합니다. (주의해서 사용!)
- 예시:
- docker rmi my-custom-app:v1
- docker rmi b1a2d3c4e5f6 (이미지 ID 사용)
5. docker image prune [OPTIONS]
- 기능: 사용되지 않는 이미지를 삭제하여 디스크 공간을 확보합니다.
- 주요 사용법:
- 기본 동작: 태그가 없는 중간 레이어 이미지(댕글링 이미지)만 삭제합니다.
- -a, --all: 어떤 컨테이너도 사용하지 않는 모든 이미지를 삭제합니다. (신중하게 사용!)
- --filter filter: 조건에 맞는 이미지만 삭제 (예: --filter "until=24h"는 24시간 동안 사용 안 된 이미지 삭제).
- 예시:
- docker image prune (댕글링 이미지만 삭제 - 비교적 안전)
- docker image prune -a (사용 안 되는 모든 이미지 삭제)
6. docker image save [OPTIONS] IMAGE [IMAGE...]
- 기능: 하나 이상의 이미지를 .tar 아카이브 파일로 저장합니다.
- 주요 사용법:
- -o, --output string: 저장할 파일 경로를 지정합니다.
- 예시:
- docker image save -o myapp_v1.tar myapp:1.0
- 용도: 이미지 백업, 오프라인 환경으로 이미지 이동 등에 유용합니다.
7. docker image load [OPTIONS]
- 기능: .tar 아카이브 파일로부터 이미지를 로드합니다.
- 주요 사용법:
- -i, --input string: 로드할 .tar 파일 경로를 지정합니다.
- 예시:
- docker image load -i myapp_v1.tar
- 용도: docker image save로 저장된 파일을 로컬 도커 환경으로 가져올 때 사용합니다.
2. 컨테이너 관리 명령어
1. docker run IMAGE [COMMAND] [ARG...]
- 기능: 이미지로부터 새 컨테이너를 생성하고 실행합니다. 가장 기본적이면서도 많은 옵션을 가진 명령어입니다.
- 주요 옵션:
- -d, --detach: 컨테이너를 백그라운드에서 실행합니다.
- -it: 대화형 모드(-i)와 가상 터미널(-t)을 활성화하여 컨테이너 내부 쉘과 상호작용합니다. (예: -it ubuntu /bin/bash)
- -p <호스트_포트>:<컨테이너_포트>: 호스트와 컨테이너 간 포트를 연결(매핑)합니다.
- -v <호스트_경로_또는_볼륨_이름>:<컨테이너_경로>: 호스트 디렉토리나 도커 볼륨을 컨테이너 내부에 연결(마운트)하여 데이터를 유지하거나 공유합니다.
- --name <컨테이너_이름>: 컨테이너에 고유한 이름을 부여합니다.
- --rm: 컨테이너 종료 시 자동으로 삭제합니다. (임시 컨테이너에 유용)
- -e <키=값>: 컨테이너 내부에 환경 변수를 설정합니다.
- 예시:
- docker run -d -p 8080:80 --name my-web-server nginx (Nginx 컨테이너를 백그라운드로 실행하고 포트 8080과 80 연결)
- docker run -it --rm ubuntu /bin/bash (Ubuntu 컨테이너에서 쉘 실행 후 종료 시 자동 삭제)
2. docker ps
- 기능: 현재 실행 중인 컨테이너 목록을 보여줍니다.
- 주요 옵션:
- -a, --all: 중지된 컨테이너를 포함한 모든 컨테이너 목록을 보여줍니다.
- -q, --quiet: 컨테이너 ID만 출력합니다. (스크립트 활용 시 유용)
- --filter filter: 특정 조건으로 필터링합니다. (예: --filter "status=exited")
- 예시:
- docker ps (실행 중인 컨테이너 확인)
- docker ps -a (모든 컨테이너 확인)
3. docker stop CONTAINER [CONTAINER...]
- 기능: 실행 중인 컨테이너를 정상적으로 중지시킵니다. (SIGTERM 후 SIGKILL)
- 주요 사용법: 중지할 컨테이너의 이름 또는 ID를 지정합니다.
- 예시:
- docker stop my-web-server
4. docker start CONTAINER [CONTAINER...]
- 기능: 중지된 상태의 컨테이너를 시작합니다.
- 주요 사용법: 시작할 컨테이너의 이름 또는 ID를 지정합니다. 이전 설정을 그대로 사용합니다.
- 예시:
- docker start my-web-server
5. docker restart CONTAINER [CONTAINER...]
- 기능: 컨테이너를 재시작합니다. (stop 후 start 실행과 동일)
- 주요 사용법: 재시작할 컨테이너의 이름 또는 ID를 지정합니다.
- 예시:
- docker restart my-web-server
6. docker rm CONTAINER [CONTAINER...]
- 기능: 중지된 상태의 컨테이너를 삭제합니다.
- 주요 옵션:
- -f, --force: 실행 중인 컨테이너를 강제로 삭제합니다. (주의 필요!)
- -v, --volumes: 컨테이너와 연결된 익명 볼륨도 함께 삭제합니다.
- 예시:
- docker rm my-stopped-container
- docker rm $(docker ps -aq --filter "status=exited") (중지된 모든 컨테이너 삭제하는 유용한 방법)
7. docker container prune [OPTIONS]
- 기능: 중지된 모든 컨테이너를 한 번에 삭제합니다.
- 주요 옵션:
- --filter filter: 필터를 적용하여 특정 조건의 중지된 컨테이너만 삭제합니다. (예: --filter "until=24h")
- 예시:
- docker container prune (묻는 메시지 확인 후 중지된 모든 컨테이너 삭제)
3. 컨테이너 상호작용 및 검사 명령어
1. docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
- 기능: 실행 중인 컨테이너 내부에서 새로운 명령어를 실행합니다.
- 주요 옵션:
- -i, --interactive: 표준 입력(STDIN)을 활성화합니다.
- -t, --tty: 가상 TTY(터미널)를 할당합니다. (-it를 함께 사용하면 대화형 쉘 접속 가능)
- -d, --detach: 명령어를 백그라운드에서 실행합니다.
- -u, --user string: 명령어를 실행할 사용자 또는 그룹을 지정합니다.
- 예시:
- docker exec -it my-web-server /bin/bash (my-web-server 컨테이너 내부에서 bash 쉘 실행)
- docker exec my-db-container mysql -u root -pPASSWORD -e "SHOW DATABASES;" (my-db-container 내부에서 MySQL 명령어 실행)
- 용도: 컨테이너를 중지하지 않고 내부 상태 확인, 디버깅, 관리 작업 수행 등에 필수적입니다.
2. docker logs [OPTIONS] CONTAINER
- 기능: 컨테이너가 실행되면서 출력하는 로그(표준 출력/표준 에러)를 보여줍니다.
- 주요 옵션:
- -f, --follow: 실시간으로 계속 추가되는 로그를 스트리밍하여 보여줍니다. (tail -f와 유사)
- --tail string: 로그의 마지막 N줄만 보여줍니다. (예: --tail 100)
- --since string / --until string: 특정 시간 범위의 로그만 필터링합니다.
- -t, --timestamps: 각 로그 라인 앞에 타임스탬프를 표시합니다.
- 예시:
- docker logs my-web-server (my-web-server 컨테이너의 전체 로그 확인)
- docker logs -f --tail 50 my-app-container (my-app-container의 마지막 50줄부터 실시간 로그 확인)
- 용도: 애플리케이션의 동작 상태 확인 및 오류 진단의 기본적인 방법입니다.
3. docker inspect NAME|ID [NAME|ID...]
- 기능: 도커 객체(컨테이너, 이미지, 볼륨, 네트워크 등)의 상세한 설정 및 상태 정보를 JSON 형식으로 보여줍니다.
- 주요 옵션:
- -f, --format string: Go 언어 템플릿을 사용하여 출력 형식을 지정하거나 특정 정보만 추출합니다.
- 예시:
- docker inspect my-web-server (my-web-server 컨테이너의 모든 상세 정보 확인)
- docker inspect my-image:latest (my-image:latest 이미지의 상세 정보 확인)
- docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-container (my-container의 IP 주소만 추출)
- 용도: 컨테이너의 IP 주소, 포트 매핑, 볼륨 마운트 정보 등 저수준(low-level)의 상세 정보를 확인하여 심층적인 문제 해결 및 분석에 사용됩니다.
4. 도커와 함께 쓰는 필수 리눅스 명령어 요약
도커를 사용하더라도 실제 작업은 리눅스 환경(호스트 또는 컨테이너 내부)에서 이루어지는 경우가 많습니다. 도커 작업의 효율을 높여주는 필수 리눅스 명령어들을 알아봅니다.
1. 파일 시스템 및 탐색
- ls [옵션] [경로]: 디렉토리 내용을 나열합니다.
- 도커 활용: 컨테이너 내부 파일 확인 (docker exec my-container ls /app), 호스트의 볼륨 경로 내용 확인 등.
- cd [경로]: 현재 작업 디렉토리를 변경합니다.
- 도커 활용: 호스트에서 빌드 컨텍스트 디렉토리나 볼륨 마운트 경로로 이동할 때 필수적입니다.
- cp [옵션] <원본> <대상>: 파일이나 디렉토리를 복사합니다.
- 주요 옵션:
- -r: 디렉토리를 복사할 때 사용하며, 하위 디렉토리와 파일들을 모두 재귀적으로 포함합니다. (디렉토리 복사 시 필수)
- -p: 원본 파일/디렉토리의 권한, 소유권, 타임스탬프 등 속성을 그대로 유지하며 복사합니다.
- -a (archive): -r과 -p 옵션을 포함하며, 심볼릭 링크 등 추가 속성까지 최대한 보존합니다. 디렉토리 백업 등에 권장됩니다.
- 파일 복사 예시:
- cp my_config.txt /etc/myapp/
- 현재 디렉토리에 있는 my_config.txt 파일을 /etc/myapp/ 디렉토리 안으로 복사합니다. (대상 경로가 디렉토리면 그 안으로 복사)
- cp /app/config/settings.prod /app/config/settings.backup
- /app/config/ 디렉토리의 settings.prod 파일을 같은 디렉토리에 settings.backup 이라는 이름으로 복사합니다. (대상 경로가 파일명이면 해당 이름으로 복사)
- cp my_config.txt /etc/myapp/
- 디렉토리 복사 예시:
- cp -r /data/source_app /backup/
- /data/source_app 디렉토리 전체(하위 내용 포함)를 /backup/ 디렉토리 안으로 복사합니다. 결과적으로 /backup/source_app 디렉토리가 생성됩니다.
- cp -a /var/lib/mysql /mnt/backup/mysql_data_$(date +%Y%m%d)
- MySQL 데이터 디렉토리(/var/lib/mysql) 전체를 모든 속성을 유지하며 (-a) 날짜별 백업 디렉토리(/mnt/backup/mysql_data_YYYYMMDD) 안으로 복사합니다.
- cp -r /data/source_app /backup/
- 도커 활용: 호스트에서 도커 빌드 컨텍스트(Dockerfile이 있는 디렉토리)를 준비할 때 필요한 파일들을 복사하거나, 호스트에 마운트된 볼륨으로 설정 파일/데이터를 복사/백업할 때, 또는 docker exec를 통해 컨테이너 내부에서 파일/디렉토리를 복사할 때 사용합니다. (주의: 호스트 <-> 컨테이너 간 파일 복사는 docker cp 명령어를 사용합니다.)
- 주요 옵션:
- mv <원본> <대상>: 파일이나 디렉토리를 이동하거나 이름을 변경합니다.
- 도커 활용: 호스트에서 빌드 컨텍스트 파일을 정리하거나, 마운트된 볼륨 내에서 파일을 이동/정리할 때, 또는 docker exec를 통해 컨테이너 내부에서 파일을 이동시킬 때 사용합니다.
- cat [파일]: 파일 내용을 화면에 출력합니다.
- 도커 활용: 컨테이너 내부나 볼륨에 있는 간단한 설정 파일, 로그 파일 내용을 빠르게 확인할 때 유용합니다.
- find [경로] [조건]: 지정된 경로 하위에서 조건에 맞는 파일을 검색합니다.
- 도커 활용: 복잡한 컨테이너 파일 시스템이나 볼륨 내부에서 특정 파일을 찾을 때 사용합니다.
2. 리소스 사용량 확인
- du -sh [경로]: 지정된 경로의 디스크 사용량 총합( -s )을 사람이 읽기 쉬운 형태( -h )로 보여줍니다.
- 특정 깊이(Depth) 지정: 하위 디렉토리의 사용량을 특정 깊이까지만 보려면 `--max-depth=N` 옵션을 함께 사용합니다. (예: `du -h --max-depth=1 [경로]` 는 해당 경로 바로 아래 1단계 깊이의 디렉토리 및 파일 각각의 크기를 보여줍니다.)
- 도커 활용: 특정 볼륨 디렉토리의 전체 크기 확인(-sh), 또는 도커 데이터 저장 경로(/var/lib/docker) 내부의 구성 요소별(images, containers, volumes 등) 크기를 확인할 때 (예: du -h --max-depth=1 /var/lib/docker) 유용합니다.
- df -h: 시스템 전체의 파일 시스템별 디스크 사용량을 사람이 읽기 쉬운 형태( -h )로 보여줍니다.
- 도커 활용: 도커는 호스트의 디스크 공간을 사용하므로, 호스트의 남은 용량을 확인하는 것은 매우 중요합니다.
3. 로그 및 텍스트 처리
- grep [옵션] PATTERN [파일]: 텍스트 내용에서 특정 패턴(문자열)을 검색합니다.
- 도커 활용: docker logs 와 파이프(|)로 연결하여 로그에서 특정 키워드(예: ERROR)를 필터링할 때 매우 유용합니다.
- 예시: docker logs my-app-container | grep ERROR
- tail -f [파일]: 파일의 마지막 부분을 실시간으로 계속 출력합니다. (-f 옵션)
- 도커 활용: 컨테이너가 호스트 볼륨에 직접 쓰는 로그 파일을 실시간 모니터링할 때 사용합니다. (docker logs -f 와 유사한 목적)
- 예시: tail -f /path/to/mounted/volume/app.log
- less [파일]: 대용량 파일을 화면 단위로 넘겨가며 볼 수 있게 해주는 뷰어입니다.
- 도커 활용: docker logs의 결과가 너무 길 때 파이프(|)로 연결하여 내용을 천천히 검토할 수 있습니다.
- 예시: docker logs my-container | less
5. 이외 개인적으로 은근 자주 쓰는 명령어
- history: 명령어 이력 보기. 복잡한 docker 명령어 다시 쓸 때 유용. (매번 과거 이력을 확인해보는 것 같네요 ㅋㅋ)
- kill [시그널] PID: 프로세스(PID)에 종료 신호 전송. -15 (정상 종료 시도), -9 (강제 종료). 컨테이너 내 프로세스는 docker exec <컨테이너> kill <PID> 사용. -9는 신중히 사용하셔야 합니다. (python 파일을 강제로 종료하는 등 자주 씁니다.)
- rm -rf <경로>: 지정 경로와 하위 내용 묻지 않고 강제 삭제. 빌드 컨텍스트, 불필요한 볼륨 등 정리 시 사용 가능. 이거는 진짜 매우 위험한 명령언데요. 실행 취소도 불가능해서 경로 반드시 재확인하고 눌러주세요. (사용하면 속이 시원합니다.)
일단 기억나고 자주 쓰이는건 이정도.. 있는 것 같습니다. 사실 이번 글은 매번 저도 까먹어서 블로그를 찾아봐서 이번 기회에 한번 정리해봤습니다. 같이 써요~
'개발 > Docker' 카테고리의 다른 글
[Docker] Docker 컨테이너 내부에서 Jupyter Lab 설정 및 실행 : 버전 관리와 정확한 검증을 위한 환경 구축 (0) | 2025.04.21 |
---|---|
Dockerfile 내용 기반 Docker Image Build. (0) | 2024.11.27 |
[Docker] Python Dash로 개발한 웹 페이지 Docker로 띄우기 (2) | 2024.01.29 |
[Docker]Docker 기본 명령어 정리 (0) | 2024.01.26 |
[Docker]Windows 11 Pro에서 Docker 설치(Docker Desktop) (0) | 2024.01.26 |