Docker란 무엇인가? Mac에서 Docker 설치하기 리눅스 컨테이너 올리기
1. 세줄요약
01. Docker를 사용해봤다.
02. Docker Hub에 많은 image들이 있다.
03. 나와 맞는 image를 검색하기 어려워 dockerfile을 통해 직접 build해서 실행해봤다.
2. 내용
(1) Docker란 무엇인가?
지금까지 IT를 해오면서 주로 시스템을 개발하는 일들을 해왔습니다. 서버 개발자가 아니다보니 서버환경을 구축해본 적이 없었습니다. 또 윈도우 기반에서만 개발하다보니 리눅스가 멀게 느껴졌습니다. 그러던 중 요즘같이 마이크로한 sLLM들이 우후죽순 등장하기 시작하면서 리눅스 환경에서, 윈도우 환경에서, Jupyterlab환경에서, python3.11 환경에서 등등 다양한 환경에 맞는 서버 환경을 구축해야하더라구요. 그래서 말로만 듣던 Docker에 대해서 관심이 생겼습니다. Docker hub란 곳에서 개발자나 공식 단체에서 올린 image를 pull하기만 하면 원하는 컨테이너 환경을 바로 구축할 수 있다고 합니다.
그럼 sLLM을 구축하기 위해서 Docker를 만들고 컨테이너를 올려서 image를 pull하는 테스트를 진행해보겠습니다.
(2) Docker 로그인 및 설치
먼저 Docker에 로그인하고 Docker를 다운 받았습니다.
(3) Container만들기
Docker Desktop에서 container를 만들었습니다. 그럼 localhost 8088포트로 만들어졌다고 알려주네요.
Docker Container를 만들었으니 이번엔 개발자분들이 만든 리눅스환경의 jupyterlab image를 pull해볼게요!
(4) Docker Hub에서 내가 원하는 Image 찾기
hub.docker.com에 접속하면 검색해볼 수 있습니다. Ollama도 있고, LLM도 있고 다양하네요!
그럼 여기서 LLM과 관련있는 image가 있는지 검색해보겠습니다.
찾아봤는데 마음에 드는게 없군요....
아무래도 Dockerfile을 만들어서 직접 build해보는게 제게 좋을 것 같습니다.
(5) Docker build하기
# Step 1: 베이스 이미지로 우분투를 사용합니다.
FROM ubuntu:latest
# Step 2: 필요한 패키지 설치
RUN apt-get update && apt-get install -y \
wget \
curl \
bzip2 \
ca-certificates \
sudo \
git \
libxext6 \
libsm6 \
libxrender1 \
locales \
nano \
vim \
software-properties-common
# Step 3: Python 3.11 설치
RUN add-apt-repository ppa:deadsnakes/ppa && \
apt-get update && \
apt-get install -y python3.11 python3.11-venv python3.11-dev
# Step 4: Miniconda 설치 (ARM64 호환)
RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh -O /tmp/miniconda.sh && \
bash /tmp/miniconda.sh -b -p /opt/conda && \
rm /tmp/miniconda.sh && \
/opt/conda/bin/conda clean --all --yes
# Step 5: 환경 변수 설정
ENV PATH /opt/conda/bin:$PATH
# Step 6: JupyterLab 설치
RUN conda install -y jupyterlab
# Step 7: 작업 디렉토리 설정
WORKDIR /workspace
# Step 8: 컨테이너 실행 시 JupyterLab 실행
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--allow-root", "--no-browser"]
이렇게 입력한다음에 dockerfile을 build합니다.
docker build . -t image
이렇게 입력하면 image라는 이름을 가진 image가 만들어져요!
다시 콘솔에서 아래와 같이 jupyter 8888포트를 맵핑합니다.
docker run -p 8888:8888 -v $(pwd)/workspace:/workspace image
명령어에 대한 설명은 아래와 같습니다.
- docker run:
- Docker 컨테이너를 실행하기 위한 기본 명령어입니다.
- -p 8888:8888:
- 포트 매핑을 지정합니다. 호스트 머신(로컬 컴퓨터)의 포트 8888을 컨테이너의 포트 8888에 매핑합니다. 이를 통해 호스트 머신에서 컨테이너 내부의 JupyterLab 서버에 접근할 수 있습니다.
- -v $(pwd)/workspace:/workspace:
- 볼륨 마운트를 지정합니다. 호스트 머신의 현재 디렉토리($(pwd))에 있는 workspace 폴더를 컨테이너의 /workspace 디렉토리에 마운트합니다. 이렇게 하면 호스트와 컨테이너 간에 파일을 공유할 수 있습니다.
- $(pwd)는 현재 디렉토리의 절대 경로를 의미합니다. 예를 들어, 현재 디렉토리가 /Users/username/project라면 $(pwd)는 /Users/username/project가 됩니다.
- image:
- 실행할 Docker 이미지의 이름입니다. 예제에서는 image라는 이름의 Docker 이미지를 실행합니다. 실제로는 빌드한 이미지의 이름을 사용해야 합니다. 예를 들어, my-ubuntu-python-jupyter라는 이름으로 이미지를 빌드했다면 image 대신 my-ubuntu-python-jupyter를 사용합니다.
(6) jupyter 환경 등장!
짜잔! 컨테이너에 실행시켜보니 URL을 제공해주는데 클릭해보면 Jupyterlab이 실행된 것을 확인할 수 있습니다.
3. 마치며
이번 시간은 Docker에서 원하는 환경들을 가져와 build하는 법을 살펴보았습니다.
현재 sLLM들이 많이 출시되서 이와 관련한 다양한 서버환경을 Docker를 통해 구축해볼 수 있겠네요.
질문이 있으시면 언제든 댓글 남겨주세요! 답변드리겠습니다. 같이 공부합시다^^
이 글을 보는 모든 분들 오늘 하루가 행복하시길 바랍니다.
감사합니다.