지난 시간에 Mariadb 컨테이너를 올리고 테스트 데이터를 만들어보았다. 이번 시간에는 Jupyter 컨테이너를 올리는 과정을 알아보고, 다음 시간에는 Jupyter에서 Mariadb 컨테이너 데이터를 불러오는 방법에 대해 알아보려고 한다.
[지난 시간 내용 - Mariadb 컨테이너 올리기]
(설명) 전체적으로 아래와 같은 아키텍처를 구축하려고 하며, 3번 과정에서 Mariadb 데이터를 Jupyter로 불러오는 과정을 진행하기 위해 Jupyter 컨테이너를 올려보도록 한다.
1. docker-compose.yaml 이용하여 jupyter 컨테이너 내용 추가
(1-1) docker-compose.yaml에 아래 내용 추가
# docker-compose.yaml
services:
jupyter:
image: jupyter/base-notebook:latest
container_name: jupyter-container
environment:
# Jupyter notebook 접속시 사용할 패스워드
- JUPYTER_TOKEN=${password}
volumes:
- ./notebooks:/home/jovyan/work
restart: always
ports:
- 8888:8888
networks:
network_custom:
ipv4_address: 172.28.0.2
networks:
network_custom:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.28.0.0/16
gateway: 172.28.0.1
# 내용 설명
▶image: jupyter 최신 버전의 이미지 사용
▶container_name: 컨테이너명 설정
▶environment: Jupyter 웹 브라우저 접속시 사용할 토큰 키 or 패스워드 설정
▶volumes
→ 호스트 머신 디렉터리를 컨테이너 내부와 연결하는 바인드 마운트(bind mount) 방식
→ 호스트, 컨테이너 서로 간의 데이터 변경이 발생하면 실시간으로 동기화할 수 있다
→ (의미) 호스트 머신의 로컬 디렉터리를 (./notebooks), 컨테이너 디렉터리를 (/home/jovyan/work)으로 설정
▶restart: 오류시 재기동 여부
▶ports: 로컬 및 컨테이너에서 사용할 포트 (Jupyter는 8888 포트를 통해 외부에서 접근하도록 설정되어있음)
▶networks: 해당 컨테이너에서 사용할 고정 IP
※ 바인드 마운트(bind mount) 방식이란?
- 호스트 머신의 로컬 디렉터리(./notebooks)를 jupyter 컨테이너 내부 디렉터리(/home/jovyan/work)에 연결하는 바인드 마운트 방식
- 즉, 사용자가 호스트 머신의 특정 경로를 컨테이너에 직접 연결시키는 방식이며, 호스트 머신의 파일 시스템에 직접 액세스하여 데이터를 수정할 수 있게 된다. (해당 변경 사항은 실시간으로 양쪽에 반영된다)
- DB 데이터와 달리 ipynb 파일에 직접 접근하고 수정해야하는 상황이 있을 수 있기에 직접 로컬 디렉터리 위치를 지정해주는 바인드 마운트 방식을 적용했다.
참고로, 아래 내용은 기존 도커 서비스들에게 할당한 고정 IP 정보이다. 나의 경우 jupyter & mariadb 컨테이너를 추가해준 것이고 서비스들 간에 서로 IP를 겹치지 않게만 설정해주면 된다.
# ├── services
# └── jupyter : 172.28.0.2
# └── mariadb : 172.28.0.3 (참고로, 나의 경우 172.28.0.4을 다른 테스트용 컨테이너에서 쓰고 있는 상황)
# └── postgres : 172.28.0.5
# └── redis: 172.28.0.6
# └── airflow-webserver: 172.28.0.7
# └── airflow-scheduler: 172.28.0.8
# └── airflow-worker: 172.28.0.9
# └── airflow-triggerer: 172.28.0.10
# └── airflow-init: 172.28.0.11
# ├── networks
# └── subnet : 172.28.0.0/16
# └── gateway : 172.28.0.1
(1-2) 로컬 디렉터리 생성
volumes에서 호스트 머신 디렉터리를 ./notebooks로 지정하였으므로 해당 디렉터리를 생성해준다.
# docker-compose.yaml 파일이 있는 곳에 notebooks 디렉터리 생성
mkdir notebooks
※ 왜 Jupyter 컨테이너의 디렉터리를 /home/jovyan/work로 설정했을까?
아래 명령어를 통해 Jupyter 컨테이너를 올린 후 bash shell을 실행해보면 default 디렉터리가 /home/jovyan인 것을 확인할 수 있다. 해당 디렉터리에 있는 work 폴더 안에 Jupyter 노트북 파일(ipynb)을 저장하기 위해서 /home/jovyan/work로 설정했다.
# jupyter container 접근
# sudo docker exec -it ${container명} bash
sudo docker exec -it jupyter-container bash
# bash shell
pwd
ls
여담으로, 처음에는 컨테이너 내부 디렉터리를 올바르게 지정하지 못해서 바인드 마운트가 정상적인 기능을 하지 못했다. 컨테이너 재기동 시 ipynb 파일이 계속 사라지게 되었고, 수십 번의 시행착오를 통해 컨테이너 default 디렉터리(/home/jovyan/)를 알아낼 수 있었다.
2. 도커 재기동
sudo docker compose down
sudo docker compose up -d
3. Jupyter notebook 접속
- http://localhost:8888/
- Password or Token → docker-compose.yaml에서 jupyter 컨테이너에서 설정한 토큰 or 패스워드 입력 후 [Log in] 클릭
# docker-compose.yaml
services:
jupyter:
environment:
# Jupyter notebook 접속시 사용할 패스워드
- JUPYTER_TOKEN=${password}
이번 시간에는 Docker에서 Jupyter 컨테이너를 올려보는 과정을 통해, docker-compose.yaml 파일을 설정하는 방법에 대해서 자세히 알아보았다. yaml 파일을 이용하여 올리는 방법이 많이 공유되어 있지 않아서 많은 시행착오를 겪으면서 성공적으로 컨테이너를 올릴 수 있었다. 다음 시간에는 Jupyter 컨테이너에서 Mariadb 컨테이너의 데이터를 불러오는 과정을 진행해보려고 한다.
'[기술공부] > Apache Airflow' 카테고리의 다른 글
[Airflow] Connection 연결시 [Test] 버튼 비활성화된 경우 해결하는 방법 (1) | 2024.02.04 |
---|---|
[Airflow] docker-compose.yaml로 Jupyter 컨테이너 올리기 - (2) (0) | 2024.01.23 |
[Airflow] docker-compose.yaml로 mariaDB 컨테이너를 올렸을 때 볼륨이 정상 작동 안하는 오류 해결 (3) | 2024.01.18 |
[Airflow] docker-compose.yaml로 mariaDB 컨테이너 올리기 & DBeaver 연결하기 (0) | 2024.01.18 |
[Airflow] docker-compose.yaml에 대해 알아보기 (0) | 2024.01.18 |