Docker

[Docker] 서버 내 파이썬 환경 구성 (주피터)

교 향 2022. 9. 17. 17:27

0. 기본적으로 도커 이미지를 구성했다는 전제(or 이미지 pull해 옴)

1. process

2. 핵심 포인트 : 비밀번호 설정 등


1. 실습용으로 도커 허브에서 이미지를 가져옴. 도커 환경을 파이썬 3.8로 구성할 것이므로

 

> docker pull python 3.8

 

#실행화면

3.8: Pulling from library/python
23858da423a6: Pull complete
326f452ade5c: Pull complete
a42821cd14fb: Pull complete
8471b75885ef: Pull complete
8ffa7aaef404: Pull complete
15132af73342: Pull complete
5c6e2069704a: Pull complete
fd52c5a1a05a: Pull complete
ed2ccf9ab158: Pull complete
Digest: sha256:4b0ff29da02ca06fece65691ed8981ecdb5c537ce6a864e60137101e308a99d9
Status: Downloaded newer image for python:3.8
docker.io/library/python:3.8

 

 

로 가져 온 후

 

> docker images

 

#실행화면

REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
python       3.8       9fa000b720b7   3 days ago   913MB

 

로 잘 가져왔는지 확인하였음

 

 

이미지를 가져왔으니 컨테이너를 생성해야 겠다.

 

>docker run -d -it --name practice_make_server -p 5001:5001 python:3.8
83af3704702320031a89f3a01c7d875a80a5af112e7143a60ba7f78f06a4c957

 

옵션 설명
-d : Detached(독립적인) 모드로 docker 내부에 실행되는 요소를 실행하지 않고 백그라운드에서 실행될 수 있도록 함
-i : 컨테이너와 연결되어 있지 않아도 계속적인 커맨드 입력을 받음
-t : TTY 모드를 사용, Bash를 사용하려면 이 옵션을 설정 필수
-p : myport:container port로 포트포워딩

 

컨테이너가 잘 실행 되는지

 

> docker ps -a

로 확인함

 

#실행화면

>docker ps -a
CONTAINER ID   IMAGE        COMMAND     CREATED         STATUS         PORTS                    NAMES
83af37047023   python:3.8   "python3"   8 seconds ago   Up 7 seconds   0.0.0.0:5001->5001/tcp   practice_make_server

 

 

컨테이너가 실행 중이라면 실행 중인 컨테이너에 CLI에 접속하여 명령을 실행하게 해주는 명령어 exec를 사용한다.

docker exec <CONTAINER_ID> <COMMAND>

 

exec명령어를 사용해서 컨테이너 내 bin파일의 bash를 실행한다

> docker exec -it practice_make_server bin/bash

> root@83af37047023:/#

위와 같이 컨테이너 내에서 명령어를 칠 수 있게 되었다

파이썬 환경을 구성하기 위해 파이썬 버전을 확인해 보았다.

 

> root@83af37047023:/# python --version
Python 3.8.14

 

 

가상환경 내 home/work 폴더를 만들고 격리된 가상환경을 만들 수 있게

도와주는 라이브러리인 vertualenv를 설치해준다

 

> root@83af37047023:/home# mkdir work
> root@83af37047023:/home# ls
work
> root@83af37047023:/home# pip install virtualenv

 

#실행화면

불라불라 ~~~~

Installing collected packages: distlib, platformdirs, filelock, virtualenv

Successfully installed distlib-0.3.6 filelock-3.8.0 platformdirs-2.5.2 virtualenv-20.16.5

 

 

그 후 .venv라는 가상환경 관리 폴더를 생성해준다(가상환경을 .venv로 생성하겠다는.)

> root@83af37047023:/home# python -m venv .venv
> root@83af37047023:/home# ls -a

#실행화면

.  ..  .venv  work

 

 

또한, source 명령을 통하여 <가상환경폴더>/<bin>/activate 내용을 실행함 (가상환경 activate)

파이썬 위치를 확인해 보면 가상환경 파이썬으로 적용된 것을 확인 가능

 

>root@83af37047023:/home#  source ./.venv/bin/activate

# 아래와 같이 CLI에 (.venv)가 붙음을 확인할 수 있다

>(.venv) root@83af37047023:/home#

 

>(.venv) root@83af37047023:/home#  which python

#실행화면

/home/.venv/bin/python

 

 

이제, 가상환경을 만들 었으니 패키지를 다운로드 하겠다. (개인의 필요에 맞게 설치!)

혹시 모를 버전 충돌 방지차 pip 버전 업그레이드 하였다.

> pip install --upgrade pip
> pip install jupyter notebook
# (or jupyterlab)

 

주피터 노트북으로 진행하지만 주피터랩도 가능함

※ 참고

