Docker 설치와 기본 명령어

컨테이너는 코드와 그 종속성을 하나로 묶어, 어느 환경에서나 똑같이 돌아가게 해주는 표준 단위입니다. 그 관리를 단순하게 만들어주는 대표 런타임이 Docker죠. 설치부터 기본 명령어까지 정리해 둘게요.

설치 (Ubuntu)

Docker 공식 저장소를 등록해서 설치합니다. 예전 문서들이 focal(20.04) 같은 코드명을 하드코딩해두는 경우가 많은데, 아래처럼 $(. /etc/os-release && echo "$VERSION_CODENAME") 를 쓰면 배포판 버전에 상관없이 동작합니다.

apt-get update
apt-get install -y ca-certificates curl gnupg

# 공식 GPG 키 등록
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg

# 저장소 등록 (현재 배포판 코드명 자동 사용)
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
  | tee /etc/apt/sources.list.d/docker.list > /dev/null

apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

참고: apt-key 를 쓰는 오래된 방식은 더 이상 권장되지 않습니다. 위처럼 signed-by 키링 방식을 쓰세요.

이미지 다루기

docker search [이미지명]      # 이미지 검색
docker pull [이미지명]:[태그]  # 이미지 받기 (태그 생략 시 latest)
docker images                # 받은 이미지 확인

컨테이너 생성과 실행

docker create 로 만들고 docker start 로 실행하는 게 기본 흐름이지만, 보통은 둘을 합친 docker run 을 씁니다.

주요 옵션은 이렇습니다.

옵션설명
--name [이름]컨테이너 이름 지정
-p [호스트:컨테이너]포트 바인딩 (예: -p 8080:80)
-v [호스트:컨테이너]볼륨 마운트
-e [변수=값]환경 변수 지정
-d백그라운드 실행
-i표준 입력 유지 (interactive)
-t터미널 할당 (TTY)

예시로 MySQL 컨테이너를 하나 띄워보면:

docker run -it --name mysql -e MYSQL_ROOT_PASSWORD=[비밀번호] -d -p 3306:3306 mysql

컨테이너를 다시 시작하거나 재기동할 때는 docker start [이름], docker restart [이름] 을 씁니다.

상태 확인과 접속

docker ps        # 실행 중인 컨테이너
docker ps -a     # 중지된 것까지 전부

docker logs [컨테이너]   # 로그 출력

# 컨테이너 내부에서 명령 실행
docker exec -it [컨테이너] /bin/bash
docker exec -it --user root [컨테이너] /bin/sh   # 루트로 접속

docker attach 로 실행 중인 컨테이너에 붙어 로그를 실시간으로 볼 수도 있는데, 이때 컨테이너를 멈추지 않고 터미널만 빠져나오려면 Ctrl + P, Ctrl + Q 를 누릅니다. 그냥 exit 하면 컨테이너가 같이 종료될 수 있으니 주의하세요.

중지와 삭제

docker stop [컨테이너]   # 실행 중인 컨테이너 중지
docker rm [컨테이너]     # 컨테이너 삭제

docker container prune   # 중지된 컨테이너 일괄 삭제
docker system prune      # 중지 컨테이너 + 미사용 이미지 삭제
docker system prune --volumes  # 미사용 볼륨까지 삭제

prune 계열은 편하지만 한 번에 많이 지우니, 특히 --volumes 는 데이터가 날아갈 수 있어 실행 전에 무엇이 지워지는지 꼭 확인하세요.

여기까지가 매일 쓰는 기본기입니다. 다음 글에서는 이미지를 직접 만드는 Dockerfile로 넘어갑니다.