이 도커파일의 핵심을 한 문장으로 먼저 잡자면 이거다.
이 이미지는 “서버”가 아니라 “도구(tool)” 컨테이너다.
외부에서 접속해 붙는 대상이 아니라, 외부에서 명령과 데이터를 “넣어주고 실행 결과를 가져오는” 구조다.
이걸 전제로 두고, 원리 → 접근 방식 → 데이터 흐름 → 명령 전달 방식 순서로 살펴보자
1️⃣ 이 컨테이너는 왜 포트가 없나? (서버 아님)
이 Dockerfile을 보면 이런 게 없다.
- EXPOSE 8080
- 웹 서버
- 데몬 프로세스
- 백그라운드 서비스
대신 마지막이 이거다.
ENTRYPOINT ["ora2pg"]
이 뜻은 명확하다.
- 컨테이너가 뜨면
- ora2pg 명령을 실행하고
- 명령이 끝나면 컨테이너도 끝난다
즉,
- ❌ 외부에서 HTTP로 접속하는 구조 아님
- ❌ telnet, curl, API 호출 대상 아님
- ✅ 로컬에서 docker run으로 실행하는 CLI 도구
2️⃣ “외부에서 접속”이 아니라 “외부에서 실행”한다
이 이미지에 접근하는 유일한 방법은 이거다.
docker run [옵션] ora2pg-image [ora2pg 옵션]
예를 들면:
docker run --rm ora2pg-image --version
이건 내부적으로 이렇게 동작한다.
docker run
→ 컨테이너 생성
→ ENTRYPOINT 실행 (ora2pg)
→ --version 전달
→ 결과 stdout 출력
→ 컨테이너 종료
접속이라는 개념 자체가 없다.
3️⃣ 그럼 데이터는 어떻게 주고받나? (핵심)
데이터 교환 방식은 3가지뿐이다.
① 볼륨 마운트 (가장 중요)
docker run --rm \
-v /host/data:/data \
ora2pg-image \
-c /data/ora2pg.conf
이 구조를 그림으로 풀면:
호스트 /host/data
├─ ora2pg.conf
├─ schema.sql
└─ data.sql
↑
│ (mount)
↓
컨테이너 /data
- 컨테이너는 /data 디렉터리만 본다
- 실제 파일은 호스트 파일
- 결과 SQL도 호스트에 바로 생성
👉 이게 실무에서 99% 쓰는 방식이다.
② 표준 입출력 (stdout / stderr)
ora2pg는 기본적으로 결과를 stdout으로 뿌릴 수 있다.
docker run --rm ora2pg-image -t TABLE > result.sql
- 컨테이너는 파일을 몰라도 됨
- 결과는 호스트의 result.sql로 리다이렉트
CI/CD에서 자주 쓰는 방식이다.
③ 네트워크 (DB 연결용)
이 컨테이너는 서버를 열지는 않지만
외부 DB에는 접속한다.
컨테이너 → Oracle DB (1521)
컨테이너 → PostgreSQL DB (5432)
그래서 중요한 건 포트 오픈이 아니라 이거다.
--network host
또는
--network my-db-network
Oracle / Postgres가 있는 네트워크에 같은 Docker network로 붙여주는 것이 핵심이다.
4️⃣ 명령은 어떻게 전달되나? (ENTRYPOINT 원리)
Dockerfile:
ENTRYPOINT ["ora2pg"]
이 상태에서:
docker run ora2pg-image -c /data/ora2pg.conf -t TABLE
Docker는 내부적으로 이렇게 만든다.
ora2pg -c /data/ora2pg.conf -t TABLE
즉,
- docker run 뒤에 붙는 모든 인자
- → ora2pg 명령의 인자
그래서 컨테이너 안으로 “접속”해서 명령을 치는 게 아니라
처음 실행할 때 이미 명령이 완성된다.
5️⃣ 컨테이너 내부를 직접 보고 싶을 때 (디버깅)
원래 용도는 아니지만, 디버깅은 가능하다.
docker run -it --entrypoint bash ora2pg-image
이렇게 하면:
- ENTRYPOINT 무시
- bash 실행
- 내부 환경 확인 가능
실무에서는:
- Oracle client 라이브러리 확인
- DBD::Oracle 로딩 테스트
이럴 때만 사용한다.
6️⃣ 전체 흐름을 한 번에 정리하면
실행 주체
- ❌ 외부 사용자
- ❌ 브라우저
- ❌ 다른 서버
- ✅ 운영자 / 배치 / CI / 쉘 스크립트
흐름
호스트
├─ ora2pg.conf
├─ docker run
│
▼
컨테이너 생성
├─ Oracle DB 접속
├─ PostgreSQL DB 접속
├─ 데이터 변환
├─ SQL 생성
▼
결과를
├─ 볼륨(/data)
└─ stdout
로 반환
▼
컨테이너 종료
7️⃣ 그래서 이 이미지의 “정체성”
이걸 서버처럼 생각하면 헷갈린다. 정확한 정의는 이거다.
이 도커 이미지는
“Oracle → PostgreSQL 마이그레이션을 자동화하기 위한
일회성 실행 도구(Executable Artifact)”다.
그래서:
- 접근 ❌
- 접속 ❌
- 호출 API ❌
- 실행 ✅
- 결과 파일 ✅
'실험실 > db이행' 카테고리의 다른 글
| Ora2Pg의 본질적인 실행 모델 (0) | 2026.01.22 |
|---|---|
| ora2pg 작동원리 (0) | 2026.01.22 |
| 도커파일 (0) | 2026.01.22 |
| postgreSQL 컨테이너로 올릴지 (0) | 2026.01.20 |
| 서버구축실패 요약 (0) | 2026.01.20 |
댓글