개발자라면 누구나 “내 컴퓨터에선 되는데…”라는 말을 한 번쯤 들어봤을 겁니다. Docker는 바로 이 문제를 해결해주는 혁신적인 도구입니다. 하지만 명령어가 너무 많아서 어디서부터 시작해야 할지 막막하셨나요? 이 가이드 하나면 Docker의 핵심 명령어를 완벽하게 정복할 수 있습니다.
Docker가 개발 환경을 혁신하는 이유
컨테이너 기술은 현대 개발 환경의 표준이 되었습니다. 가상 머신보다 가볍고 빠르며, 어떤 환경에서든 동일하게 작동하는 애플리케이션을 만들 수 있죠. Docker 명령어를 제대로 익히면 개발 생산성이 최소 30% 이상 향상된다는 통계도 있습니다.
Docker 이미지 검색과 다운로드 – 시작의 첫걸음
Docker Hub에서 이미지 찾기
Docker Hub는 수백만 개의 컨테이너 이미지가 저장된 공개 저장소입니다. 필요한 이미지를 검색하는 방법부터 알아볼까요?
docker search [옵션] <검색어>
주요 옵션 활용법:
-automated=false: 자동 빌드된 이미지만 표시-no-trunc=false: 전체 설명을 잘림 없이 표시s [--stars=n]: 별점이 n개 이상인 인기 이미지만 필터링
실전 예제를 볼까요? Ubuntu 이미지 중에서 별점 100개 이상인 것만 찾으려면:
docker search --stars=100 ubuntu
이미지 다운로드의 모든 것
찾은 이미지를 로컬 환경으로 가져오는 pull 명령어는 Docker 사용의 기본입니다.
docker pull [옵션] <이미지명>[:태그명]
태그를 지정하지 않으면 자동으로 latest 버전을 다운로드합니다. 하지만 프로덕션 환경에서는 반드시 명확한 버전을 지정하는 것이 좋습니다.
# 최신 버전 다운로드
docker pull ubuntu
# 특정 버전 다운로드 (권장)
docker pull ubuntu:22.04
Docker 이미지 관리 – 효율적인 저장소 운영법
보유 이미지 확인하기
로컬에 저장된 이미지 목록을 확인하는 방법입니다.
docker images [옵션] [repository명]
유용한 옵션 조합:
a, --all: 중간 레이어를 포함한 모든 이미지 표시-digests: 이미지의 고유 digest 값 표시-no-trunc: 이미지 ID를 전체 길이로 표시q, --quiet: 이미지 ID만 간단하게 출력
특정 이미지만 필터링해서 보고 싶다면:
docker images ubuntu
이미지 삭제로 디스크 공간 확보
사용하지 않는 이미지가 쌓이면 디스크 공간을 많이 차지합니다. 정기적인 정리가 필요하죠.
# 이미지 ID로 삭제
docker rmi <이미지ID>
# 이름과 태그로 삭제
docker rmi ubuntu:22.04
# 여러 이미지 한 번에 삭제
docker rmi <이미지1> <이미지2> <이미지3>
주의사항: 해당 이미지로 실행 중인 컨테이너가 있으면 삭제할 수 없습니다. 컨테이너를 먼저 중지하고 삭제해야 합니다.
이미지 업로드로 팀과 공유하기
직접 만든 이미지를 Docker Hub에 업로드하면 팀원들과 쉽게 공유할 수 있습니다.
docker push <Docker Hub 사용자명>/<이미지명>:<태그>
업로드 전에 Docker Hub 로그인이 필요합니다:
docker login
컨테이너 실행과 관리 – 실전 활용의 핵심
컨테이너 시작하기
이미지에서 컨테이너를 생성하고 실행하는 run 명령어는 가장 많이 사용하는 명령어입니다.
docker run -it <이미지명>
자주 사용하는 옵션:
i: 표준 입력을 활성화하여 컨테이너와 상호작용t: TTY 모드 사용 (터미널처럼 사용 가능)d: 백그라운드 모드로 실행p: 포트 매핑 (예:p 8080:80)-name: 컨테이너에 이름 지정
실전 예제:
# 우분투 컨테이너를 대화형 모드로 실행
docker run -it ubuntu /bin/bash
# Nginx 웹서버를 백그라운드로 실행하면서 포트 연결
docker run -d -p 8080:80 --name my-nginx nginx
컨테이너 목록 조회
현재 실행 중인 컨테이너와 중지된 컨테이너를 확인하는 방법입니다.
# 실행 중인 컨테이너만 보기
docker ps
# 모든 컨테이너 보기 (중지된 것 포함)
docker ps -a
# 컨테이너 ID만 간단히 보기
docker ps -q
컨테이너 상태 제어 마스터하기
컨테이너 시작:
docker start <컨테이너명 또는 ID>
컨테이너 재시작:
docker restart <컨테이너명 또는 ID>
컨테이너 중지:
docker stop <컨테이너명 또는 ID>
# 모든 실행 중인 컨테이너 한 번에 중지
docker stop $(docker ps -q)
강제 종료가 필요한 경우:
docker kill <컨테이너명 또는 ID>
실행 중인 컨테이너 접속하기
이미 실행 중인 컨테이너에 터미널로 접속하는 방법입니다.
docker attach <컨테이너명 또는 ID>
exec 명령어로 새로운 프로세스를 실행할 수도 있습니다:
docker exec -it <컨테이너명> /bin/bash
컨테이너 삭제와 정리
개별 컨테이너 삭제:
docker rm <컨테이너명 또는 ID>
중지된 모든 컨테이너 일괄 삭제:
docker rm $(docker ps -a -q)
실행 중인 컨테이너 강제 삭제:
docker rm -f <컨테이너명>
컨테이너 이름 변경
나중에 관리하기 쉽도록 컨테이너 이름을 바꿀 수 있습니다.
docker rename <기존이름> <새이름>
# ID로도 가능
docker rename a1b2c3d4 my-container
변경사항 저장 – 나만의 커스텀 이미지 만들기
컨테이너에서 작업한 내용을 새로운 이미지로 저장하는 commit 명령어는 매우 유용합니다.
docker commit <컨테이너명 또는 ID> <새이미지명>:<태그>
실전 활용 시나리오:
Jupyter Lab을 설치한 데이터 과학 환경을 만들었다면, 매번 재설치하지 않고 이미지로 저장해두세요.
# 컨테이너에서 Jupyter 설치 후
docker commit my-container my-jupyter:v1.0
이제 다음번에는 이 이미지로 바로 시작할 수 있습니다:
docker run -it my-jupyter:v1.0
이미지 백업과 배포 – 오프라인 환경 대응법
이미지를 파일로 추출하기
네트워크가 없는 환경이나 다른 서버로 이미지를 이동할 때 유용합니다.
docker save -o <파일명.tar> <이미지명>:<태그>
# 실전 예제
docker save -o ubuntu-backup.tar ubuntu:22.04
파일 크기를 확인하려면:
ls -lh ubuntu-backup.tar
추출한 이미지 불러오기
다른 환경에서 저장된 tar 파일을 Docker 이미지로 복원합니다.
docker load -i <파일명.tar>
# 불러온 후 확인
docker images
이 방법은 폐쇄망 환경이나 인터넷 연결이 불안정한 곳에서 특히 유용합니다.
Docker 명령어 효율화 팁 7가지
1. 별칭(Alias) 활용으로 타이핑 줄이기
자주 쓰는 명령어는 짧게 만들어두세요:
alias dps='docker ps'
alias dpsa='docker ps -a'
alias di='docker images'
2. 한 번에 여러 컨테이너 제어하기
필터링과 조합하면 강력합니다:
# 24시간 이상 된 컨테이너 삭제
docker container prune --filter "until=24h"
3. 리소스 모니터링
컨테이너의 CPU, 메모리 사용량을 실시간으로 확인:
docker stats
4. 로그 확인으로 문제 해결
docker logs <컨테이너명>
# 실시간 로그 보기
docker logs -f <컨테이너명>
5. 컨테이너와 호스트 간 파일 복사
# 호스트 → 컨테이너
docker cp local-file.txt container:/path/
# 컨테이너 → 호스트
docker cp container:/path/file.txt ./
6. 시스템 정리로 공간 확보
# 사용하지 않는 모든 리소스 삭제
docker system prune -a
# 볼륨까지 함께 삭제
docker system prune -a --volumes
7. Docker Compose로 복잡한 환경 관리
여러 컨테이너를 조합해야 한다면 docker-compose.yml을 활용하세요. 웹 서버, 데이터베이스, 캐시를 한 번에 실행할 수 있습니다.
실무에서 자주 겪는 오류와 해결법
“Permission denied” 오류
Linux에서 sudo 없이 Docker를 실행하려면 사용자를 docker 그룹에 추가하세요:
sudo usermod -aG docker $USER
포트 충돌 문제
다른 프로세스가 이미 사용 중인 포트는 변경해야 합니다:
docker run -p 8081:80 nginx # 8080 대신 8081 사용
디스크 공간 부족
정기적으로 사용하지 않는 리소스를 정리하세요:
docker system df # 사용량 확인
docker system prune -a # 정리
다음 단계로 나아가기
Docker 명령어에 익숙해졌다면 이제 다음 주제로 확장해보세요:
- Docker Compose: 멀티 컨테이너 애플리케이션 관리
- Dockerfile: 자동화된 이미지 빌드
- Docker Network: 컨테이너 간 통신 설정
- Docker Volume: 데이터 영속성 관리
- Kubernetes: 대규모 컨테이너 오케스트레이션
Docker는 단순한 도구가 아니라 현대 개발 환경의 필수 인프라입니다. 이 가이드에서 배운 명령어들을 실제 프로젝트에 적용하면서 익숙해지세요. 처음에는 어렵게 느껴지더라도 반복하다 보면 자연스럽게 손에 익습니다.
궁금한 점이 있으면 댓글로 남겨주세요.
참고 자료: