목차
도커 (Docker)의 실행 흐름

- docker-cli (도커 클라이언트) : 사용자가 터미널에서 도커 명령어를 입력한다.
- dockerd (도커 데몬) : 도커 API 요청을 처리하는 백그라운드 프로세스
- containerd : 컨테이너 실행 및 괄니에 필요한 기능을 수행하는 오픈소스 컨테이너 런타임으로, 컨테이너의 생명주기를 모두 관리한다.
- containerd-shim : containerd와 runc 사이에서 작동하는 중간 프로세스로, 컨테이너 실행을 조정하는 역할을 한다.
- runc : 컨테이너 실행과 관련된 작업을 수행하는 저수준 컨테이너 런타임으로, 실제 컨테이너 실행만 담당한다.
나는 현재 MacOS 환경에 Virtual Box를 설치했고, 그 위에서 도커를 실행한다.
호스트 OS : macOS
가상화 소프트웨어 : VirtualBox
게스트 OS : Ubuntu (Linux 기반)
이제 도커의 명령어에 대해서 알아보도록 하자.
Docker 엔진 시작/종료 및 설정하는 법
- 도커 엔진 시작하기
sudo systemctl start docker
- 도커 엔진 종료하기
sudo systemctl stop docker
- 자동 실행 설정하기
sudo systemctl enable docker
- 설정 상태 보기
sudo systemctl is-enabled docker
enabled : 부팅 시 자동 실행 설정
disabled : 자동 실행 설정 안 됨
static : 다른 서비스에 의해 의존적으로 실행되는 경우
- 상태 확인하기
sudo systemctl status docker
도커 명령어의 기본적인 사용법
docker [상위 커맨드(무엇을)] [하위 커맨드(어떻게)] [옵션(대상)]

컨테이너 (Container) 사용 명령어
docker container [하위 커맨드] [옵션]
- docker container run [옵션] [이미지]: 이미지로 컨테이너 생성 및 실행
- docker container ps : 실행중인 컨테이너 목록
- docker container ps -a : 모든 컨테이너 목록
- docker container stop [컨테이너] : 컨테이너 정지
- docker container start [컨테이너] : 정지된 컨테이너 재시작
- docker container rm [컨테이너] : 컨테이너 삭제
- docker container ls : 로컬에 저장된 실행중인 컨테이너 목록 (=ps의 최신 버전)
- docker container cp [컨테이너:경로] [호스트 경로] : 컨테이너에서 파일 복사
- docker container create [이미지] : 도커 이미지로부터 컨테이너 생성
- docker container commit : 도커 컨테이너를 이미지로 변환
- docker container exec -it [컨테이너명] [명령] : 실행 중인 컨테이너에 명령 실행
- docker container attach [컨테이너명] : 실행 중인 컨테이너에 연결
- docker container logs [컨테이너명] : 컨테이너의 로그 출력
- docker container inspect [컨테이너명] : 컨테이너 상세 정보 출력 (JSON 형식)
- docker container rename [컨테이너 기존 이름] [컨테이너 새 이름] : 컨테이너의 이름 변경
이미지 (Image) 사용 명령어
docker image [하위 커맨드] [옵션]
- docker image ls: 로컬에 저장된 도커 이미지 목록 표시
- docker image pull [이미지] : 레지스트리 (Docker Hub)에서 이미지 다운로드
- docker image push [이미지] : 레지스트리 (Docker Hub)로 이미지 업로드
- docker image build -t [이름:태그] : Dockerfile로부터 이미지 생성
- docker image tag [이미지 ID]:[새이름:태그] : 레지스트리 (Docker Hub)에서 이미지 다운로드
- docker image inspect [이미지] : 이미지 상세 정보 출력 (JSON 형식)
- docker image history [이미지 ID] : 이미지가 생성된 히스토리 (레이어) 확인
- docker image save -o [파일명.tar] [이미지] : 이미지를 tar 파일로 저장
- docker image load -i [파일명.tar] : tar로 묶인 이미지 로드 (불러오기)
- docker image rm [이미지]: 도커 이미지를 삭제
볼륨 (volume) 사용 명령어
docker volume [하위 커맨드] [옵션]
- docker volume create: 볼륨 생성
- docker volume inspect: 볼륨의 상세 정보 출력
- docker volume ls: 볼륨의 목록 출력
- docker volume prune: 현재 마운트되지 않은 볼륨 모두 삭제
- docker volume rm: 지정한 볼륨 삭제
도커는 컨테이너에서 작업을 진행하기 때문에 모든 데이터는 컨테이너 내부에 존재한다.
만약 여기서 컨테이너를 삭제하게 된다면 ?
바로 해당 컨테이너에 존재하는 데이터들까지 전부 사라지게 된다 !
이때, 컨테이너는 삭제해도 데이터는 유지하고 싶을 때는 어떻게 해야할까 ?
바로 볼륨 (volume) 을 사용하면 된다.
볼륨 (Volume) 이란 ?
컨테이너와 독립적으로 데이터를 저장하는 공간으로, 데이터의 지속성을 확보하기 위해 사용된다.
이는 컨테이너 내부에서 생성된 데이터를 저장하며, DB의 데이터를 유지하고, 로그 파일을 기록하는 등 일시적인 데이터가 아닌 영구적인 데이터를 저장할 때 사용된다.
네트워크 (Network) 사용 명령어
docker network [하위 커맨드] [옵션]
- docker network connect: 컨테이너를 도커 네트워크에 연결
- docker network disconnect: 컨테이너의 도커 네트워크 연결 해제
- docker network create: 컨테이너 네트워크를 생성
- docker network inspect: 도커 네트워크의 상세 정보를 출력
- docker network ls: 도커 네트워크의 목록을 출력
- docker network prune: 현재 컨테이너가 접속하지 않은 네트워크를 모두 삭제
- docker network rm: 지정한 네트워크를 삭제
네트워크 (Network) 란 ?
컨테이너끼리 서로 통신할 수 있게 연결해주는 통신망이라고 생각하면 된다.
각 컨테이너는 기본적으로 독립된 네트워크 공간에서 실행되므로, 다른 컨테이너와 바로 통신할 수 없다. 이때, 네트워크를 연결하면 컨테이너끼리 서로 IP 주소를 통해 통신할 수 있다.
즉, 컨테이너끼리 메세지를 주고받게 해주는 가상의 LAN과 같다.
단독으로 사용하는 명령어
- docker login: 도커 레지스트리에 로그인
- docker logout: 도커 레지스트리에서 로그아웃
- docker search: 도커 레지스트리를 검색
- docker version: 도커 엔진 및 명령행 도구의 버전을 출력
도커 명령어 옵션
- -d : 백그라운드 실행 (detach)
- 컨테이너 뒤에서 몰래 실행 시킨다.
- ex) 웹서버를 켜놓고 터미널은 다른 작업을 계속 하고 싶을 때 docker run -d ngnix 입력 -> 터미널에는 보이지 않지만 컨테이너는 계속 실행중이다.
- -p: 포트 포워딩 (publish)
- 컨테이너 안의 포트를 내 컴퓨터 (호스트) 포트에 연결한다.
- 해당 과정을 통해 웹 브라우저에서 접속이 가능해진다.
- ex) docker run -d -p 8080:80 nginx -> 내 컴퓨터에서 http://localhost:8080 에 접속하면 컨테이너 안의 80번 포트에 연결된다.
- --name: 컨테이너 이름 지정
- -v: 볼륨 마운트
- 컨테이너 안의 특정 폴더와 내 컴퓨터 폴더를 연결한다.
- 컨테이너가 지워져도 데이터가 사라지지 않는다.
- -it: 터미널 입력 연결 (인터랙티브 모드)
- 컨테이너 내부로 직접 들어가서 명령을 실행할 수 있다.
도커 이미지 실습해보기
1. 도커 이미지 다운로드

