Dockerfile 로 빌드하는 방법
Dockerfile 을 이용해서 Docker Image 를 build 하는 방법과 팁을 적어둠
Dockerfile
Dockerfile 은 Docker 이미지를 생성하기 위한 스크립트 파일로, 이미지 빌드에 필요한 명령어와 설정을 포함하고 있다. 이를 통해 컨테이너 생성을 자동화하고, 이미지의 구성 내용을 명확히 할 수 있다.
Dockerfile 의 구성 요소
FROM
- 베이스 이미지를 지정한다.
- Docker Hub 에서 원하는 Image 를 선택한 뒤 입력한다.
- 예 :
FROM ubuntu:18.04
RUN
- 쉘 명령어를 실행하여 새로운 레이어를 생성
- 주로 패키지 설치나 설정 작업에 사용
- 예 :
RUN apt update && apt install -y python
COPY
- 호스트 시스템의 파일을 컨테이너 이미지로 복사한다.
- 예 :
COPY ./app /usr/src/app
ADD
- 파일 복사 기능은
COPY와 유사하지만, 압축 파일을 자동으로 해제하거나 URL 에서 파일을 다운받을 수 있다 - 예 :
ADD archive.tar.gz /data
WORKDIR
- 컨테이너 내 작업 디렉토리를 설정한다.
- 디렉토리가 없으면 새로 생성된다.
- 예 :
WORKDIR /app
CMD
- 컨테이너가 시작될 때 실행할 기본 명령을 지정한다.
Dockerfile내에서 한번만 사용할 수 있다.- 예
CMD "python", "app.py"
ENTRYPOINT
CMD와 유사하지만 컨테이너 실행 시 고정된 명령으로 동작한다.- 예 :
ENTRYPOINT ["/root/anaconda3/bin/jupyter", "lab"]
ENV
- 환경 변수를 설정한다.
- 예 :
ENV PATH="/root/anaconda3/bin:${PATH}"
VOLUME
- 컨테이너와 호스트 간에 데이터를 공유할 디렉토리를 설정한다.
- 예 :
VOLUME /data
Dockerfile 예제
- Ubuntu 22.04 와 CUDA 11.8 런타임을 사용하고, Python 과 Anaconda 를 설치하여 Jupyter Lab 을 실행하는 Docker 이미지를 생성한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# Dockerfile
FROM nvidia/cuda:12.0.0-devel-ubuntu22.04
# 상호 작용 삭제
ARG DEBIAN_FRONTEND=noninteractive
# 로케일 설정
RUN apt-get update && \
apt-get install -y locales && \
localedef -i en_US -f UTF-8 en_US.UTF-8 && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
ENV LANGUAGE en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8
ENV LC_CTYPE en_US.UTF-8
ENV LC_MESSAGES en_US.UTF-8
# 필수 패키지 설치
RUN apt-get update && \
apt-get install -y \
python3 \
python3-dev \
libmariadb-dev \
libpq-dev \
net-tools \
wget \
nano \
vim \
lsof \
iputils-ping \
python3-pip && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Anaconda 설치 (인터넷에서 받아와야한다.)
WORKDIR /tmp
COPY ./Anaconda3-2024.02-1-Linux-x86_64.sh /tmp
RUN bash Anaconda3-2024.02-1-Linux-x86_64.sh -b -p /root/anaconda3 && \
rm Anaconda3-2024.02-1-Linux-x86_64.sh
# PATH 환경 변수 설정
ENV PATH="/root/anaconda3/bin:${PATH}"
# Conda 초기화 및 Jupyter 설치
RUN /root/anaconda3/bin/conda init bash && \
/root/anaconda3/bin/conda install -y jupyterlab jupyter
# Jupyter 설정 파일 생성
RUN jupyter notebook --generate-config
# Jupyter 설정 수정
## hash 값 빈칸으로 설정
RUN echo "c.ServerApp.password = "'argon2:$argon2id$v=19$m=10240,t=10,p=8$enVQgX8/LDFovYjt6d8Zow$3mBk4hCXSlQ+TO72Q8UHJ3rT8jqsL+9vpKY8dQ8ANBM'" >> /root/.jupyter/jupyter_notebook_config.py && \
echo "c.ServerApp.ip = '0.0.0.0'" >> /root/.jupyter/jupyter_notebook_config.py && \
echo "c.ServerApp.notebook_dir = '/data'" >> /root/.jupyter/jupyter_notebook_config.py && \
echo "c.ServerApp.allow_root = True" >> /root/.jupyter/jupyter_notebook_config.py && \
echo "c.ServerApp.open_browser = False" >> /root/.jupyter/jupyter_notebook_config.py && \
echo "c.ServerApp.terminado_settings = { 'shell_command': ['bash'] }" >> /root/.jupyter/jupyter_notebook_config.py && \
echo "c.ServerApp.max_buffer_size = 1000000000000" >> /root/.jupyter/jupyter_notebook_config.py
# Python 심볼릭 링크 설정
RUN rm /usr/bin/python3 && ln -s /root/anaconda3/bin/python /usr/bin/python3 && \
ln -s /usr/bin/python3 /usr/local/bin/python
# 작업 디렉토리 설정
WORKDIR /data
ENTRYPOINT ["/root/anaconda3/bin/jupyter", "lab"]
Dockerfile 꿀팁
1
2
3
4
# !pip install notebook
from jupyter_server.auth import passwd
print(passwd())
- 원하는 암호를 입력하면 암호화 되어 출력된다.
Dockerfile 로 Docker Image build 하기
1
docker build -t <image:tag> .
- 만일
Dockerfile이 다른 경로에 있다면
1
docker build -t <image:tab> -f <file_path> .
Google AdSense — Post Ad
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
Comments powered by Disqus.