울분트 리눅스(Ubuntu) 환경에서 Docker(도커) 컨테이너 설치 및 기본 명령어 총정리
울분트 리눅스(Ubuntu) 환경에서 Docker(도커) 컨테이너 설치 및 기본 명령어 총정리
리눅스(Ubuntu) 환경에서 가장 널리 쓰이는 컨테이너 플랫폼인 Docker(도커)의 최신 설치 방법과 실무에서 매일 쓰는 기본 명령어를 핵심만 모아 정리해 드립니다.

1부: Ubuntu 환경에 Docker 설치하기
우분투 패키지 저장소에 있는 기본 도커보다, 도커 공식 저장소를 등록해 최신 안정화 버전을 설치하는 것이 가장 좋습니다. 터미널을 열고 다음 명령어를 순서대로 입력하세요.

1. 시스템 업데이트 및 필수 패키지 설치
기존 패키지 리스트를 업데이트하고, HTTPS를 통해 리포지토리를 사용할 수 있도록 보안 관련 패키지들을 설치합니다.
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
2. Docker 공식 GPG 키 및 저장소 등록
도커 공식 다운로드 서버를 신뢰할 수 있도록 GPG 키를 추가하고, 우분투 패키지 소스 리스트에 도커 저장소를 등록합니다.
# GPG 키 등록
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 저장소(Repository) 등록
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
3. Docker 엔진 설치
저장소가 추가되었으므로 패키지 리스트를 다시 업데이트한 뒤 도커 엔진을 설치합니다.
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
4. [선택] 일반 사용자 계정 권한 부여
도커는 기본적으로 관리자 권한이 필요하여 매번 sudo docker를 붙여야 합니다. 현재 로그인한 사용자 계정을 docker 그룹에 추가하면 sudo 없이 편하게 사용할 수 있습니다.
sudo usermod -aG docker $USER
⚠️ 주의: 이 명령어를 적용한 후에는 터미널을 완전히 종료하고 다시 열거나, 시스템을 로그아웃 후 재로그인해야 sudo 없이 도커 명령어가 작동합니다.
2부: 도커 핵심 기본 명령어 총정리
도커의 기본 작동 방식은 이미지(Image)를 다운로드하고, 이를 기반으로 독립된 가상 환경인 컨테이너(Container)를 실행하는 구조입니다.
1. 도커 이미지(Image) 관련 명령어
- 이미지 검색: docker search [이미지명]
- 도커 허브(Docker Hub)에서 원하는 이미지(예: nginx, mysql)를 검색합니다.
- 이미지 다운로드: docker pull [이미지명]:[태그]
- 서버나 로컬로 이미지를 내려받습니다. 태그를 생략하면 가장 최신 버전인 latest를 가져옵니다.
- 예: docker pull ubuntu:22.04
- 보유 이미지 목록 조회: docker images
- 로컬 컴퓨터에 다운로드되어 있는 이미지들의 목록과 용량을 확인합니다.
- 이미지 삭제: docker rmi [이미지 ID 또는 이미지명]
- 더 이상 쓰지 않는 이미지를 삭제하여 디스크 공간을 확보합니다.
2. 도커 컨테이너(Container) 실행 및 제어 명령어
- 컨테이너 생성 및 실행: docker run [옵션] [이미지명]
- 이미지를 바탕으로 컨테이너를 실행하는 가장 중요한 명령어입니다.
- 자주 쓰는 필수 옵션:
- -d: 백그라운드(데몬) 모드로 실행 (터미널을 닫아도 계속 실행됨)
- -p [호스트포트]:[컨테이너포트]: 포트 포워딩 (외부 포트와 컨테이너 내부 포트 연결)
- --name [이름]: 컨테이너에 고유한 이름 부여
- -it: 컨테이너 내부 터미널로 키보드 입출력을 가능하게 함
- 예 (Nginx 웹서버 실행): docker run -d -p 80:80 --name my-web nginx
- 컨테이너 상태 조회:
- docker ps : 현재 실행 중인 컨테이너만 조회합니다.
- docker ps -a : 중지된 컨테이너를 포함해 모든 컨테이너 목록을 조회합니다.
- 컨테이너 중지 및 시작:
- docker stop [컨테이너 이름 또는 ID] : 가동 중인 컨테이너를 안전하게 중지합니다.
- docker start [컨테이너 이름 또는 ID] : 중지된 컨테이너를 다시 깨워 실행합니다.
- 컨테이너 내부 진입: docker exec -it [컨테이너 이름] /bin/bash
- 이미 실행 중인 컨테이너 내부의 리눅스 터미널(bash 셸)로 접속하여 직접 명령어를 실행할 때 사용합니다. (빠져나올 때는 exit 입력)
- 컨테이너 삭제: docker rm [컨테이너 이름 또는 ID]
- 생성된 컨테이너를 완전히 삭제합니다. (실행 중인 컨테이너는 docker stop으로 먼저 멈춘 뒤 삭제해야 합니다.)
3. 모니터링 및 관리 명령어
- 컨테이너 로그 확인: docker logs [컨테이너 이름]
- 컨테이너 내부에서 출력되는 애플리케이션 로그나 에러 메시지를 확인합니다. -f 옵션을 붙이면 실시간으로 로그를 추적합니다. (docker logs -f my-web)
- 리소스 사용량 확인: docker stats
- 실행 중인 컨테이너들이 CPU, 메모리, 네트워크를 얼마나 소모하고 있는지 실시간 모니터링 화면을 보여줍니다.
- 안 쓰는 도커 자원 일괄 정리: docker system prune -a
- 멈춰있는 컨테이너, 사용되지 않는 컨테이너 네트워크, 이름 없는 부모 잃은 이미지(dangling images) 등을 한 번에 지워 디스크 용량을 대폭 확보해 줍니다.
요약 가이드: 웹 서버 한 줄로 띄우기 테스트
설치가 완벽히 끝났다면 아래 명령어를 입력해 보세요.
docker run -d -p 8080:80 --name test-nginx nginx
이후 웹 브라우저를 열고 http://localhost:8080에 접속했을 때 "Welcome to nginx!" 페이지가 나타난다면 리눅스 환경에 도커가 성공적으로 안착하여 구동되고 있는 것입니다. 테스트가 끝난 컨테이너는 docker stop test-nginx 후 docker rm test-nginx로 깔끔하게 치울 수 있습니다.