Docker Image 만들기

Docker Image 만드는 방법은 다음과 같이 두 가지 방법이 있다
1. Dockerfile을 통해 직접 만들어 Build 하기
2. 이미 있는 Docker Image 를 가져와서 Commit 하기
작업효율을 위해 VSC에서 작업을 하고 있다면

이 Extension 다운 받기로 하자 (둘 다)

간혹 이렇게 연결이 안될 때가 있는데
.ssh에 있는 known_hosts.old 와 known_hosts 의 해당 IP 캐시를 지워주고

vscode-server를 지워주면
rm -rf ~/.vscode-server
제대로 권한이 먹히게 된다
1. Docker image를 가져와서 작업 후 Commit
기존에 있는 이미지를 가져와서 변경 후 새로운 이미지로 만드는 것 (굳이 Dockerfile을 만들 필요 없음)
python:3.10.19로 예시를 들면
1. 이미지 가져오기
docker pull python:3.10.19
관련된 이미지 들은 DockerHub 를 참고하자
2. 이미지 실행하기
docker run [옵션] <도커 이미지 이름>
docker run -it --name my-python python:3.10.19 bash
-it는 바로 터미널을 컨테이너 안으로 이동시키고
bash는 container 실행을 유지하기 위함
이후 하고 싶은 작업들을 해주면 된다
3. Container 밖에서 commit
docker commit [옵션] <컨테이너ID 또는 이름> <새로운_이미지_이름>
docker commit python:3.10.19 harams:custom_python
2. Dockerfile을 만들어서 직접 image 만들기
Dockerfile을 다음과 같이 만들어 주자 (복붙하고 수정하는 것도 방법이다)
#Dokerfile
FROM nvidia/cuda:11.8.0-runtime-ubuntu22.04
ENV NVIDIA_VISIBLE_DEVICES=0
EXPOSE 8501
WORKDIR /app
COPY . /app
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PYTHONPATH=/app
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update
RUN apt-get -y install sudo
RUN apt-get install -y software-properties-common
ENV PYTHON_VERSION=3.10
RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt-get update
RUN apt-get install -y python${PYTHON_VERSION} python3-pip python3-venv curl
RUN apt-get install -y libpython${PYTHON_VERSION}-dev
RUN apt-get update
RUN rm /usr/bin/python3 && ln -s /usr/bin/python${PYTHON_VERSION} /usr/bin/python3
RUN rm -rf /var/lib/apt/lists/*
RUN python3 -m pip install --upgrade pip
RUN python3 -m pip install --no-cache-dir --ignore-installed -r requirements.txt
RUN python3 --version && pip --version
CMD ["streamlit","run","sql_agent_webapp.py", "--server.address=0.0.0.0", "--server.port=8501"]
Dockerfile 설명
베이스가 될 이미지를 가져온다
FROM nvidia/cuda:11.8.0-runtime-ubuntu20.04
사용할 GPU Index를 지정한다
ENV NVIDIA_VISIBLE_DEVICES=0
작업할 위치를 지정(cd 경로, cd.... 이런거 라고 생각하면 된다)
WORKDIR /app
이거 적어주면 추가적인 기능이 컨테이너 열었을 때 저 경로로 열어준다는 것이다
- 작업 디렉토리를 지정 (이게 없으면 root 디렉토리가 Default로 지정됨)
- 이러면 root 디렉토리가 정신 없어지기 때문에 WORKDIR 을 정해서 여기서 관리되도록 하는 것이다
- 이거 아래 있는 모든 명령어 (RUN, COPY)등은 /app 디렉토리 기준으로 실행가게 된다
현재의 디렉토리를 컨테이너 내부로 옮겨준다
COPY . /app
COPY [복사하고 싶은 로컬 디렉토리] [컨테이너 내부 디렉토리] #없으면 만들어 줌
여기에서 . 의 의미는 현재 폴더 전체를 뜻하고, docker build 명령을 실행할 때 지정한 폴더 안의 경로만 사용할 수 있다는 뜻이다.
- 이래서 COPY의 첫 번째 인자는 항상 빌드 컨텍스트 기준의 상대경로여야 한다
- docker build 하는 폴더의 위치에서 부터 고려
python 환경 설정
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PYTHONPATH=/app
PYTHONPATH는 import sys 와 같이 라이브러리 들을 사용할 때 모듈이 필요한데
이 모듈을 python이 찾을 때 폴더를 /app 도 찾아라 라고 하는 것이다
- 이 app 외에도 딴 곳에서 여기서 만든 모듈을 쓸 수 있게 하겠다 인데 사실 굳이 안써도 된다
- python을 사용하는 Docker Project에는 아래와 같이 관습적으로 사용하는 것 같다
대화형 방식의 terminal 방지
ENV DEBIAN_FRONTEND=noninteractive
필수 패키지 설치 (sudo, nano)
RUN apt-get -y install sudo nano
python 설치 (원하는 버전으로)
ENV PYTHON_VERSION=3.10
RUN apt-get install -y software-properties-common
RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt-get update
RUN apt-get install -y python${PYTHON_VERSION} python3-pip python3-venv curl
RUN apt-get install -y libpython${PYTHON_VERSION}-dev
RUN apt-get update
# # # symlink를 업데이트(Python 3.10을 기본 python3로 설정)
RUN rm /usr/bin/python3 && ln -s /usr/bin/python${PYTHON_VERSION} /usr/bin/python3
# apt 캐시 정리
RUN rm -rf /var/lib/apt/lists/*
pip 업그레이드
RUN python3 -m pip install --upgrade pip
requirements.txt 설치
RUN python3 -m pip install --no-cache-dir --ignore-installed -r requirements.txt
--ignore-installed 옵션 : 기존 시스템 패키지를 무시하고 새 버전을 덮어씀
원하는 프로그램 실행
RUN python3 --version && pip --version
CMD ["streamlit","run","sql_agent_webapp.py", "--server.address=0.0.0.0", "--server.port=8501"]
streamlit 값이 외부와 소통을 해야하는 경우
server.address 와 port 옵션을 주도록 한다
(추가) pytorch 설치
pytorch 의 경우 링크로 해서 받는 것 보다 requirements.txt를 변경해서 받는 것이 제일 편하다
torch==2.4.0+cu118
torchaudio==2.4.0+cu118
torchvision==0.19.0+cu118
이런식으로 되어있으면 오류가 나오고
-extra-index-url 을 이용하여 수기로
toolz==0.12.1
--extra-index-url https://download.pytorch.org/whl/cu118
torch==2.4.0+cu118
--extra-index-url https://download.pytorch.org/whl/cu118
torchaudio==2.4.0+cu118
--extra-index-url https://download.pytorch.org/whl/cu118
torchvision==0.19.0+cu118
이렇게 바꿔주자
Docker Image 실행하기
'자주 보는 정리들' 카테고리의 다른 글
| [총정리] Pytorch로 AI 모델링을 하는데 필요한 모든 것 (0) | 2024.08.02 |
|---|---|
| Diffusion / Transformer 압축정리 (1) | 2023.07.13 |
| 가상환경 만들기 총정리 본 (pipenv virtualenv conda venv) (1) | 2023.06.06 |
| [Tips] 실무 혹은 작업환경에 필요한 Tip들 (0) | 2023.05.19 |
| [Robotics] ROS 압축정리 : ROS환경 설정 ~ ROS Topic까지 (0) | 2023.04.18 |