-
[2026-data-engineering-zoomcamp] Docker - 1주차엔지니어가 되자/Data Engineering 2026. 2. 5. 13:48
해외 부트캠프 중 무료로 진행하는 Data Engineering 엔트리 레벨의 부트캠프 코스를 찾아서 올해 초 부터 진행중이다.
https://github.com/DataTalksClub/data-engineering-zoomcamp
GitHub - DataTalksClub/data-engineering-zoomcamp: Data Engineering Zoomcamp is a free 9-week course on building production-ready
Data Engineering Zoomcamp is a free 9-week course on building production-ready data pipelines. The next cohort starts in January 2026. Join the course here 👇🏼 - DataTalksClub/data-engineering-zoomcamp
github.com
국내에는 데이터 엔지니어링 코스도 거의 없거니와
무료로 제공하는 코스임에도 커리큘럼이 좋아서 바로 신청했다.
최근에는 영어에도 관심을 두고 연습하고 있기 때문에
코스워크가 영어인 것도 오히려 좋아.

이번 글은 1주차 Docker 내용 정리다.
코스 목표
- docker에 대한 이해
- docker
- image
- build
- pull
- postgre
- network
- volume
- image
- docker-compose
- docker
- 미니 data pipeline 구성하기
- 사용하는 데이터: New york taxi data
- 환경 및 레포지토리 세팅
자료 모음
- 1주차 코스: https://github.com/DataTalksClub/data-engineering-zoomcamp/tree/main/01-docker-terraform
- 실습 코드: https://github.com/alexeygrigorev/workshops/tree/main/dezoomcamp-docker
- H/W: https://github.com/DataTalksClub/data-engineering-zoomcamp/blob/main/cohorts/2026/01-docker-terraform/homework.md
- data: https://www.nyc.gov/site/tlc/about/tlc-trip-record-data.page
작업환경
- 가상작업공간: https://opulent-orbit-wvpgjj6jqpf57rq.github.dev/
- github에서 제공하는 웹 기반 작업환경
- VS Code 기반 로컬 환경
- 강의에서는 로컬 환경을 추천
환경세팅
cli 환경에서 명령줄에 표시되는 기본 디렉토리 숨기기

echo 'PS1="> "' > ~/.bashrc source ~/.bashrc강의 내용 정리
https://www.youtube.com/watch?v=lP8xXebHmuE&list=PL3MmuxUbc_hJed7dXYoJw8DoCuVHhGEQb&index=11
- docker 기반 postgre DB 초기화
- 주피터 노트북 구성 & pipeline 스크립트 구현
- postgre admin 컨테이너 실행
- 도커간 브릿지 네트워크 설정
- docker-compose를 통해 실행
미니 데이터 파이프라인 구성도

- WEB에서 csv file을 수집하고 내부 파일시스템(parquet)/postgreSQL DB/DW로 Ingestion 하는 흐름
- PostgreSQL은 Docker 기반으로 운영
- Data Pipeline은 Python 기반 스크립트를 Dockerizing하여 도커 이미지를 빌드하여 운영
- 패키지 관리는 uv를 활용
Docker 컨테이너 & 호스트 시스템간 관계 구성도

