본문 바로가기

기타

[Docker] 도커 컨테이너, Dockerfile, Volume, 도커 네트워크

 

[ Docker ]

컨테이너를 기반으로 한 가상화 플랫폼. 


- Docker Image : 애플리케이션을 실행하기 위한 모든 설치파일/설정값들을 가진 파일.
- Docker Container : 이미지를 실행한 상태. 이미지의 실행 인스턴스.

  • 이미지는 실행 환경을 담고 있고, 컨테이너는 그 이미지를 기반으로 독립적으로 실행되는 것.
  • 도커 이미지를 도커엔진 위에서 실행시켜 컨테이너화 하면 독립된 공간 속에서 애플리케이션 실행.
  • 하나의 이미지로 여러개의 컨테이너 생성 가능.

 

https://rimo.tistory.com/24

 

Docker의 구성 요소 : 이미지, 컨테이너, 레이어

도커의 필요성 도커를 처음 공부했을 때는 “어렵기만 하다”생각했습니다. 내가 왜 이 어려운 내용을 배우고 있는 건지, 그 어떤 목적성과 필요성이 없었기 때문이죠. 이처럼, 무작정 도커를

rimo.tistory.com

 



* Docker의 레이어(layer) 방식


- 이미지 레이어 (Read-Only) :
Dockerfile을 통해 생성된 불변 실행환경.
=> 도커는 레이어(layer) 기반으로 이미지를 생성하기 때문에
 빌드 할때마다 모든 실행을 반복하는게 아니라, 이전 빌드에서 변경되지 않은 레이어는 캐시를 사용하여 재활용. 

- 컨테이너 레이어 (Read-Write) : 컨테이너가 실행되면서 변경되는 데이터.
 => 컨테이너가 종료되면 삭제되고, 실행하면 생성.
이를 유지하기 위해 볼륨 마운트(Volume Mount) 활용.

 


 

- Dockerfile : 애플리케이션 실행 환경 관리. 불변(immutable)환경을 정의.
- 볼륨마운트(Volume Mount) : 컨테이너 내부 데이터 관리. 컨테이너 내부에서 변경되는 데이터를 유지.

 


 

[ Dockerfile ]

원하는 도커 이미지를 생성하기 위한 템플릿. ( 운영체제(os) + 애플리케이션 환경 + 실행 파일 )

도커는 Dockerfile의 명령어(RUN, COPY 등)마다 레이어를 생성.
캐시가 존재하는 경우 해당 레이어를 재사용하지만
캐시가 깨지는 경우에는 이후의 모든 레이어를 다시 실행.
=> 따라서 변경 가능성이 높은 파일을 하단에 배치하면 캐시를 최대한 활용할 수 있어 빌드 속도 최적화.

 

* Dockerfile 컨테이너 실행 명령어 관련.

컨테이너 실행 시 별도 명령어를 명시한다면
=> CMD : 새로 명시한 명령어로 대체하여 실행.
=> ENTRYPOINT : 기본 명령어와 새 명령어를 한줄로 함께 실행하며 에러.  


(CMD, ENTRYPOINT)
https://bluese05.tistory.com/77

 

Dockerfile Entrypoint 와 CMD의 올바른 사용 방법

ENTRYPOINT 와 CMD 는 무엇인가 ENTRYPOINT 와 CMD는 해당 컨테이너가 수행하게 될 실행 명령을 정의하는 선언문이다. 즉, 컨테이너가 무슨 일을 하는지 결정하는 최종 단계를 정의하는 명령이라고 생각

bluese05.tistory.com

 

 

(RUN, CMD, ENTRYPOINT)
https://watch-n-learn.tistory.com/38

 

[Docker Basic] 17. Dockerfile 상세 명령

FROM 상세설명 docker 컨테이너를 어떤 docker 이미지로부터 생성할지 기술. 이것을 베이스 이미지라고 한다. 이 명령은 필수 명령 항목이다. 태그를 생략하면 베이스 이미지의 최신 버전이 적용된다

watch-n-learn.tistory.com

 


 

[ 볼륨마운트(Volume Mount) ] 

컨테이너 내부 데이터를 영구적으로 저장하고 유지하기 위한 방법.
데이터베이스, 로그 파일, 설정 파일 등 유지해야 하는 데이터 관리에 필요.

 

- 바인드 마운트 (Bind Mount)
호스트 디렉토리를 컨테이너 내부에 직접 연결. 
=> 개발 환경에서 코드 실시간 반영.

- 도커 볼륨 (Named Volume)
Docker가 직접 관리하는 볼륨을 컨테이너에 연결.
=> 데이터베이스 저장소, 영구 데이터 관리.

 


 

[ Docker Network ]

기본적으로 생성되는 네트워크 인터페이스: docker0
여기에 컨테이너의 가상 네트워크 인터페이스(veth pair)가 연결

- docker0은 172.17.0.1을 기본 게이트웨이로 가지는 네트워크를 생성.
- 컨테이너들은 172.17.x.x 대역을 사용하여 통신.

┌────────────────────────────┐
│    호스트 머신 (서버)       │
│                            │
│  ┌───────────────┐         │
│  │  docker0 (172.17.0.1)  │  <---- 기본 브리지 네트워크
│  └───────────────┘         │
│      │        │            │
│ ┌────▼────┐  ┌────▼────┐   │
│ │ veth1234│  │ veth5678│   │  <---- 가상 이더넷 인터페이스 (veth pair)
│ └────┬────┘  └────┬────┘   │
│      │           │         │
│ ┌────▼────┐  ┌────▼────┐   │
│ │ 컨테이너1│  │ 컨테이너2│  │
│ │ 172.17.0.2 │ │ 172.17.0.3 │ │
│ └──────────┘  └──────────┘ │
└────────────────────────────┘

 


* 컨테이너 네트워크 bridge / host 연결 차이

- bridge 네트워크 (172.17.0.x)
컨테이너가 Docker가 생성한 가상의 네트워크(Bridge) 안에서 동작 → 컨테이너 내부 네트워크로 통신하며, 외부와의 연결은 포트 매핑을 통해 수행.

- host 네트워크
컨테이너가 호스트(서버)의 네트워크를 그대로 사용 → 별도의 가상 네트워크 없이 호스트의 IP와 포트를 직접 사용.
=> 성능과 연결성을 극대화 (포트 충돌 가능성有)

 

도커 네트워크 관련
https://bluese05.tistory.com/15

 

Docker Network 구조(1) - docker0와 container network 구조

Docker Network 구조(1) - docker0와 container network 구조 [Contents] 1. Docker Network 구조(1) - docker0와 container network 구조 2. Docker Network 구조(2) - Container network 방식 4가지 3. Docker Network 구조(3) - Container 외부 통신

bluese05.tistory.com