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하기부터 다시~
해당 포스트는
Docker 활용하여 리눅스 서버에 파이썬 환경 만들기(주피터 서버)
Doker + jupyter notebook server 이미지 생성 및 환경 구성 쉽게 이해해보기
velog.io
블로그를 참고하여 공부형식으로 따라해 본 포스트 입니다.
'Docker' 카테고리의 다른 글
[docker] 생성한 이미지 사용법 (0) | 2023.01.31 |
---|---|
도커 사용 시 문제 발생 (0) | 2022.09.17 |
도커 compose사용법 (0) | 2022.09.17 |
docker rmi all none images (0) | 2022.09.16 |