[Docker] Volume & Mount (볼륨/마운트) feat. JupyterLab

Seongkeun·2023년 3월 2일
1

docker

목록 보기
4/5
post-thumbnail

도커 개념 몰아보기
도커의 개념에 대해 한번에 몰아보고 싶다면 위 링크를 참고하면 된다

사용 환경

  • Ubuntu 22.04 LTS
  • Docker version 23.0.1

도커 커맨드 한 호흡에 몰아치기

내 로컬에 ~/dprc/jupyter 이라는 python 디렉토리가 있다고 가정하고 도커에서 이 디렉토리와 연동하려고 한다

docker run -it -p 10880:8888 -v ~/dprc/jupyter:/workdir python:3.11 bash -c "pip install jupyterlab && jupyter lab --ip 0.0.0.0 --port 8888 --no-browser --allow-root"

위 커맨드를 실행하면, 내 경로 ~/dprc/jupyter 와 연동된 컨테이너가 생성되고 Jupyter Lab이 실행된다.
브라우저에서 localhost:10880 주소로 접속해서 Jupyter Lab 을 사용할 수 있다.
그리고 내 로컬의 디렉토리와 연동된 것을 Bind Mount(바인드 마운트) 라고 부른다. 이 와는 비슷하게 Volume Mount(볼륨 마운트) 라는 것도 있다. 이 것은 스크롤을 조금 더 내리다보면 찾아 볼 수 있다.

또한, 콘솔에 다음과 같은 메시지가 표시된다.

[I 09:40:15.998 LabApp] JupyterLab extension loaded from /usr/local/lib/python3.11/site-packages/jupyterlab
[I 09:40:15.999 LabApp] JupyterLab application directory is /usr/local/share/jupyter/lab
[I 09:40:16.004 LabApp] Serving notebooks from local directory: /workdir
[I 09:40:16.004 LabApp] Jupyter Notebook 6.4.5 is running at:
[I 09:40:16.005 LabApp] http://(27c84cb85dd5 or 127.0.0.1):8888/?token=3149b9a74b964d16eb8a28b2a7467c8193f2f1d8d100b46a
[I 09:40:16.005 LabApp]  or http://127.0.0.1:8888/?token=3149b9a74b964d16eb8a28b2a7467c8193f2f1d8d100b46a
[I 09:40:16.005 LabApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 09:40:16.011 LabApp]

    To access the notebook, open this file in a browser:
        file:///root/.local/share/jupyter/runtime/nbserver-7-open.html
    Or copy and paste one of these URLs:
        http://(27c84cb85dd5 or 127.0.0.1):8888/?token=3149b9a74b964d16eb8a28b2a7467c8193f2f1d8d100b46a
     or http://127.0.0.1:8888/?token=3149b9a74b964d16eb8a28b2a7467c8193f2f1d8d100b46a

http://(27c84cb85dd5 or 127.0.0.1):8888/?token=3149b9a74b964d16eb8a28b2a7467c8193f2f1d8d100b46a

  • 토큰 값이 URL에 포함되어 있음
    이 토큰 값을 입력하면 Jupyter Lab에 로그인할 수 있다.

  • 만약, 토큰 값을 분실했거나 변경하고 싶다면, 아래 명령어를 통해 새로운 토큰 값을 생성할 수 있다

docker exec <CONTAINER ID or NAME> jupyter notebook list

위 명령어를 실행하면, 현재 실행 중인 Jupyter Notebook의 목록이 표시된다.
이 목록에서 Jupyter Lab의 URL과 토큰 값을 확인할 수 있다.

종료했던 도커 컨테이너를 다시 시작하려면 아래의 명령어를 사용하면 된다.

docker start -i <CONTAINER ID or NAME>

도커 커맨드의 이해

docker run -it -p 10880:8888 -v ~/dfrc/jupyter:/workdir python:3.11 bash -c "pip install jupyterlab && jupyter lab --ip 0.0.0.0 --port 8888 --no-browser --allow-root"

