빅토리 코딩
article thumbnail
728x90
반응형

개요

Dockerfile작성하는 법과 docker 이미지를 생성하는 방법에 대해 알아보자

설명

Dockerfile

docker파일은 container로 띄우기전 image build를 위한 파일로 해당 image로 container가 실행되면서 필요한 package나 실행시킬 프로세스를 설정하는 파일이다. Dockerfile에 쓰이는 내용에 대해 자세히 알아보자

파일의 예시이다. 해당 내용을 보면 FROM, WORDIR, COPY등등 container가 실행될 때의 내용이 적혀있다.

ex)

FROM python:3.9-alpine
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [ "python", "app.py" ]

FROM 

container에 사용될 기본 이미지 이다.  예시에서 쓰이는 python:3.9-alpine는 Python3.9 버전 package를 다운로드하여져 있는 container인 것이다.

FROM python:3.9-alpine
...

RUN

패키지를 설치하고, 디렉토리를 만들고, 애플리케이션을 설정하는 데 필요한 기타 명령을 실행하는 데 사용된다. 또한 WORKDIR을 이용하여 특정 위치에 git, svn을 clone, checkout 등을 할 수 있다.

RUN apt-get update && apt-get install -y \
    build-essential \
    libssl-dev \
    libffi-dev \
    python-dev \
    python3-dev \
    python3-pip \
    && rm -rf /var/lib/apt/lists/*

WOKRDIR

WORKDIR 명령은 뒤에 오는 RUN, CMD, ENTRYPOINT, COPY 및 ADD 명령에 대한 작업 디렉토리를 설정합니다.

...
WORKDIR /app
RUN git clone https://github.com/your/repo.git
RUN pip3 install -r requirements.txt
WORKDIR /test
COPY . .
RUN pip install -r requirements.txt
...

COPY or  ADD

COPY 명령은 호스트에서 컨테이너로 파일 또는 디렉토리를 복사한다.

ADD'명령은 COPY와 유사하지만 URL에서 파일을 다운로드하고 압축 파일을 추출할 수도 있다.

...
COPY app.py /app/
ADD https://example.com/file.tar.gz /tmp/
...

CMD

Dockerfile에서 여러 번 사용할 수 있다. 컨테이너 생성 시, 추가적인 명령어에 따라 설정한 명령어를 수정할 수 있습니다.

쉽게 예시를 들자면

ex)

  FROM ubuntu
  CMD ["/bin/echo", "Before"]

라는 Dockerfile이 있다면

  docker run --name <container-name> <image-name>

 

결과 : Before

docker run --name <container-name> <image-name> echo "After"

 

결과 : After

ENTRYPOINT

Dockerfile에서 한 번만 사용할 수 있다.  컨테이너 시작 시, 추가적인 명령어 존재 여부와 상관없이 무조건 실행됩니다.

  FROM ubuntu
  ENTRYPOINT ["/bin/echo", "ENTRYPOINT"]
  CMD ["CMD"]

해당 Dockerfile이 있다면

  docker run --name <container-name> <image-name>

결과 : ENTRYPOINT CMD

 docker run --name <container-name> <image-name> echo "-----------CMD"

결과 : ENTRYPOINT -----------CMD

EXPOSE

container가 지정한 포트에 수신가능함을 설정

ex)

...
EXPOSE 80/tcp
...

빌드

이미지 기본 명령어

 docker build -t [이미지 이름:이미지 태그(버전)] [Dockerfile의 경로]

만약 이미지 태그(버전)을 아무것도 안넣었으면 자동으로 latest로 들어간다.

만약 같은 이미지이름을 가지고 다시 이미지 태그(버전)을 넣지 않았으면 기존에 있던 이미지가 none으로 바뀐다.

ex)

docker build -t springboot01 /data1/testjar/jar1/

 

 

728x90
반응형

'Server > docker' 카테고리의 다른 글

Docker Repository(k8s ErrImagePull, ImagePullBackOff)  (0) 2023.05.02
profile

빅토리 코딩

@빅토리 코딩

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그