도커 개념 몰아보기
도커의 개념에 대해 한번에 몰아보고 싶다면 위 링크를 참고하면 된다
내 로컬에
~/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