2. 도커 이미지 목록 확인

- REPOSITORY : 이미지 이름
- TAG : 이미지 태그 (이미지 버전을 구분하기 위해 붙이는 이름)
- 이미지를 다운로드 할 때 버전을 명시하지 않으면 자동으로 latest 가 붙는다.
- IMAGE ID : 로컬에 다운로드 된 이미지의 ID
- CREATED : 이미지가 생성된 시간
- SIZE : 이미지 크기
3. 도커 컨테이너 실행

- docker container ls : 현재 실행중인 컨테이너를 보여주기 때문에 아무것도 보이지 않는다.
- docker container ls -a : 현재 실행중인 컨테이너를 포함한 모든 컨테이너 목록을 보여준다.
❓내가 든 의문
docker container run 은 실행해주는 명령어 아닌가 ?
근데 왜 docker container run 를 했을 때 뜨지 않는 것일까 ?
그래서 찾아보았다.
이는 컨테이너가 생성 후 바로 종료됐기 때문이다 !
동작 방식에 대해서 알게 되면, 이해할 수 있을 것이다.
- docker container run A 을 하게 되면, 컨테이너 A가 생성되고 실행된다.
- 이때, 실행할 명령어를 지정하지 않으면 ubuntu는 기본적으로 bash 라는 쉘 (터미널)을 실행하도록 되어있다.
- 연결되어있는 쉘 / 터미널(bash) 을 실행한다.
- 현재 터미널을 연결하지 않았기 때문에 실행 후 바로 종료되는 것이다.
- 터미널을 연결한다 = 컨테이너 안에서 직접 명령어를 입력할 수 있도록 하는 것
해결 방법
docker run -it ubuntu bash
인터랙티브 모드로 실행한다.
- -i : 표준 입력(stdin)을 유지 ( 키보드로 입력 받기 )
- -t : 터미널 연결한다.
- bash : 실행할 명령어
이렇게 하면, 컨테이너 안에서 바로 터미널을 사용할 수 있고, 종료 전까지 docker container ls 에 표시된다.

해당 명령어를 실행하면 이와 같이 컨테이너 내부에 접속하면서 실행중 상태가 된다.
이 상태로 exit 명령어를 작성하면 컨테이너가 종료되면서 컨테이너 밖으로 나가진다.
4. 도커 컨테이너 삭제

5. 도커 이미지 삭제

삭제 명령어를 입력했을 때 나오는 Untagged 로그들이 궁금해서 찾아봤다.
- Untagged : ubuntu:latest 라는 태그가 제거된다. 도커 이미지는 [이름]:[태그] 로 관리되는데, 이 연결고리를 끊어내는 것이다.
- Untagged : ubuntu@sha256 이미지에 붙어있던 다이제스트(digest)가 제거된다. 이는 내용 기반의 고유값으로, 절대 바뀌지 않는 유일한 값이다. 도커 이미지가 변경되면, 값도 달라지게 된다.
6. 도커 이미지 변경

7. 도커 이미지를 저장, 압축 및 복구

'DevOps' 카테고리의 다른 글
| [AWS] ECS 이용하여 ECR에 수동으로 배포해보기 (+ ECS, ECR 개념 정리) (0) | 2025.11.05 |
|---|---|
| [AWS] IAM 권한 : 그룹 권한과 인라인 권한 차이 정리 (0) | 2025.10.26 |
| [AWS] AWS의 정의와 주요 서비스 (0) | 2025.10.18 |
| [Docker] 01. 도커(Docker)란 ? (0) | 2025.09.21 |
| [Linux] 서버 환경 구축하기 (0) | 2025.09.18 |