[ Docker ]
컨테이너를 기반으로 한 가상화 플랫폼.
- Docker Image : 애플리케이션을 실행하기 위한 모든 설치파일/설정값들을 가진 파일.
- Docker Container : 이미지를 실행한 상태. 이미지의 실행 인스턴스.
- 이미지는 실행 환경을 담고 있고, 컨테이너는 그 이미지를 기반으로 독립적으로 실행되는 것.
- 도커 이미지를 도커엔진 위에서 실행시켜 컨테이너화 하면 독립된 공간 속에서 애플리케이션 실행.
- 하나의 이미지로 여러개의 컨테이너 생성 가능.
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
'기타' 카테고리의 다른 글
[LINUX/JAVA] 자바 버전 관리 도구 (alternatives) (0) | 2025.02.11 |
---|---|
[LINUX] 포그라운드/백그라운드 프로세스(nohup, &) (0) | 2025.02.11 |
[API / Python] Geolocation API_현재 위치좌표 추출 (0) | 2025.02.09 |
[Linux] 표준 출력(stdout) & 표준 에러(stderr) 읽어오기 (0) | 2025.01.27 |