위의 도커 커맨드를 파헤쳐보자

  • docker run : Docker 컨테이너를 실행하는 명령어

  • -it : -i-t 를 합친 옵션으로, Docker 컨테이너를 대화형으로 실행하는 것.

    • -i : 입력을 가능하게 함
    • -t : tty 를 할당

    -i 옵션만 사용하면 입력은 가능하지만, 터미널에 tty 가 할당되지 않아 터미널 색상 등의 효과가 적용되지 않는다.

    -t 옵션만 사용하면, 터미널 색상 등의 효과는 적용되지만, 입력이 불가능하다.

    즉, -it 옵션을 사용하면 입력 가능한 예쁜 터미널 화면을 볼 수 있다

  • -p 10880:8888 : 호스트의 10880번 포트와 컨테이너의 8888번 포트를 연결한다. 따라서, 로컬 시스템에서 localhost:10880 주소로 접속하면 컨테이너의 Jupyter Lab에 접속할 수 있다.

  • -v ~/dprc/jupyter:/workdir : 호스트의 ~/dprc/jupyter 디렉토리와 컨테이너의 /workdir 디렉토리를 연결한다. 로컬 시스템의 파일들을 컨테이너에서 사용할 수 있다.

  • python:3.11 : 사용할 Docker 이미지 이름

  • bash -c "pip install jupyterlab && jupyter lab --ip 0.0.0.0 --port 8888 --no-browser --allow-root" : bash -c 명령어를 사용해서 shell script 를 실행한다. 그 뒤로는 컨테이너에서 실행할 명령어.

    • pip install jupyterlab : 명령어를 실행하여 Jupyter Lab을 설치

    • jupyter lab --ip 0.0.0.0 --port 8888 --no-browser --allow-root : Jupyter Lab 을 실행

      • --ip : 외부에서 접속할 IP를 설정하는 옵션 0.0.0.0 으로 설정하면 어떤 IP에서든 접속이 가능

      • --port : Jupyter Lab 이 사용할 포트를 설정하는 옵션

      • --no-browser : Jupyter Lab을 실행할 때, 브라우저를 자동으로 열지 않도록 설정하는 옵션

      • --allow-root : root 계정에서 Jupyter Lab을 실행할 수 있도록 허용하는 옵션. 이 옵션이 없으면, 일반 계정에서 Jupyter Lab을 실행할 때 경고 메시지가 나타난다.

도커 커맨드 천천히 따라하기

# 1. Python 3.11 이미지 다운로드
docker pull python:3.11

# 2. Docker 이미지 목록 확인
docker images

# 3. Docker 컨테이너 실행
# -v 부터는 마운트하는 부분이니 본인이 원하는 디렉토리로 넣으면 됨
# 마운트 할 머신의 디렉토리(로컬):현재 컨테이너 디렉토리
docker run -d -it --name python_general -p 10880:8888 -v ~/dprc/jupyter:/workdir python:3.11

# 4. Docker 컨테이너 목록 확인
docker ps -a

# 5. Docker 컨테이너에 접속
docker exec -it python_general bash

# 6. Python 버전 확인
python --version

# 7. 작업 디렉토리 생성
cd workdir
mkdir workspace

# 8. 가상환경 설치
pip install virtualenv
python -m venv .venv
source .venv/bin/activate

# 9. Jupyter Lab 실행
nohup jupyter lab --ip 0.0.0.0 --allow-root &

# 10. 종료했다가 다시 컨테이너에 접속할 때
docker start -i <CONTAINER ID or NAME>

# 11. 실행중인 컨테이너에 bash를 사용해서 접속할 때
docker exec -it <CONTAINER ID or NAME> /bin/bash

위 3번에서 -v 를 활용해서 로컬 머신의 ~/dprc/jupyter 디렉토리를 현재 도커 컨테이너의 /workdir 에 마운트 한다

도커 볼륨

# 1. 볼륨 생성
docker volume create my-volume

# 2. 컨테이너 실행
# -v 옵션을 통해 생성한 볼륨을 컨테이너에 마운트 할 수 있다.
# 위의 로컬 머신을 마운트할 때와 같다
# 예시) -v <volume-name>:<container-path>
docker run -it -v my-volume:/data python:3.11 bash

# 3. 볼륨에 데이터 저장
echo "Hello, World!" > /data/hello_python.txt

# 4. 호스트 시스템에서 볼륨 정보 확인
docker volume inspect my-volume

# 5. 볼륨 삭제
docker volume rm my-volume
profile
지혜는 지식에서 비롯된다

0개의 댓글