docker 컨테이너로 호스트 브라우저에서 사용할 수 있도록 Jupter notebook을 시작합니다.

이번에는 docker 용기에서 jupter notebook을 시작해서 호스트에서 브라우저를 볼 수 있습니다.
또 사적인 환경을 사용하려고 했지만 안전 설정을 고려하지 않았다.

1. docker-compose용 파일 만들기


docker-commose를 시작하는 것을 전제로 하기 때문에 Docker file과 Docker-compose를 시작합니다.순서대로 제작하다.

1.1 Dockerfile


FROM python:3.9

WORKDIR /app

SHELL ["/bin/bash", "-c"]

RUN apt-get update &

RUN pip install --upgrade pip 

RUN pip install notebook

1.2 docker-compose.yml


컨테이너에서 호스트로port를 전달하는 데 필요한 곳ports:.
이번에는 주퍼 노트북이 기본적으로 사용하는 포트 8888을 컨테이너 및 호스트에서 사용하도록 설정했습니다.
version: '3'
services:
  app:
    build: .
    volumes:
      - ./:/app
    ports:
      - 8888:8888
    tty: true

2. 컨테이너에 들어가서 jupter notebook 시동


2.1 컨테이너 시작


우선 컨테이너 시동이 걸린다.
$ docker-compose up -d
시동 확인.
$ docker-compose ps
State가 Up라면 OK.여기서도 포트의 설정을 확인할 수 있습니다.
      Name           Command   State         Ports       
----------------------------------------------------------
jnotebook-            python3   Up      0.0.0.0:8888->8888
docker_app_1                            /tcp,:::8888->8888
                                        /tcp              

2. 컨테이너에 들어가서 jupter notebook 시동


컨테이너에 들어가다.
$ docker-comose exec app bash
다음 명령을 사용하여 jupter notebook을 시작합니다.
root# jupyter notebook --port=8888 --ip=0.0.0.0 --allow-root --NotebookApp.token=''
옵션이란--port=8888 8888 포트 활용--ip=0.0.0.0 외부로부터의 액세스를 허용합니다.호스트에서 액세스할 수 있도록 설정합니다.--allow-root 루트에서 시작할 수 있습니다.docker 용기의 사용자 권한은 기본적으로 root 사용자이기 때문입니다.--NotebookApp.token='' 브라우저에 접근할 때의 영패 입력을 비활성화합니다.
실행된 터미널은 다음과 같습니다.
root@875788d8dc37:/app# jupyter notebook --port=8888 --ip=0.0.0.0 --allow-root --NotebookApp.token=''
[I 05:42:04.018 NotebookApp] Authentication of /metrics is OFF, since other authentication is disabled.
[W 05:42:04.158 NotebookApp] All authentication is disabled.  Anyone who can connect to this server will be able to run code.
[I 05:42:04.163 NotebookApp] Serving notebooks from local directory: /app
[I 05:42:04.163 NotebookApp] Jupyter Notebook 6.4.8 is running at:
[I 05:42:04.163 NotebookApp] http://875788d8dc37:8888/
[I 05:42:04.163 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[W 05:42:04.165 NotebookApp] No web browser found: could not locate runnable browser.
또 용기에서 연결이 가능한지 확인할 때curl 명령을 사용해 확인할 수 있다.
$ curl -L localhost:8888
를 시작하면 다음과 같이 표시됩니다.
<!DOCTYPE HTML>
<html>

<head>
    <meta charset="utf-8">
실패할 경우 다음과 같습니다.
curl: (7) Failed to connect to localhost port 8888: 接続を拒否されました

3. 호스트에서 브라우저 연결


브라우저http://localhost:8888 연결을 열고 notebook의 페이지를 표시하면 됩니다!!

4.sh 파일을 통해 notebook 실행


시작할 때 매번 옵션을 지정하는 것은 번거롭기 때문에sh 파일부터 실행합니다.
root# jupyter notebook --port=8888 --ip=0.0.0.0 --allow-root --NotebookApp.token=''
실행 시.
(권한이 없으면 실행할 수 없을 때 용기 밖chmod 755 jn.sh.
# ./jn.sh
jupyter notebook --generate-config에서도 파일을 선택할 수 있지만 파일의 위치는 사용자 디렉터리에 있기 때문에 이번에sh파일을 사용했습니다.

좋은 웹페이지 즐겨찾기