- 포트매핑
- 도커 컨테이너 내부의 포트 레이어와 호스트시스템의 포트 레이어는 별개임
- 따라서 외부 호스트 시스템에서 도커 내부 컨테이너에 접근하고 싶다면 이를 컨테이너 생성시에 포트 매핑을 지정해주어야함
- 옵션은 -p
- 볼륨 마운트
- /test 디렉토리같은 경우 호스트 시스템의 디렉토리이지만 -v 옵션을 통해 컨테이너 내부에서도 지정 경로에 사용할 수 있도록 설정 가능
- 이를 통해 컨테이너가 올라갔다가 내려갔다가 할 때에도 데이터가 보존 가능함
- 옵션은 -v
- uv의 패키지 관리 방식
- pyproject.toml + uv.lock + .python-version = 재현 가능한 환경 정의
- 위 3개 파일만 있으면 어디서든 동일한 환경 구축 하여 재현가능
- 따라서 도커 내에 해당 파일들만 주입해주면 내부에서 uv sync —locked를 통해 동일 환경 세팅이 가능해진다.
Dockerfile
FROM python:3.13-slim COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/ WORKDIR /code COPY pyproject.toml .python-version uv.lock ./ RUN uv sync --locked COPY pipeline.py . ENTRYPOINT ["uv", "run", "python", "pipeline.py"]WORKDIR
- WORKDIR /code는 컨테이너 내부에서 작업할 경로를 설정하는 것
- docker build 시에 명령어가 실행되는 시점에 위치한 디렉토리에 존재하는 Dockerfile 파일 내에서 사용되는 명령어임
- WORKDIR /code의 동작: 컨테이너 내부에 /code 디렉토리를 생성 (없으면) 이후 모든 명령어의 작업 디렉토리를 /code로 설정 COPY pipeline.py . 실행 시 → 컨테이너의 /code/pipeline.py에 복사됨
cd pipeline docker build -t taxi_ingest:v001 .docker-compose.yaml
services: pgdatabase: image: postgres:18 environment: - POSTGRES_USER=root - POSTGRES_PASSWORD=root - POSTGRES_DB=ny_taxi volumes: - "ny_taxi_postgres_data:/var/lib/postgresql:rw" ports: - "5432:5432" pgadmin: image: dpage/pgadmin4 environment: - PGADMIN_DEFAULT_EMAIL=admin@admin.com - PGADMIN_DEFAULT_PASSWORD=root volumes: - "pgadmin_data:/var/lib/pgadmin" ports: - "8085:80" volumes: ny_taxi_postgres_data: pgadmin_data:volumes
- Docker가 관리하는 위치에 자동 저장됩니다
- OS저장 위치
- Linux/var/lib/docker/volumes/
- 저장 위치 확인 커맨드
docker volume inspect ny_taxi_postgres_data ' [ { "CreatedAt": "2026-01-26T12:19:21Z", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/ny_taxi_postgres_data/_data", "Name": "ny_taxi_postgres_data", "Options": null, "Scope": "local" } ] '
- OS저장 위치
# 장점:
# - Docker가 최적 위치에 저장
# - 권한 문제 없음
# - 이식성 좋음 (어떤 시스템에서든 작동)
# - docker-compose.yml만 있으면 OK
컨테이너간 네트워크
services: pgdatabase: # ← 이 이름으로 통신! image: postgres:18 ports: - "5432:5432" pgadmin: # ← 이 이름으로 통신! image: dpage/pgadmin4 ports: - "8085:80"Docker Compose는 자동으로:
- {폴더명}_default 이름의 브릿지 네트워크 생성
- 모든 서비스를 이 네트워크에 연결
- 서비스 이름을 hostname으로 사용
# docker-compose up 후 $ docker network ls NETWORK ID NAME DRIVER SCOPE abc123def456 pipeline_default bridge local # ← 자동 생성! # 네트워크 상세 정보 $ docker network inspect pipeline_default # 출력: "Containers": { "xxx": { "Name": "pgdatabase", "IPv4Address": "172.18.0.2/16" # ← 내부 IP }, "yyy": { "Name": "pgadmin", "IPv4Address": "172.18.0.3/16" # ← 내부 IP } }uv
- uv는 pip + venv + pyenv 일부 역할을 한 번에 함.
생성되는 파일:
- pyproject.toml: 프로젝트 설정 및 의존성
- .python-version: 프로젝트의 Python 버전
- uv.lock: 의존성 lock 파일 (정확한 버전 고정)
uv 명령어
단계 명령어 결과
1️⃣ uv init --python 3.13 프로젝트 파일 생성 (.python-version, pyproject.toml) 2️⃣ uv add pandas / uv sync .venv 가상환경 자동 생성 + Python 3.13 설치 3️⃣ uv run python 가상환경의 Python 3.13 실행 핵심:
- uv init은 설정만 함 (가상환경 X)
- 실제 가상환경은 lazy하게 첫 실행 시 자동 생성!
uv가 해주는 것
기능 venv uv
가상환경 생성 O O 패키지 설치 X O 초고속 설치 X O (Rust 기반) 의존성 해결 X O lock 파일 X O (uv.lock) Python 버전 고정 X O 재현 가능한 환경 약함 강함 activate 필요성 O X uv run의 동작 원리
uv run은 자동으로:
- 현재 디렉토리에서 pyproject.toml 찾기
- .venv 가상환경 찾기 (없으면 생성)
- 가상환경의 Python/패키지 사용
# uv run은 내부적으로 이렇게 동작: # 1. .venv/bin/python script.py # 2. 환경변수 PATH에 .venv/bin 추가 # 3. 실행 후 원래 환경으로 복귀# On macOS and Linux. curl -LsSf <https://astral.sh/uv/install.sh> | sh # 현재 디렉토리를 Python 프로젝트로 초기화 uv init --python 3.12 # add 예시 (pip install pandas ayarrow 와 동일한 역할을 한다.) uv add pandas pyarrow- 공식 레포지토리: https://github.com/astral-sh/uv
- 레퍼런스: https://sigridjin.medium.com/파이썬-개발자라면-uv-를-사용합시다-546d523f7178
반응형'엔지니어가 되자 > Data Engineering' 카테고리의 다른 글
[2026-data-engineering-zoomcamp] Analytics Engineering이란?- 4주차 (0) 2026.02.23 [2026-data-engineering-zoomcamp] Data Warehouse, Big Query에 대한 이해 - 3주차 (1) 2026.02.23 Analytics 관련 내용 정리 (Data warehouse/Search/Streaming) (0) 2025.01.13 AWS EC2에 Docker 환경 배포 작업기 - WAS(Django) / Web Server(Nginx) / Mysql DB (0) 2024.01.02 [글또] 스칼라와 친해지기 (개념/설치/문법) (0) 2021.11.07 - docker에 대한 이해