기본 OS 선택
나는 평소에 ubuntu:20.04를 사용하기 때문에, ubuntu20.04 버전을 설정했다.
FROM ubuntu:20.04
미러 서버 변경
그리고 미러서버를 기존의 서버에서 카카오 서버로 바꾸어 다운로드 속도를 증가시켰다.
# 카카오 ubuntu archive mirror server 추가. 다운로드 속도 향상
RUN sed -i 's@archive.ubuntu.com@mirror.kakao.com@g' /etc/apt/sources.list && \
apt-get update
라이브러리 설치
그리고 필요한 라이브러리들을 설치한다.
RUN apt-get install -y --no-install-recommends \
wget \
curl \
git \
bzip2\
build-essential \
zlib1g-dev \
libncurses5-dev \
libgdbm-dev \
libnss3-dev \
libssl-dev \
libreadline-dev \
libffi-dev
빌드하는 도중
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/jupyter_server/services/sessions/sessionmanager.py", line 14, in <module>
import sqlite3
File "/usr/local/lib/python3.10/sqlite3/__init__.py", line 57, in <module>
from sqlite3.dbapi2 import *
File "/usr/local/lib/python3.10/sqlite3/dbapi2.py", line 27, in <module>
from _sqlite3 import *
ModuleNotFoundError: No module named '_sqlite3'
Traceback (most recent call last):
File "/usr/local/bin/jupyter-notebook", line 5, in <module>
from notebook.app import main
File "/usr/local/lib/python3.10/site-packages/notebook/app.py", line 17, in <module>
from jupyter_server.serverapp import flags
File "/usr/local/lib/python3.10/site-packages/jupyter_server/serverapp.py", line 97, in <module>
from jupyter_server.gateway.managers import (
File "/usr/local/lib/python3.10/site-packages/jupyter_server/gateway/managers.py", line 32, in <module>
from ..services.sessions.sessionmanager import SessionManager
File "/usr/local/lib/python3.10/site-packages/jupyter_server/services/sessions/sessionmanager.py", line 17, in <module>
from pysqlite2 import dbapi2 as sqlite3 # type:ignore[no-redef]
ModuleNotFoundError: No module named 'pysqlite2'
이런 오류가 발생하였다.
jupyter 관련 문제라는데,
sqlite3 libsqlite3-dev
이 두개를 설치해 줌으로서 해결했다.
파이썬 설치
파이썬을 설치한다.
나는 평소에 파이썬 3.10.13 버전을 사용하기에 그것에 맞춰 설치했다.
# 파이썬 설치
RUN wget https://www.python.org/ftp/python/3.10.13/Python-3.10.13.tgz && \
tar xzf Python-3.10.13.tgz && \
cd Python-3.10.13 && \
./configure --enable-optimizations && \
make altinstall
파이썬 파일을 다운로드 하는데 문제가 발생했다.
ERROR: failed to solve: process "/bin/sh -c wget https://www.python.org/ftp/python/3.10.13/Python-3.10.13.tgz && tar xzf Python-3.10.13.tgz && cd Python-3.10.13 && ./configure --enable-optimizations && make altinstall" did not complete successfully: exit code: 5
이런 문제가 발생했다.
GPT 왈,
이 오류는 SSL/TLS 인증서의 검증에 실패하여 발생한 것으로 보입니다. Python 공식 웹사이트는 SSL/TLS 인증서를 사용하여 암호화된 연결을 제공하는데, 해당 연결에서 인증서를 검증할 수 없어서 발생한 문제입니다.
라고 한다.
주소 앞에 --no-check-certificate
를 붙여주어 해결했다.
RUN wget --no-check-certificate https://www.python.org/ftp/python/3.10.13/Python-3.10.13.tgz && \
tar xzf Python-3.10.13.tgz && \
cd Python-3.10.13 && \
./configure --enable-optimizations && \
make altinstall
그리고 이렇게 설치하면 python 명령어가 아닌 python3.10, pip3.10을 사용해야 하는데, 그건 너무 귀찮으니까 python명령어로 바꿔준다.
# python3.10 -> python & pip3.10 -> pip
RUN update-alternatives --install /usr/local/bin/python pyhon /usr/local/bin/python3.10 1 && \
update-alternatives --install /usr/local/bin/pip pip /usr/local/bin/pip3.10 1
그리고 가상환경을 만들어주고 실행한다.
# venv 가상환경 생성 및 실행
RUN python -m venv venv && \
source venv/bin/activate
가상환경을 만드는데 문제가 발생했다.
ERROR: failed to solve: process "/bin/sh -c python -m venv venv && source venv/bin/activate" did not complete successfully: exit code: 127
source 명령어를 찾을 수 없어서였다.
RUN python -m venv venv && \
. venv/bin/activate
패키지 설치
이제 패키지들을 설치한다.
나는 데이터 분석을 기준으로 필요한 패키지들을 설치했다.
# 패키지 설치
RUN pip install setuptools && \
pip install mkl && \
pip install pymysql && \
pip install numpy && \
pip install scipy && \
pip install pandas && \
pip install matplotlib && \
pip install seaborn && \
pip install hyperopt && \
pip install optuna && \
pip install missingno && \
pip install mlxtend && \
pip install catboost && \
pip install kaggle && \
pip install folium && \
pip install librosa && \
pip install nbconvert && \
pip install Pillow && \
pip install tqdm && \
pip install wordcloud
그 외 기타 라이브러리, 패키지, 원격 접속을 위한 jupyter를 설치한다.
RUN apt-get install -y graphviz && \
apt-get install -y graphviz-dev && \
pip install pygraphviz
RUN apt-get update
RUN pip install graphviz && \
pip install cupy-cuda11x
RUN pip install -U "ipython[all]"
RUN pip install jupyter jupyterlab notebook jupyterthemes ipywidgets
ENV PATH=/usr/local/bin:${PATH}
폰트 변경
그래프를 그릴때, 한글을 쓰기 위해 폰트를 설치해 준다.
# 나눔고딕 폰트 설치
# matplotlib에 Nanum 폰트 추가
RUN apt-get update && apt-get install fonts-nanum*
RUN cp /usr/share/fonts/truetype/nanum/Nanum* /opt/conda/envs/py39/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/ && \
fc-cache -fv && \
rm -rf ~/.cache/matplotlib/*
cp 명령어에서 문제가 발생했다.
ERROR: failed to solve: process "/bin/sh -c cp /usr/share/fonts/truetype/nanum/Nanum* /opt/conda/envs/py39/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/ && fc-cache -fv && rm -rf ~/.cache/matplotlib/*" did not complete successfully: exit code: 1
폴더가 없다고 하더라.
폴더를 만들고 넣어주었다.
RUN mkdir -p /opt/conda/envs/py39/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf && \
cp /usr/share/fonts/truetype/nanum/Nanum* /opt/conda/envs/py39/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/ && \
fc-cache -fv && \
rm -rf ~/.cache/matplotlib/*
마무리
ENV LANG ko_KR.UTF-8
# 기본
EXPOSE 8888
언어 설정과 jupyter 포트 8888을 설정해 주었다.
최종 도커 파일
# local 빌드시
FROM ubuntu:20.04
# 카카오 ubuntu archive mirror server 추가. 다운로드 속도 향상
RUN sed -i 's@archive.ubuntu.com@mirror.kakao.com@g' /etc/apt/sources.list && \
apt-get update
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get install -y --no-install-recommends \
wget \
curl \
git \
bzip2\
build-essential \
zlib1g-dev \
libncurses5-dev \
libgdbm-dev \
libnss3-dev \
libssl-dev \
libreadline-dev \
libffi-dev \
sqlite3 \
libsqlite3-dev
RUN apt update
# 파이썬 설치
RUN wget --no-check-certificate https://www.python.org/ftp/python/3.10.13/Python-3.10.13.tgz && \
tar xzf Python-3.10.13.tgz && \
cd Python-3.10.13 && \
./configure --enable-optimizations && \
make altinstall
# python3.10 -> python & pip3.10 -> pip
RUN update-alternatives --install /usr/local/bin/python pyhon /usr/local/bin/python3.10 1 && \
update-alternatives --install /usr/local/bin/pip pip /usr/local/bin/pip3.10 1
# venv 가상환경 생성 및 실행
RUN python -m venv venv && \
. venv/bin/activate
RUN apt-get update
RUN pip install --upgrade pip
# 패키지 설치
RUN pip install setuptools && \
pip install mkl && \
pip install pymysql && \
pip install numpy && \
pip install scipy && \
pip install pandas && \
pip install matplotlib && \
pip install seaborn && \
pip install hyperopt && \
pip install optuna && \
pip install missingno && \
pip install mlxtend && \
pip install catboost && \
pip install kaggle && \
pip install folium && \
pip install librosa && \
pip install nbconvert && \
pip install Pillow && \
pip install tqdm && \
pip install wordcloud
RUN apt-get update
RUN apt-get install -y graphviz && \
apt-get install -y graphviz-dev && \
pip install pygraphviz
RUN apt-get update
RUN pip install graphviz && \
pip install cupy-cuda11x
RUN pip install -U "ipython[all]"
RUN pip install jupyter jupyterlab notebook jupyterthemes ipywidgets
ENV PATH=/usr/local/bin:${PATH}
# 나눔고딕 폰트 설치
# matplotlib에 Nanum 폰트 추가
RUN apt-get update && apt-get install fonts-nanum*
RUN mkdir -p /opt/conda/envs/py39/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf && \
cp /usr/share/fonts/truetype/nanum/Nanum* /opt/conda/envs/py39/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/ && \
fc-cache -fv && \
rm -rf ~/.cache/matplotlib/*
RUN apt-get update
ENV LANG ko_KR.UTF-8
# 기본
EXPOSE 8888
빌드 및 이미지 저장
이제 빌드해보자
docker build -f (도커 파일 이름) -t (만들고 싶은 이미지 명) .
참고로 이미지 명은(도커 ID)/기타 설명:버전
이런식으로 만들어야 도커 허브에 업로드 할 때 문제가 생기지 않는다.
docker build -f basepython.Dockerfile -t chaosapic/base_python:latest .
이러면 이미지가 생성된다.
jupyter 서버 실행
이제 jupyter 서버를 실행해 보자.
docker run -itd -p 8888:8888 -v (호스트의 폴더 경로):/home/jupyter (이미지 명) jupyter notebook --allow-root --ip=0.0.0.0 --port=8888 --no-browser --NotebookApp.password= --notebook-dir=/home/jupyter
그리고 docker ps
를 치면
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9c9a0e250b8e chaosapic/base_python:latest "jupyter notebook --…" 4 seconds ago Up 4 seconds 0.0.0.0:8888->8888/tcp clever_hellman
이런식으로 정상적으로 실행준인 모습을 볼 수 있고
docker logs (컨테이너 ID)
를 치면
이렇게 jupyter 서버의 주소가 나온다 이것을 치고 들어가면
서버에 잘 들어가지는 것을 확인 할 수 있다.
그리고 파일을 하나 만들어 패키지 설치와 폰트 설치 확인을 해 보면
잘 설치가 된 것을 확인 할 수 있다.
그리고 마운트도 확인해 보면
잘 된것을 확인 할 수 있다!
vscode와 연동하기
만약 jupyter는 서버로만 열고, 작업은 vscode에서 하고 싶다면
- vscode jupyter 파일의 오른쪽에 커널선택
- 기존 jupyter 서버
- jupyter 서버의 주소를 입력한다.
그러면 이렇게 jupyter 서버와 연결된 것을 볼 수 있다.
'코딩 > 기타' 카테고리의 다른 글
wsl2 설치부터 cuda까지 (0) | 2024.04.15 |
---|---|
Office 365 원하는 프로그램만 설치 (0) | 2024.04.14 |
wsl 우분투 cuda 설치 (1) | 2023.11.27 |
wsl 우분투 파이썬 버전 변경 (1) | 2023.11.26 |
[파이썬/우분투/wsl] webrtcvad 설치 오류 (0) | 2023.10.10 |