1. Docker의 핵심 개념
1️⃣ 이미지(Image)와 컨테이너(Container)
1) 이미지 (Image)
- 개념
- 실행 가능한 환경을 미리 만들어 둔 설계도
- OS + 라이브러리 + 애플리케이션이 한 번에 패키징된 상태
- 흔히 말하는 “구워진 상태” (immutable, 변경 불가)
- 예: Ubuntu + nginx + 설정 → 하나의 이미지
핵심포인트
- 이미지는 실행 전 상태
- 실행하면 → 컨테이너가 됨
- 이미지 다운로드 (Pull)
- 이미지는 보통 Docker Hub 같은 저장소에서 가져옴
pull= 인터넷에서 이미지 다운로드
Docker Hub → 내 컴퓨터로 이미지 가져오기2) 컨테이너 (Container)
- 개념
- 이미지를 실행한 상태
- 실제로 돌아가는 프로세스
- OS처럼 보이지만 사실은 격리된 프로세스 집합
3) 이미지와 컨테이너의 핵심 차이
- 이미지 = 정적인 파일
- 컨테이너 = 실행 중인 상태
2️⃣ 실행 방식
1) 포그라운드(Foreground) 실행
- 기본 실행 상태
- 프로그램이 실행되는 모든 과정, 로그가 터미널에 실시간으로 계속 찍힘
- 터미널 점유 → 다른 명령어 입력 불가능
- 특징
- 로그를 바로 확인 가능
- 실습이나 테스트용
2) 백그라운드 실행
- 컨테이너를 보이지 않는 뒤에서 조용히 일하도록 떼어놓는(Detach) 옵션
- 터미널을 계속 사용할 수 있음
- 서버 운영 시 일반적으로 사용
- 핵심 옵션 개념
d: 백그라운드 실행
3️⃣ 네트워크 & 포트 개념
🌐 Docker 네트워크 구조
- Docker 내부에는 별도의 네트워크 공간 존재
- 컨테이너는 그 안에서만 통신
🔌 포트 개념
- 컨테이너 내부 서비스 (예: nginx)는 80번 포트 사용
- 하지만 외부(내 컴퓨터)에서는 바로 접근 불가
- 내부 네트워크와 외부 네트워크가 분리되어 있음
🔁 포트포워딩
- 개념
- 외부 포트 → 내부 포트로 연결
- 예시
내 컴퓨터 7000 → 컨테이너 내부 804️⃣ 컨테이너 생명주기
🔍 상태 확인
- 실행 중인 컨테이너 확인 = 프로세스 확인 개념 (
ps)
⛔ 종료
- 컨테이너는 언제든지 종료 가능
- 종료되면 실행만 멈추고 데이터는 유지될 수도 있음 (설정에 따라 다름)
5️⃣ Ubuntu 컨테이너와 리눅스 환경
🐧 컨테이너 내부는 리눅스
- 컨테이너에 들어가면 → 리눅스 OS 환경
- 따라서 명령어도 리눅스 기반
🔧 apt 개념
① apt update
- 실제 설치가 아니라 패키지 목록 동기화
- 메뉴판 업데이트
② apt repository
- 패키지들이 저장된 서버 (클라우드)
- 원하는 패키지가 없으면 repo 변경 가능
③ apt-cache search
- “메뉴판에서 검색”
④ 자동 설치 옵션
y→ 모든 질문 자동 Yes
6️⃣ 컨테이너 접근 방식
🔗 attach vs exec
① attach
- 기존 실행 중인 프로세스에 붙음
- 하나의 터미널 공유 느낌
② exec
- 새로운 프로세스를 생성해서 실행
- 더 안전하고 일반적으로 많이 사용
핵심 차이
- attach = 기존에 붙기
- exec = 새로 실행
7️⃣ 데이터 휘발성 (중요 ⚠️)
❗ 컨테이너의 특징
- 컨테이너 내부에서 설치/수정한 내용 ➡️ 컨테이너 종료 후 사라질 수 있음
🔥 해결 방법
- 원하는 상태가 되면 → 이미지로 다시 저장 (commit / build)
컨테이너 → 커스터마이징 → 다시 이미지로 저장
8️⃣ 핵심 흐름 정리
1. 이미지 다운로드 (pull)
2. 이미지 실행 → 컨테이너 생성
3. 컨테이너 내부에서 작업
4. 필요하면 이미지로 다시 저장9️⃣ 핵심
Docker는 “실행 환경(OS + 프로그램)을 통째로 포장해서 어디서든 동일하게 실행하게 해주는 기술”

Share article