dev/python

도커를 이용한 파이썬 pyenv 개발 환경 만들기, Docker python pyenv jupyter notebook

데릭짱 2021. 12. 21. 13:46

 

 

 

 

Docker란 무엇인가?

 도커는 컨테이너(container)기반의 소프트웨어 플랫폼으로 서비스 또는 프로그램을 쉽게 구축하고 테스트 하며 배포 할 수 있는 서비스 입니다. 도커는 프로그램을 컨테이너라는 단위를 이용하여 패키징하며, 이 컨테이너 안에 다양한 라이브러리, OS 패키지, 소프트웨어 도구, 개발 코드 등 서비스(프로그램)을 실행하는데 필요한 모든 요소를 구성 할 수 있습니다. 도커를 이용하여 서비스를 배포할 경우 다양한 OS 환경에 맞게 dependency한 문제 없이 배포를 할 수 있는 장점이 있습니다.

 

도커와 비슷한 개념으로 VM(가상화)라는 서비스가 존재 합니다. 

 

 이 두가지의 가장 큰 차이점은 Guest OS 위에 올릴 것인가, 아니면 OS 바로 위에 올릴 것인가 차이라고 볼 수 있습니다.

이해를 돕기 위해 아래 두 그림을 참고하시면, 

 도커 컨테이너는 애플리케이션 A, B, C ... F 가 Host OS 위에 바로 올라가는 반면, VM은 Guest OS 위에 애플리케이션 A, B, ...F 가 올라간다는 점입니다. VM은 무조건 OS가 필요하며 이 구조로 인하여 용량이 도커 컨테이너에 비해 클 수 밖에 없습니다. 즉 가상화 방법이 약간 다른 점입니다. 컨테이너는 별도의 Guest OS가 필요 없는 이유는 컨테이너를 프로세스 격리를 통해 구성하는 것이 가능하기 때문입니다. 더 자세한 깊이 있는 내용들은 직접 조사해 보는 것도 나름 공부가 많이 될 것 같아 더 다루지는 않도록 하겠습니다. ^^

 

Docker 기본 명령어

※ Docker의 설치 방법은 OS 마다 약간씩 다르고 설치 방법 또한 쉽게 검색 할 수 있기 때문에 본문에서는 다루지 않겠습니다. (이제 부터 기본적인 설명은 linux OS를 기본으로 사용한다는 전제하에 설명드릴게요.)

 

