1. 도커 컨테이너 레이어 구조


- 이미지 레이어 (Read-Only): 도커 허브에서 내려받은 이미지는 수정이 불가능한 읽기 전용 상태.
- 컨테이너 레이어 (Read/Write): 이미지를 기반으로 컨테이너를 실행하면 그 위에 쓰기 가능한 레이어가 한 층 더 쌓인다.
- 데이터의 저장: 우리가 컨테이너 안에서 파일을 만들거나 설정을 바꿔도 실제 이미지는 변하지 않는다. 모든 변경 사항은 가장 위의 컨테이너 레이어에만 저장되기 때문이다.
[이미지와 컨테이너 비교]
- 이미지는 클래스(Class), 컨테이너는 인스턴스(Instance)에 비유해서 생각해보면 된다.
- 이미지는 애플리케이션을 실행하기 위한 모든 환경이 응축된 그 실행 당시의 스냅샷이다.
- 컨테이너는 그 이미지를 실행(run)할 때 메모리에 독립적인 공간이 할당되어 동작하는 것이다.
| 이미지 | 컨테이너 | |
| 상태 | 정적임 (실행되지 않는 파일 묶음) | 동적임 (실행 중인 프로세스 상태) |
| 속성 | 읽기 전용 (Read Only) | 읽기, 쓰기 가능 (Read/Write) |
| 구성 | 앱 실행에 필요한 코드, 라이브러리, OS 유저랜드(실행환경) | 이미지 + 변경사항을 저장할 추가 레이어 |
[레이어 공유 방식의 장점 : 효율성]
- 용량 절약: 같은 OS 이미지를 사용하는 컨테이너가 10개 있어도, 읽기 전용 레이어는 단 하나만 저장하고 공유한다.
- 속도 및 성능: 동일한 이미지 레이어를 재사용하므로 컨테이너를 생성하고 실행하는 속도가 매우 빠르다.
2. 도커 명령어
docker [대상] [커맨드] [옵션] [인자]
// 예시
docker container run -d ubuntu
- 대표적인 커맨드 대상: `container`, `image`, `volume`, `network`
[도움말 확인법]
- `docker` 입력
- `docker [커맨드 대상] --help` 입력
- 위와 같은 방법으로 커맨드 수준을 높이고 뒤에 `--help` 입력
1. `docker container` 이후 작성하는 주요 커맨드
| 커맨드 | 설명 | 주요 옵션 |
| `run` | 이미지를 내려받고 컨테이너를 생성 및 실행 | `--name`, `-e`, `-p`, `-v`, `-d`, `-i`, `-t` |
| `start` | 컨테이너 실행 | `-i` |
| `stop` | 컨테이너 정지 | |
| `create` | 컨테이너 생성 | `--name`, `-e`, `-p`, `-v` |
| `ls` | 컨테이너 목록 출력 | `-a` (a 옵션이 없으면 실행중인 컨테이너만 출력) |
| `rm` | 컨테이너 삭제 | `-f`, `-v` |
| `cp` | 컨테이너와 호스트 간 파일 복사 | |
| `exec` | 컨테이너를 프로그램에서 실행 | `-i`, `-t` |
| `commit` | 컨테이너를 이미지로 변환 |
2. `docker image` 이후 작성하는 주요 커맨드
| 커맨드 | 설명 | 주요 옵션 |
| `pull` | 이미지를 내려 받음 | |
| `rm` | 이미지 삭제 | |
| `ls` | 가지고 있는 이미지 목록을 출력 | |
| `build` | 이미지 생성 | `-t` |
3. 주요 옵션
| 옵션 | 설명 |
| `--name` | 컨테이너 이름 |
| `-p` | 포트번호 지정 (port) |
| `-v` | 볼륨 지정 (volume) |
| `-e` | 환경변수 지정 (environment variable) |
| `-d` | 백그라운드 실행 (detach) |
| `-i` | 컨테이너에 터미널 연결 (interactive) |
| `-t` | 특수 키를 사용가능하게 설정 (TTY, 터미널 환경 할당 → 화면 출력, 특수 키 입력을 도움) |
| `-it` | 일반적으로 `-i`, `-t`를 묶어서 `-it`로 사용한다. → 상호작용 가능한 터미널 환경을 만들기 위해 |
'프로젝트 > Docker' 카테고리의 다른 글
| [Docker] Dockerfile 작성하기 (0) | 2026.02.05 |
|---|---|
| [Docker] 도커 컨테이너 통신 (포트포워딩) (0) | 2026.02.03 |
| [Docker] 도커는 무엇인가? (0) | 2026.01.30 |