목차
- 가상머신 VS 컨테이너
- Docker 개념 및 장점
- Docker 구성요소
- Doker 기본 명령어
가상머신 VS 컨테이너
* 내 컴퓨터에서는 잘 되는데 타인 컴퓨터에서는 안될 때
- 개발서버, 테스트 서버, 운영 서버의 환경 불일치 등의 많은 이유
* 베어메탈
- 물리서버를 그대로 사용하는 형태
- 매우 높은 성능 필요시 사용 ★
- 운영체제가 하드웨어 위에서 직접 실행
- 1 물리서버 : 1 OS 만 사용하여 리소스 분할 어렵고 서버활용률 ↓
* 가상머신
- 물리서버 위에 소프트웨어가 올라가고 그 위에서 여러개의 가상컴퓨터가 돌아가는 형태
- VM은 자기만의 OS를 따로 가짐
- OS 여러개 돌릴 수 있어서 격리 수준 높음
- 각 VM이 자체 OS를 포함하므로 무겁고 부팅느림
- CPU/MEM 오버헤드 존재 -> 컨테이너 시대 등장
* 컨테이너
- 호스트 OS의 커널을 공유하면서 독립된 실행환경만 격리하는 상태
- OS 전체를 복제하지 않으므로 가볍고 빠름 ★
- 리소스 효율적으로 사용 ★
- 커널공유 때문에 VM보다 격리수준 낮고 보안측면도 VM보다 약함
* 컨테이너는 독립된 서버처럼 보이지만, 실제로는 리눅스 커널이 이미 갖고있는 기능 조합해서
독립된 것처럼 보이도록 만든 기술.
- 핵심기술
1) chroot(가짜루트 만들기) - 이 디렉토리를 루트(/)라고 믿어라
2) namespace(세계관 분리하기) - 네임스페이스는 리눅스의 가장 강력한 격리 기술. 각 프로세스에 분리된 우주를 제공
- 컨테이너 안에서 hostname 바꿔도 호스트에는 영향 없음
3) cgroup(리눅스 자원 관리하기) - 네임스페이스가 "보이지않게" 만드는 기능이라면, cgroup은 "사용량을 제한"하는 기능
- 해당 기능으로 하나의 컨테이너가 폭주해도 호스트전체가 다운되지 않음
- 제한 가능한 자원은 CPU, 메모리, 디스크I/O, 네트워크 대역폭, 프로세스 개수가 있
* chroot + namespace + cgroup = 컨테이너 엔진 -> 하나의 작은 가상서버처럼 보이게 된다
* VM vs 컨테이너
| 구분 | VM | Container |
| 격리 수준 | 하드웨어 레벨 가상화 | OS 레벨 가상화 |
| OS 포함여부 | Guest OS 포함(무거움) | Host OS 커널 공유(가벼움) |
| 구동 속도 | 느림(부팅 필요) | 빠름(프로세스 실행) |
| 용량 | 큼(GB) | 작음(MB) |
Docker 컨테이너 개념 및 장점
* Docker란
- 애플리케이션, 실행 환경을 컨테이너라는 독립공간에 패키징하여 인프라에 구애받지 않고 SW를 신속하게 개발,배포,실행할 수 있게 해주는 오픈소스 플랫폼
* 컨테이너는 다른 컨테이너와 완전히 독립되어있다
* 어떤 리눅스 시스템에서도 실행 가능
* VM과 달리 호스트OS 커널을 공유하여 경량화되므로 오버헤드 적다
* 장점
1) 유연성 - 복잡한 앱도 컨테이너로 구성가능
2) 경량성 - OS커널을 공유하여 오버헤드 최소화
3) 교체 가능성 - 컨테이너 실행중에도 업데이트 가능
4) 이식성 - 로컬에서 빌드하고 클라우드에 배포하여 어디서나 실행가능
5) 확장성 - 컨테이너 복제를 통해 확장 가능
Docker구성요소 및 주요 컴포넌트
* 도커는 클라이언트-서버 모델
* 3가지 구성 요소
1) 클라이언트(CLI-도커 명령어 사용)
2) 도커Host(컨테이너를 런타임환경에서 돌리게하는 영역)
3) 레지스트리(컨테이너 저장소)
Docker 기본 명령어
1. Docker build
- Dockerfile을 기반으로 도커이미지를 생성하는 명령어
★ 도커이미지 - 저장본을 실행할 수 있게 만들어주는 템플릿 같은 존재)
2. Docker run
- 이미지를 기반으로 새 컨테이너를 만들고 실행하는 명령어
docker run [옵션] 이미지이름 [실행할 명령어]
ex) docker run ubuntu:20.04
// ubuntu:20.04 이미지를 이용해 새 컨테이너를 실행
★ 이미지가 컨테이너에 포함되어 런타임환경에 올라감.
ex) Docker run 예제
ex1) Ubuntu 컨테이너에서 쉘 접속
docker run -it --name my-ubuntu ubuntu:20.04 bash
(네임) (이미지) (컨테이너 안에서 실행할 명령-리눅스쉘)
★ 나의 컴퓨터안에 격리된 가상환경의 우분투 컨테이너가 실행된다
★ -it : 옵션 i,t를 붙여쓴 것
1) -i = interactive
- 키보드 입력을 컨테이너로 보내줌
2) -t = tty
- 가상 터미널을 만들어서 실제 터미널처럼 보이게 함
ex2) nginx 웹 서버를 백그라운드로 실행
docker run -d --name web-server -p 8080:80 nginx
★ -d : 컨테이너를 종료하더라도 백그라운드로 계속 실행
★ -p 8080:80
- 호스트 포트 8080 -> 컨테이너 포트 80으로 연결(nginx가 엮어줌)
- 브라우저에서 http://localhost:8080 접속 가능
★ 외부접근이 8080으로 들어오는 경로가 나의 컴퓨터 MAC의 8080을 열어준다
ex3) 테스트용 컨테이너 자동 삭제
docker run --rm ubuntu:20.04 echo "Hello Docker"
★ --rm : 컨테이너가 명령 실행 마치고 종료되면 자동삭제
★ echo "Hello Docker" : 컨테이너 안에서 한 번 실행 후 종료되는 명령
★ 로그 확인 후 컨테이너 목록을 봐도 남지않음
3) docker rm
- 더이상 필요없는 컨테이너를 삭제하는 명령어
- 디스크와 목록을 깨끗하게 유지하기 위해 필수
docker rm [옵션] 컨테이너이름(or ID) ...
※ 실행 중인 컨테이너는 바로 삭제할 수 없음
-> 먼저 docker stop으로 멈추고, 그 다음 docker rm 실행
4) docker exec
- 이미 실행 중인 컨테이너 내부에 접속하거나 특정 명령어를 추가로 실행할 때 사용하는 명령어
★ run은 새로운 컨테이너 만들어 실행 <-> exec는 이미 돌아가고 있는 컨테이너 들어가서 작업
docker exec [옵션] CONTAINER COMMAND [ARGS ...]
ex) docker exec -it my-nginx /bin/bash
// 실행 중인 my-nginx 컨테이너에 인터랙티브 모드(-it)로 접속하여 bash 셸 실행
'전공지식 > 카카오테크캠퍼스_4기' 카테고리의 다른 글
| [카테캠] 카카오테크캠퍼스 4기 커넥트데이 솔.직.후기 (0) | 2026.07.11 |
|---|---|
| [카테캠] 2주차_자연어를 구조화된 요청으로 만든다 (0) | 2026.07.08 |
| [카테캠] git 명령어 공부 (0) | 2026.07.08 |
| [카테캠] Kakao 취업 특강 (0) | 2026.07.03 |
| [카테캠] AWS 인프라 개요 (0) | 2026.06.28 |