Browsing Category

Dev

Development category

Dev

[Dev] 도커를 이용한 jupyter notebook Install & pandas test

안녕하세요. ManVSCloud 김수현입니다.

최근에 슬슬 개발 언어를 배워볼 필요성을 느끼게 되었습니다.
제가 배워보기로 한 언어는 Python입니다.

Python이 배우기 쉬운 언어라 선택하기보다 제가 만들고 싶은 것도 있고 해보고 싶은 작업에 Python이 필요로 하기때문에 선택하게 되었습니다.


Python을 배워 데이터 분석과 Python용 AWS SDK인 boto3에 활용할 예정이며
언어를 배우기 앞서 웹 브라우저를 통해 코드 작성 후 실행을 해볼 수 있도록
“JUPYTER NOTEBOOK”을 설치할 것입니다.


ENV & BASE INSTALL

우선 고정적인 Python 버전과 변경된 Python 버전으로 인해 다른 시스템에 영향이 가는 것을 원하지 않아 독립된 가상 환경이 필요했습니다.

# OS : CentOS7
# Virtualization approach : Docker
# Python : 3.8.6
# Jupyter : 6.2.0

pyenv, virtualenv, anaconda, docker, kubernetes 등 다양한 선택지가 있었으나
저는 제가 조금 더 익숙한 docker를 이용하여 설치를 하였습니다.

아래 기본적인 설정과 docker 설치를 남겨놓았으나 이 포스팅은 Jupyter 설치가 메인이라 docker 설치 방법에 대한 설명을 따로 하지않도록 하겠습니다.

setenforce 0

sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

[root@localhost jupyter]# sestatus | grep config
Mode from config file: disabled

yum update -y && yum install -y yum-utils

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

yum install -y docker-ce

curl -L https://github.com/docker/compose/releases/download/1.25.0-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

cd /usr/local/bin

chmod +x docker-compose

base=https://github.com/docker/machine/releases/download/v0.16.0 && curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && sudo install /tmp/docker-machine /usr/local/bin/docker-machine

systemctl enable docker
systemctl start docker

Jupyter NoteBook Install

docker와 docker-compose 설치 및 실행을 끝마치고
vi docker-compose.yaml 를 하여 아래와 같은 .yaml 파일을 생성합니다.

version:                "3"
services:
  datascience-notebook:
      image:            jupyter/datascience-notebook
      volumes:
        - /docker/jupyter:/home/jovyan/work
      ports:
        - 8888:8888
      container_name:   jupyter-container

위 사이트에서 처럼 원하시는 옵션에 맞게 사용자 지정하여 파일을 생성하셔도 좋습니다.

이후 docker-compose up -d 명령어를 이용하여 실행할 수 있습니다.
-d 옵션을 줘야 백그라운드로 실행이 됩니다.

jupyter의 경우 실행 시 토큰 값을 알아야 접속이 가능합니다.
(옵션에서 토큰or패스워드 값을 제거할 수도 있습니다.)

백그라운드로 실행했을 때는 docker-compose logs 명령어를 이용하여 확인이 가능합니다.

정상적으로 접근이 되지않고 302 에러가 발생할 경우 방화벽 문제가 있을 수 있습니다.
방화벽을 확인해보시기 바랍니다.

[root@localhost jupyter]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f1ccb4d9ba04 jupyter/datascience-notebook “tini -g — start-no…” About an hour ago Up 56 minutes 0.0.0.0:8888->8888/tcp jupyter-container

docker ps 명령어로 실행된 docker 컨테이너를 확인 할 수 있으며
docker exec -it f1ccb4d9ba04 /bin/bash (docker exec -it CONTAINER ID /bin/bash) 를 이용할 경우
컨테이너 내부로 접속이 가능합니다.

  • docker-compose 재시작 시 자동 실행 등록

vi /etc/systemd/system/docker-compose.service

[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/develop/docker
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl enable docker-compose


pandas 라이브러리 테스트

마지막으로 생성한 jupyter notebook을 이용하여 python의 pandas 라이브러리를 테스트 해보겠습니다.

[New]에서 Python3을 선택합니다.
import pandas as pd

df = pd.DataFrame(
[[30, 173, 61],
[27, 181, 79],
[26, 158, 45]],
index=[1, 2, 3],
columns=['Age', 'Height', 'Weight'])

df

코드는 간단하게 테스트용으로 사용하였습니다.

pandas 라이브러리 테스트까지 정상적으로 마무리되었습니다.
지금부터라도 Python 공부를 해봐야겠습니다.


참고 사이트

긴 글 읽어주셔서 감사합니다.