apt-get(Advanced Packaging Tool)은 우분투(Ubuntu)를 포함안 데비안(Debian)계열의 리눅스에서 쓰이는 팩키지 관리 명령어 도구임
패키지 인덱스 인덱스 정보를 업데이트 : apt-get은 인덱스를 가지고 있는데 이 인덱스는 /etc/apt/sources.list에 있음. 이곳에 저장된 저장소에서 사용할 패키지의 정보를 얻습니다.
apt-get update  (sudo)

#########################################

 

vi에디터를 설치한다

> apt-get update
> apt-get install vim

 

주피터 설정파일을 생성하고 생성된 경로를 확인한다

>(.venv) root@83af37047023:/home# jupyter notebook --generate-config -y

#실행화면
Writing default config to: /root/.jupyter/jupyter_notebook_config.py

 

주피터 설정파일을 수정해준다

> (.venv) root@83af37047023:/home# ipython
Python 3.8.14 (default, Sep 13 2022, 15:03:48)
Type 'copyright', 'credits' or 'license' for more information
IPython 8.5.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'argon2:$argon2id$v=19$m=10240,t=10,p=8$y13YZXkWLtTjMqiEceSd3g$mD40u1ipilR1PahcOUxY93zrZDdVw7C21N9E4RjOJ3g'

 

ctrl+z 로 ipython을 종료한다(이때 가상환경자체가 종료되니까 다시 접속해줘야함)

도커 ps로 컨테이너 확인 후,

docker ps -a

CONTAINER ID   IMAGE        COMMAND     CREATED          STATUS          PORTS                    NAMES
83af37047023   python:3.8   "python3"   48 minutes ago   Up 48 minutes   0.0.0.0:5001->5001/tcp   practice_make_server

 

도커 exec로 다시 접속하는데,

docker exec -it {containerId} /bin/bash

이 때 containerid가 원래는 83af37047023로 길지만, 83af까지만 적어줘도 인식한다

>docker exec -it 83af /bin/bash

 

다시 bash에 들어온 모습

>root@83af37047023:/#

 

vi 에디터를 실행하고

# vi ~/.jupyter/jupyter_notebook_config.py

]]를 입력하여 가장 맨 밑줄로 이동& i를 통해 입력모드로 진입한 후

본인의 정보에 맞게 작성한다

 

#Q) 여기서 로컬호스트라고 써도되는가? port를 5001번으로 했는데

c=get_config()

c.NotebookApp.ip='localhost'
c.NotebookApp.open_browser=False
c.Notebook.App.password='argon2:$argon2id$v=19$m=10240,t=10,p=8$y13YZXkWLtTjMqiEceSd3g$mD40u1ipilR1PahcOUxY93zrZDdVw7C21N9E4RjO3g'
c.Notebook.App.password_required=True
c.Notebook.App.port=5001
c.Notebook.iopub_date_rate_limit=1.0e10
c.NotebookApp.terminado_settings={'shell_command': ['/bin/bash']} # termianl을 bash로 실행

 

 

esc 후 :wq를 입력하여 vim에디터를 종료한다

 

 

쥬피터 접속확인

쥬피터 서버 실행 시 백그라운드에서 서버가 돌수 있게 백그라운드 모드로 실행함

(만약 기존 쥬피터 노트북 실행하던 것처럼 하고자 한다면 nohup &을 빼줌)

쥬피터 노트북을 로컬호스트로 root권한을 부여하여 실행함. 810으로 실행됨

>root@83af37047023:/# nohup jupyter notebook --ip 0.0.0.0 --allow-root &
[1] 810

 

#nohup으로 실행할 때는 엔터를 두번치기!

 

ps -ef로 한 번 더 확인해줌

>root@83af37047023:/# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 07:19 pts/0    00:00:00 python3
root         7     0  0 07:26 pts/1    00:00:00 bin/bash
root       477     7  0 08:02 pts/1    00:00:01 /home/.venv/bin/python /home/.venv/bin/ipython
root       803     0  0 08:08 pts/2    00:00:00 /bin/bash
root       811   803  0 08:23 pts/2    00:00:00 ps -ef

 

쥬피터 접속

브라우저 실행하여 127.0.0.1:자신의포트번호 혹은 localhost:포트번호   로 접속

아까 설정한 패스워드 입력

 

 

이미지 파일 save하기부터 다시~

 

 

 

해당 포스트는

https://velog.io/@rsj9987/Docker-%ED%99%9C%EC%9A%A9%ED%95%98%EC%97%AC-%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%84%9C%EB%B2%84%EC%97%90-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%99%98%EA%B2%BD-%EB%A7%8C%EB%93%A4%EA%B8%B0%EC%A3%BC%ED%94%BC%ED%84%B0-%EC%84%9C%EB%B2%84

 

Docker 활용하여 리눅스 서버에 파이썬 환경 만들기(주피터 서버)

Doker + jupyter notebook server 이미지 생성 및 환경 구성 쉽게 이해해보기

velog.io

블로그를 참고하여 공부형식으로 따라해 본 포스트 입니다.