1. Docker root dir 변경 방법

 설치는 다루지 않지만 한 가지 짚고 넘어가야 할 중요한 설정이 있습니다. 도커 컨테이너를 실행하고 그 컨테이너 안에 새로운 파일 또는 소스 코드를 계속 넣어 줄 경우, 도커가 설치되어 있는 기본 파일시스템 (Linux의 경우 / (root)이 용량이 지속적으로 증가하여 100%에 도달 하는 경우가 많이 있습니다. 

 

 용량이 100%가 될 경우 해당 문제가 지속되면 도커 컨테이너 안의 서비스가 동작하지 않던가, OS에 문제가 생길 수 있기 때문에 항상 조심해야 합니다. 

 

 이 문제를 해결 하기 위해서는 현재 도커가 사용하고 있는 root dir을 확인하고, 여유량이 가장 많은 파일시스템으로 변경해주는 것이 좋습니다.

 

 (1) docker root dir 확인

[root@ ~]# docker info | grep -i "docker root dir"
Docker Root Dir: /var/lib/docker

 

 (2) linux의 vi 명령어를 통해 /etc/docker/daemon.json 파일을 아래와 같이 수정합니다.

[root@ ~]# vi /etc/docker/daemon.json 
{
 "graph": "/data/app/docker_lib"
}

 

 (3) 수정이 완료 되었으면 docker 서비스를 재시작하고 정상적으로 root dir이 변경되었는지 확인 합니다.

[root@ ~]# docker info | grep -i "docker root dir"
 Docker Root Dir: /data/app/docker_lib

2. Docker 기본 명령 설명

 실제 Docker 공식 홈페이지에 가면 설명이 자세히 되어 있지만, 자주 사용하는 명령어들만 소개해 드리도록 하겠습니다.

 

 (1) Docker 생성, 기동 및 확인할 때 사용하는 명령

명령어 상세 설명
docker build -t python:0 . 미리 만들어 놓은 세팅 값(Dokcerfile)을 이용 하여 새로운 이미지 생성할 때 사용합니다.
docker images 생성된 이미지들을 확인할 때 사용하는 명령입니다.
docker run -itd python:0 생성된 이미지를 실행 시킬 때 사용하는 명령입니다.
docker ps 현재 동작 중인 docker container process를 확인할 때 사용하는 명령입니다.
docker ps -a 동작 중 이거나 동작했던 흔적이 있는 docker container process를 확인하는 명령입니다.
docker exec -it [container_ID] /bin/bash 현재 동작 중인 docker container에 접속할 때 사용하는 명령입니다.

  - Docker images 실행 예시

[root@ubuntu-pyenv]# docker images
REPOSITORY     TAG               IMAGE ID       CREATED             SIZE
ubuntu_pyenv   v12.01_1          07f27a2a899d   2 hours ago         3.06GB
ubuntu         20.04             ba6acccedd29   2 months ago        72.8MB

  - Docker ps 실행 예시

[root@ai_server_56 ubuntu-pyenv]# docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED        STATUS        PORTS                                       NAMES
cad6a687a920   ubuntu_pyenv:v21.01_1   "jupyter notebook --…"   26 hours ago   Up 26 hours   0.0.0.0:8092->8888/tcp, :::8092->8888/tcp   ubuntu_python1

[root@ai_server_56 ubuntu-pyenv]# docker ps -a
CONTAINER ID   IMAGE                        COMMAND                  CREATED        STATUS        PORTS                                       NAMES
cad6a687a920   ubuntu_pyenv:v21.01_1   "jupyter notebook --…"   26 hours ago   Up 26 hours   0.0.0.0:8092->8888/tcp, :::8092->8888/tcp   ubuntu_python1
cad6a687a920   ubuntu_pyenv:v21.01_1   "jupyter notebook --…"   11 seconds ago   Exited (1) 7 seconds ago                                ubuntu_pyenv

 

  - Docker container 실행 예시

[root@ai_server_56 ubuntu-pyenv]# docker images
REPOSITORY     TAG               IMAGE ID       CREATED          SIZE
ubuntu_pyenv   v21.01_1          4794526cb409   11 minutes ago   3.06GB
ubuntu         20.04             ba6acccedd29   2 months ago     72.8MB

[root@ai_server_56 ubuntu-pyenv]# docker run -itd --name pyenv ubuntu_pyenv:v21.01_1
a0a0a4b7ee1e62eed92cab80a73cf01bac7304a3dc9bfccb01c2a3b6a8f94fb4

[root@ai_server_56 ubuntu-pyenv]# docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED         STATUS         PORTS                                       NAMES
a0a0a4b7ee1e   ubuntu_pyenv:v21.01_1        "jupyter notebook --…"   4 seconds ago   Up 3 seconds                                               pyenv

※ 가끔 linux OS 상에서 사용하고 있는 port가 있을 경우 docker cotainer가 동작하지 않을 수 있습니다. 이 때에는 container의 port를 forward 시켜서 기동 시킬 수 있습니다. (※ port forwarding)

[root@ubuntu-pyenv]# docker images
REPOSITORY     TAG               IMAGE ID       CREATED          SIZE
ubuntu_pyenv   v21.01_1          4794526cb409   11 minutes ago   3.06GB
ubuntu         20.04             ba6acccedd29   2 months ago     72.8MB

[root@ ubuntu-pyenv]# docker run -itd -p 8888:8888 --name ubuntu_pyenv ubuntu_pyenv:v21.01_1
52993ea66589a0b1822c3097bda06e0d505c53e26d915c600f057105f983127c

[root@ubuntu-pyenv]# docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED         STATUS         PORTS                                       NAMES
52993ea66589   ubuntu_pyenv:v21.01_1        "jupyter notebook --…"   3 seconds ago   Up 2 seconds   0.0.0.0:8888->8888/tcp, :::8888->8888/tcp   ubuntu_pyenv

 


 

 (2) Docker container commit, save 및 copy

명령어 상세 설명
docker commit [container_ID] REPOSITORY:TAG 현재 동작 중인 container를 새로운 이미지로 만들기 위한 명령입니다.
(※ 기존에 동작 중인 container에수정사항 발생 시 실행하여 내용이 저장될 수 있게 수행하는 것이 좋습니다.)
docker save -o file_name.tar REPOSITORY:TAG 생성되어 있는 docker 이미지를 별도의 파일로 SAVE 하기 위한 명령입니다.
(※ save 작업을 하면 변경된 내용 관리를 쉽게 할 수 있으며 다른 곳에 배포할 수 있습니다.
docker load -i file_name.tar 다른 곳에서 생성된 이미지 파일을 현재 docker 시스템에 불러올 때 사용하는 명령입니다.
docker cp D:/file_test/. [container_ID]:/src 실행 중인 container 안에 새로운 파일을 추가 하거나 source 코드 파일을 수정하거나 추가 할 경우 사용하는 명령입니다.

 

  - 실행 중인 container를 실행 예시

# 우선 실행 중인 container를 확인 합니다.
[root@ubuntu-pyenv]# docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED         STATUS         PORTS                                       NAMES
52993ea66589   ubuntu_pyenv:v21.01_1        "jupyter notebook --…"   2 minutes ago   Up 2 minutes   0.0.0.0:8888->8888/tcp, :::8888->8888/tcp   ubuntu_pyenv

# container id를 확인하고 commit을 진행 합니다.
[root@ai_server_56 ubuntu-pyenv]# docker commit 52993ea66589 ubuntu_pyenv:new
sha256:938df759a381508463fbf4568c05b30ab0a1b4630e3b090bc0054bcbbb900c0d
[root@ubuntu-pyenv]# docker images
REPOSITORY     TAG               IMAGE ID       CREATED          SIZE
ubuntu_pyenv   new               938df759a381   4 seconds ago    3.06GB
ubuntu_pyenv   v21.01_1          4794526cb409   18 minutes ago   3.06GB

 

  - container commit을 실행한 image를 파일로 저장하는 예시

# commit이 완료된 이미지를 확인 합니다.
[root@temp]# docker images
REPOSITORY     TAG               IMAGE ID       CREATED              SIZE
ubuntu_pyenv   new               938df759a381   About a minute ago   3.06GB
ubuntu_pyenv   v12.01_1          4794526cb409   20 minutes ago       3.06GB

# save 명령을 통해 이미지를 파일로 저장합니다.
[root@temp]# docker save -o ubuntu_pyenv_new.tar ubuntu_pyenv:new

# 실제로 생성된 파일을 확인 합니다.
[root@temp]# ls -l
total 3031400
-rw-------. 1 root root 3104151552 Dec 16 16:06 ubuntu_pyenv_new.tar

 

  - image로 저장한 파일을 load 명령을 이용하여 불러오는 예시

# 현재 등록되어 있는 image를 확인 합니다.
[root@ubuntu-pyenv]# docker images
REPOSITORY   TAG               IMAGE ID       CREATED        SIZE

# Docker load 명령을 통해 파일로 저장된 image를 불러옵니다.
[root@ubuntu-pyenv]# docker load -i ubuntu_pyenv_new.tar 
5a48ee034b04: Loading layer [==================================================>]  1.512GB/1.512GB
Loaded image: ubuntu_pyenv:v21.12_2

# 불러온 image를 확인합니다.
[root@ubuntu-pyenv]# docker images
REPOSITORY     TAG               IMAGE ID       CREATED         SIZE
ubuntu_pyenv   v21.12_2          67edba4bed71   3 minutes ago   4.62GB

 

  - 새로운 파일을 docker container 안으로 복사하는 예시

# 복사하고자 하는 파일을 확인 합니다.
[root@ubuntu-pyenv]# ls -l
-rw-r--r--. 1 root root      10240 Dec 21 08:44 test_copy.tar

# 복사할 docker container를 확인합니다.
[root@ubuntu-pyenv]# docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED        STATUS         PORTS                                       NAMES
a7ecf5d66c9d   bce2bd39dd10                 "jupyter notebook --…"   21 hours ago   Up 5 minutes   0.0.0.0:8888->8888/tcp, :::8888->8888/tcp   ubuntu_pyenv

# docker cp 명령을 이용하여 test_copy.tar 파일을 container안의 원하는 위치에 복사합니다.
[root@ubuntu-pyenv]# docker cp test_copy.tar a7ecf5d66c9d:/home/ubuntu/.

# 복사가 정상적으로 이루어 졌는지 확인하기 위해 container 안으로 접속 합니다.
[root@ubuntu-pyenv]# docker exec -it a7ecf5d66c9d /bin/bash

# container접속 후 복사한 경로로 이동하여 파일을 확인합니다.
ubuntu@a7ecf5d66c9d:~$ cd /home/ubuntu
ubuntu@a7ecf5d66c9d:~$ ls -l
-rw-r--r--. 1 root   root   10240 Dec 21 08:44 test_copy.tar

 


 (3) Docker container 중지 및 삭제

명령어 상세 설명
docker stop CONTAINER_ID 현재 동작 중인 특정 container를 중지하는 명령입니다.
docker stop $(docker ps -a -q) 현재 동작 중인 container를 중지하는 명령입니다.
docker restart CONTAINER_ID 중지되어 있는 container를 재시작할때 사용하는 명령입니다.
docker rm CONTAINER_ID 동작이 종료된 container를 삭제하는 명령입니다.
docker container prune 실행되었던 container의 모든 흔적을 삭제할 때 사용하는 명령입니다.
docker rmi -f image ID docker 이미지를 삭제할 때 사용하는 명령입니다.
docker rmi $(docker images -q)
docker에 로드되어 있는 모든 이미지를 삭제하는 명령입니다.

 

  - 실행 중인 container를 중지하는 예시

# 동작중인 docker container를 확인합니다.
[root@ubuntu-pyenv]# docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED         STATUS          PORTS                                       NAMES
33538ed3c1b1   ubuntu_pyenv:v21.12_2        "jupyter notebook --…"   2 minutes ago   Up 2 minutes    8888/tcp                                    ubuntu_pyenv_test

# container id를 이용하여 동작중인 container를 중지합니다.
[root@ubuntu-pyenv]# docker stop 33538ed3c1b1
33538ed3c1b1

# 정상적으로 중지가 되었는지 확인 합니다.
[root@ubuntu-pyenv]# docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED        STATUS          PORTS                                       NAMES

 

  - 종료된 container를 재시작 하는 예시

# 현재 동작하고 있는 container가 있는지 확인합니다.
[root@ubuntu-pyenv]# docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED        STATUS          PORTS                                       NAMES

# 중지되어 있는 container id를 확인합니다.
[root@ubuntu-pyenv]# docker ps -a
CONTAINER ID   IMAGE                        COMMAND                  CREATED         STATUS                     PORTS                                       NAMES
33538ed3c1b1   ubuntu_pyenv:v21.12_2        "jupyter notebook --…"   5 minutes ago   Exited (0) 2 minutes ago                                               ubuntu_pyenv_test

# restart 명령어를 이용하여 재동작 시킵니다.
[root@ubuntu-pyenv]# docker restart 33538ed3c1b1
33538ed3c1b1

# 정상적으로 동작하는지 확인 합니다.
[root@ubuntu-pyenv]# docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED         STATUS          PORTS                                       NAMES
33538ed3c1b1   ubuntu_pyenv:v21.12_2        "jupyter notebook --…"   5 minutes ago   Up 5 seconds    8888/tcp                                    ubuntu_pyenv_test

 

 - container를 종료 시키고 삭제하는 예시

# 동작중인 container를 확인합니다.
[root@ubuntu-pyenv]# docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED         STATUS          PORTS                                       NAMES
33538ed3c1b1   ubuntu_pyenv:v21.12_2        "jupyter notebook --…"   8 minutes ago   Up 2 minutes    8888/tcp                                    ubuntu_pyenv_test

# container id를 이용하여 동작 중인 container를 중지합니다.
[root@ai_server_56 ubuntu-pyenv]# docker stop 33538ed3c1b1
33538ed3c1b1

# 중지된 container를 삭제합니다.
[root@ai_server_56 ubuntu-pyenv]# docker rm 33538ed3c1b1
33538ed3c1b1

# container가 정상적으로 삭제가 되었는지 확인합니다.
[root@ubuntu-pyenv]# docker ps -a
CONTAINER ID   IMAGE                        COMMAND                  CREATED         STATUS          PORTS                                       NAMES

 

Dockerfile을 이용한 pyenv & jupyter notebook 이미지 생성

 Dockerfile이란 Docker 공식 Hub에서 제공하는 이미지를 다운 받아 container를 생성하고 실행하는 것에서 끝나지 않고, 제공되는 이미지를 기반으로 자신이 원하는 새로운 이미지를 생성하고 배포 할 수 있는 파일입니다.

 

 조금 더 쉽게 설명을 해 드리면, 자신이 원하는 다양한 물건을 작성한 주문서(Dockerfile)를 이용하여 공급자에게 주문(build)을 하고 이 주문서를 이용하여 제품을 포장(Image)을 한 다음 이것을 conainer box에 담아 배송시켜(Run) 활용하는 것입니다. 제가 쉽게 이해하기 위해 이렇게 비유를 했지만 적당한 비유인지는 각자 판단하시기 바랍니다. ^^

 

 저는 python을 주로 사용하기 때문에 python을 주로 사용할 수 있는 pyenv 환경을 만들고 그 안에서 동작하는 jupyter notebook을 담을 수 있는 이미지를 만들기 위한 Dockerfile을 설명드리도록 하겠습니다. 좀 더 자세하고 다양한 build format은 공식 docker 링크를 참고하시기 바랍니다. (https://docs.docker.com/engine/reference/builder/)

 

 Dockerfile을 작성하는 사람마다 스타일이 다르지만, 제 경우에는 나중에 새로운 버전의 python으로 구성할 필요성 때문에 사용하고자 하는 python version과 python 동작에 필요한 library 파일 정보를 별도로 구분해서 관리 합니다. 아래와 같이 3가지 파일이 준비 되어 야 합니다.

# pyenv jupyter 설치를 위한 세가지 파일
[root@ubuntu-pyenv]# ls -l
-rw-r--r--. 1 root root          7 Dec 15 14:49 python-versions.txt
-rw-r--r--. 1 root root       2188 Dec 15 14:50 requirements-setup.txt
-rw-r--r--. 1 root root       1811 Dec 21 08:32 Dockerfile

 

 우선 가장 먼저 소개해 드릴 파일은 python-versions.txt 파일입니다. 이 파일에는 사용하고자 하는 python 버전만 입력합니다.

[root@ubuntu-pyenv]# cat python-versions.txt 
3.8.12

 

 두번째로 소개해 드릴 파일은 python library 정보가 담긴 requirements-setup.txt 파일입니다. 이 파일에 기술된 library는 정답이 없으며 자신의 python 개발환경에 맞게 변경하시기 바랍니다.

[root@ubuntu-pyenv]# cat requirements-setup.txt 
ipykernel==6.5.1
ipython==7.29.0
ipython-genutils==0.2.0
ipywidgets==7.6.5
jedi==0.18.1
joblib==1.1.0
jsonschema==4.2.1
jupyter==1.0.0
jupyter-client==7.1.0
jupyter-console==6.4.0
jupyter-core==4.9.1
jupyterlab-pygments==0.1.2
jupyterlab-widgets==1.0.2
keras==2.6.0
Keras-Applications==1.0.8
keras-lr-finder==0.1
Keras-Preprocessing==1.1.2
matplotlib==3.5.0
matplotlib-inline==0.1.3
more-itertools==8.12.0
notebook==6.4.6
pandas==1.3.4
python-dateutil==2.8.2
scikit-learn==1.0.1
scipy==1.7.3
statsmodels==0.13.1
tensorboard==2.6.0
tensorboard-data-server==0.6.1
tensorboard-plugin-wit==1.8.0
tensorflow-estimator==2.6.0
tensorflow-gpu==2.6.2

 

 마지막으로 소개해 드릴 파일은 build의 핵심인 Dockerfile입니다. 사용하실 때 #(주석) 부분만 빼고 활용하시면 됩니다.

# build시 사용할 기본 OS 버전 정보
FROM docker.io/ubuntu:20.04

# 패키지 설치 시 사용자에게 설치 여부를 묻는 interactive 모드를 묻지 않게 변경
ARG DEBIAN_FRONTEND=noninteractive

# python 설치 시 필요한 OS package 정보
ARG BUILD_PYTHON_DEPS=" \
        make \
        build-essential \
        libbz2-dev \
        libffi-dev \
        libgdbm-dev \
        libncurses5-dev \
        libncursesw5-dev \ 
        libnss3-dev \
        libreadline-dev \
        libsqlite3-dev \ 
        libssl-dev \
        xz-utils \ 
        zlib1g-dev \
        "

# container 이미지 않에서 사용할 OS package 정보       
ARG BUILD_OPT_DEPS=" \
        sudo \
        locales \
        git \
        ca-certificates \
        curl \
        vim \
        zip \
        unzip \
        tzdata \
        language-pack-ko \
        "

# ubuntu linux 설치 후 필요한 apt-get 버전 업데이트 및 OS 설정
# basic update & locale setting
RUN apt-get update \
 && apt-get upgrade -yqq \
 && apt-get -yq install apt-utils \
 && apt-get install -y --no-install-recommends \
        ${BUILD_PYTHON_DEPS} \
        ${BUILD_OPT_DEPS} \
 && useradd -m -s /bin/bash ubuntu \
 && echo 'ubuntu ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers \
 && apt-get autoremove -yqq --purge \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# 그 외 환경 설정
RUN locale-gen ko_KR.UTF-8

USER ubuntu

WORKDIR /home/ubuntu

#ENV LANG=ko_KR.UTF-8 \
ENV LANG=en_US.UTF-8 \
    TZ=Asia/Seoul \
    PYENV_ROOT="/home/ubuntu/.pyenv" \
    PATH="/home/ubuntu/.pyenv/bin:/home/ubuntu/.pyenv/shims:$PATH"

# install pyenv & python 설정
COPY python-versions.txt /
RUN curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash \
 && pyenv install `cat /python-versions.txt` \
 && pyenv global `cat /python-versions.txt` \
 && pip install --upgrade pip

# pip requirements 설치
COPY requirements-setup.txt /
RUN pip install -r /requirements-setup.txt

# 설치 완료 후 container 기동 시 같이 jupyter notebook 실행
CMD ["jupyter", "notebook", "--port=8888", "--no-browser", "--ip=0.0.0.0", "--allow-root"]

 

 이제 마무리 단계입니다. 생성된 이미지를 container에 실행하여  시키고, jupyter notebook을 열어 passwd만 입력하시고 사용하시면 됩니다.

# 생성된 docker image를 확인 합니다.
[root@ubuntu-pyenv]# docker images
REPOSITORY     TAG               IMAGE ID       CREATED          SIZE
ubuntu_pyenv   v21.12_2          67edba4bed71   3 hours ago      4.62GB

# port forwarding을 이용하여 docker container를 실행합니다.
[root@ubuntu-pyenv]# docker run -itd -p 9999:8888 --name ubuntu_pyenv ubuntu_pyenv:v21.12_2

# 실행된 container를 확인하고 container ID를 확인합니다.
[root@ubuntu-pyenv]# docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED          STATUS          PORTS                                       NAMES
a7ecf5d66c9d   bce2bd39dd10                 "jupyter notebook --…"   24 hours ago     Up 3 hours      0.0.0.0:8888->8888/tcp, :::8888->8888/tcp   ubuntu_pyenv

# jupyter notebook을 처음 실행 할 때 필요한 패스워드설정을 위해 container 로그를 확인합니다.
[root@ubuntu-pyenv]# docker logs a7ecf5d66c9d
[I 11:39:16.622 NotebookApp] Writing notebook server cookie secret to /home/ubuntu/.local/share/jupyter/runtime/notebook_cookie_secret
[I 11:39:16.810 NotebookApp] Serving notebooks from local directory: /home/ubuntu
[I 11:39:16.811 NotebookApp] Jupyter Notebook 6.4.6 is running at:
[I 11:39:16.811 NotebookApp] http://b000c9347d46:8888/?token=b54ef16897f488bf184bf5576723c5806c74d1f8d8a7ae41
[I 11:39:16.811 NotebookApp]  or http://127.0.0.1:8888/?token=b54ef16897f488bf184bf5576723c5806c74d1f8d8a7ae41
[I 11:39:16.811 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 11:39:16.814 NotebookApp] 
    
    To access the notebook, open this file in a browser:
        file:///home/ubuntu/.local/share/jupyter/runtime/nbserver-1-open.html
    Or copy and paste one of these URLs:
        http://b000c9347d46:8888/?token=b54ef16897f488bf184bf5576723c5806c74d1f8d8a7ae41
     or http://127.0.0.1:8888/?token=b54ef16897f488bf184bf5576723c5806c74d1f8d8a7ae41

 

 마지막으로 jupyter notebook에 접속하여 token 값을 이용하여 passwd를 설정합니다.

 

 

 

 

 

 

 

 

 

 그럼 docker를 이용한 python pyenv jupyter notebook 설치 방법을 마치도록 하겠습니다. 잘 활용하시길 바래요~!