안녕하세요! 개발자라면 누구나 한 번쯤 '도커(Docker)'라는 말을 들어보셨을 거예요. "내 컴퓨터에서는 잘 됐는데..."라는 말을 사라지게 만드는 마법 같은 도구라고 하죠. 😉
하지만 막상 시작하려고 하면 검은 터미널 화면 앞에서 막막하게 느껴질 수 있습니다. 그래서 오늘은 도커의 핵심적인 생명주기(Lifecycle)를 책임지는 필수 명령어들을 모아, 누구나 따라 할 수 있도록 정리해 봤습니다. 이 글 하나면 도커 컨테이너를 자유자재로 다루는 첫걸음을 뗄 수 있을 거예요!

1단계: 기존 컨테이너 관리하기 (조회, 중지, 삭제) 📦
가장 먼저 이미 실행 중인 컨테이너들을 관리하는 방법부터 알아볼까요? 컴퓨터의 작업 관리자처럼, 도커에도 실행 중인 프로세스(컨테이너)를 보고 관리하는 기능이 있습니다.
✅ 실행 중인 컨테이너 목록 보기: docker ps
현재 내 서버에서 어떤 컨테이너들이 실행되고 있는지 확인하는 명령어입니다
# 현재 활발하게 실행 중인 컨테이너만 보여줍니다.
docker ps
만약 중지된 컨테이너까지 모두 보고 싶다면 -a 옵션을 추가해 주세요.
# 실행 중이거나, 중지되었거나, 모든 컨테이너를 보여줍니다.
docker ps -a
이 명령어를 통해 컨테이너의 ID, 이름, 사용 중인 이미지, 포트 등 중요한 정보를 한눈에 파악할 수 있습니다.
🛑 실행 중인 컨테이너 멈추기: docker stop
더 이상 필요 없는 컨테이너가 있다면 안전하게 중지시킬 수 있습니다. docker ps 명령어로 확인한 컨테이너의 ID나 이름을 사용하면 됩니다.
# docker stop <컨테이너_ID_또는_이름>
docker stop a1b2c3d4e5f6
🗑️ 컨테이너 완전히 삭제하기: docker rm
stop은 컨테이너를 잠시 멈추는 것일 뿐, 완전히 삭제하는 것은 아닙니다. 불필요한 컨테이너를 완전히 지우려면 rm 명령어를 사용해야 합니다. 주의할 점은, 실행 중인 컨테이너는 바로 삭제할 수 없으므로 반드시 stop을 먼저 해야 합니다.
# docker rm <컨테이너_ID_또는_이름>
docker rm a1b2c3d4e5f6
💡 꿀팁: 중지와 삭제를 한 번에 하고 싶다면? -f (force) 옵션을 사용하면 실행 중인 컨테이너도 바로 삭제할 수 있습니다. docker rm -f <컨테이너_ID_또는_이름>
2단계: 나만의 설계도 만들기 (Docker 이미지 빌드) 🛠️
이제 기존 컨테이너를 정리했으니, 나만의 애플리케이션이 담긴 새로운 이미지를 만들어 볼 차례입니다.
- Dockerfile이란? 내 애플리케이션을 실행하는 데 필요한 모든 설정(기반 OS, 설치할 프로그램, 소스코드 복사, 실행 명령어 등)을 순서대로 기록해 둔 텍스트 파일, 즉 이미지 설계도입니다.
- 이미지(Image)란? 이 Dockerfile이라는 설계도를 바탕으로 만들어진, 애플리케이션 실행에 필요한 모든 것을 담은 패키지입니다.
이 설계도를 이미지로 만드는 마법의 주문은 docker build 입니다.
# cd /Dockerfile이-있는-경로로-이동
# docker build -t <이미지이름:태그> <Dockerfile경로>
docker build -t my-web-app:1.0 .
명령어의 각 부분을 살펴볼까요?
- docker build: "이 설계도로 이미지를 만들어 줘!" 라는 뜻입니다.
- -t my-web-app:1.0: -t는 이미지에 이름과 태그(버전)를 붙이는 옵션입니다. (my-web-app이라는 이름의 1.0 버전) 이렇게 이름을 붙여야 나중에 이미지를 쉽게 찾아 쓸 수 있습니다.
- . : Dockerfile이 위치한 경로를 의미합니다. .은 '현재 디렉터리'를 뜻하죠.
3단계: 드디어 실행! (컨테이너 세상에 내보내기) 🚀
자, 이제 잘 만들어진 이미지를 가지고 실제 동작하는 컨테이너로 실행시킬 시간입니다! 가장 중요하고 옵션도 많은 docker run 명령어에 대해 알아봅시다.
# docker run [옵션] <이미지이름:태그>
docker run -d --name my-server -p 8080:80 my-web-app:1.0
와, 뭔가 길어 보이지만 핵심적인 옵션 몇 가지만 알면 정말 편리합니다.
- -d (--detach): 컨테이너를 백그라운드에서 실행합니다. 이 옵션이 없으면 컨테이너가 터미널을 차지해버려서 다른 작업을 할 수 없게 됩니다. 서버 애플리케이션이라면 필수 옵션!
- --name my-server: 컨테이너에 my-server라는 이름을 붙여줍니다. 이름을 지정해두면 나중에 docker stop my-server 처럼 관리하기가 매우 편해집니다.
- -p 8080:80: 포트를 연결하는 가장 중요한 옵션입니다. 외부(호스트) 포트:내부(컨테이너) 포트를 의미해요. 위 예시는 "내 컴퓨터의 8080 포트로 들어오는 요청을 컨테이너의 80번 포트로 전달해 줘!" 라는 뜻입니다. 덕분에 우리는 http://localhost:8080 으로 컨테이너 안에서 실행 중인 웹서버에 접속할 수 있게 됩니다.
- my-web-app:1.0: 마지막에는 실행시킬 이미지의 이름을 적어줍니다.
마무리하며
오늘 우리는 도커의 핵심적인 흐름 세 가지를 모두 경험했습니다.
- 관리 (ps, stop, rm): 기존 컨테이너를 정리하고
- 빌드 (build): 나만의 이미지를 만들고
- 실행 (run): 세상에 내 애플리케이션을 띄웠습니다.
이 세 가지 명령어 사이클만 익숙해져도 대부분의 도커 작업을 자신감 있게 처리할 수 있습니다. 이제 여러분의 컴퓨터에서만 돌아가던 프로젝트를 도커 이미지로 만들어 친구에게 공유하거나, 서버에 쉽게 배포해 보세요!
태그: Docker, 도커, 컨테이너, 가상화, DevOps, 개발, 서버, 이미지빌드, Docker기초
'일반IT > 리눅스' 카테고리의 다른 글
| 리눅스 서버 탐정 되기 🕵️♂️ 포트 번호로 프로세스 추적하고 마스터 프로세스 찾는 법 (0) | 2025.10.11 |
|---|---|
| 리눅스 NFS 서버 구축 완전 정복! 📁 내 서버의 폴더를 네트워크로 공유하기 (0) | 2025.10.11 |
| Git 초보 탈출! 🚀 로컬 폴더를 GitHub 원격 저장소에 연결하는 완벽 가이드 (0) | 2025.10.11 |
| 🐧 리눅스 스토리지 관리의 끝판왕: LVM으로 디스크 파티션 자유자재로 다루기 (1) | 2025.10.10 |
| 🐧 리눅스 파일 시스템 완전 정복: fstab 자동 마운트와 읽기 전용(Read-Only) 설정으로 데이터 지키기 (0) | 2025.10.10 |