본문 바로가기
프로그래밍

도커 파일(Docker file) 작성하기

by bantomak 2024. 3. 26.

도커 파일(Docker file)이란?

그동안은 단순히 공식 허브에 올라와 있는 이미지를 다운받아서 컨테이너를 생성하고 그 안에서 각종 도구를 사용하거나 파일을 생성하는 과정을 진행했었다.

 

하지만, 이런 방식이라면 매번 애플리케이션을 동작하는 환경을 구성하기 위해서 패키지를 설치하고 환경설정하는 과정을 반복해야 한다.

 

이런 문제를 해결하기 위해서 도커 파일(Dockerfile)을 이용해보자. 도커 파일은 컨테이너에 설치해야하는 패키지, 소스코드, 명령어, 환경변수설정 등을 기록한 하나의 파일이다. 그리고 이를 빌드하면 자동으로 이미지가 생성된다. 이렇게 되면 앞으로는 애플리케이션 빌드 및 배포를 자동화 할 수 있게 된다.

컨테이너에서 작업을 한 다음에 이를 이미지로 커밋하면 되는거 아닌가하는 의문에 대해서는 물론 그렇게 하는 방법도 가능하지만 명시적으로 도커 파일을 이용해서 빌드하고 배포하는게 재사용성이 좋고 명확하게 배포가 가능하다.

 

VS Code를 사용해서 도커 파일(Dockerfile) 작성

VS Code에서 Docker 확장 도구를 설치하면 도커 파일을 쉽게 작성할 수 있다.

 

 

VS Code에서 F1을 눌러서 Command Palette를 열어서 Docker:Add Docker Files to Workspace 커맨드를 입력하면 손쉽게 도커 파일 생성이 가능하다.

 

 

# 1. 우분투 설치
FROM ubuntu:18.04

# 2. 메타데이터 표시
LABEL "purpose"="practice"

# 3. 업데이트 및 아파치 설치
RUN apt-get update
RUN apt-get install apache2 -y

# 4. 호스트에 있는 파일을 추가
ADD test.html /var/www/html

# 5. 작업공간 이동(=cd)
WORKDIR /var/www/html

# 6. 거기서 test2.html 파일생성
RUN ["/bin/bash", "-c", "echo hello > test2.html"]

# 7. 포트 80번 노출 지정
EXPOSE 80

# 8. 컨테이너 생성시 시작명령어
CMD apachectl -DFOREGROUND

 

  • FROM : 생성할 이미지의 베이스가 될 이미지를 뜻한다. 반드시 한번 이상 입력해야 한다.
  • LABEL : 이미지에 메타데이터를 추가한다. (나중에 원하는 조건의 컨테이너, 이미지 등을 쉽게 찾을 수 있도록 도와주기 때문에 기억해두는게 좋다.)
  • RUN : 이미지를 만들기 위해 컨테이너 내부에서 명령어를 실행한다. (여기서 주의할 점은 설치과정에서 별도의 입력이 불가능하기 때문에 apache2를 설치할 때 뒤에 -y를 붙여줘야 한다.)
  • ADD : 파일을 이미지에 추가한다. 여기서는 도커파일이 위치한 폴더에 test.html 파일을 가져와서 이미지의 /var/www/html 디렉터리에 추가한다.
  • WORKDIR : 명령어를 실행할 디렉토리를 지정한다. 배시 셸에서의 cd 명령어와 동일한 기능을 한다.
  • EXPOSE : 이미지에서 노출할 포트를 지정한다.
  • CMD : 컨테이너가 시작될 때마다 실행할 명령어. 도커 파일에서 한번만 사용할 수 있다.

이를 종합해 봤을때 ubuntu18:04 이미지를 이용해서 컨테이너를 생성한다. 그 안에서 apt-get update를 하고 아파치를 설치한다. 호스트에 있는 test.html을 /var/www/html에 추가한 다음, 그 폴더로 이동한 후에 test2.html을 생성한다. 마지막으로 80번 포트를 노출하고 다음 CMD 명령으로 이미지 빌드를 마친다.

 

이렇게 도커 파일 작성이 완료되었다.

 

VS Code로 생성한 .NET용 도커 파일

FROM mcr.microsoft.com/dotnet/runtime:8.0 AS base
WORKDIR /app

USER app
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG configuration=Release
WORKDIR /src
COPY ["VSCodeDotNet/VSCodeDotNet.csproj", "VSCodeDotNet/"]
RUN dotnet restore "VSCodeDotNet/VSCodeDotNet.csproj"
COPY . .
WORKDIR "/src/VSCodeDotNet"
RUN dotnet build "VSCodeDotNet.csproj" -c $configuration -o /app/build

FROM build AS publish
ARG configuration=Release
RUN dotnet publish "VSCodeDotNet.csproj" -c $configuration -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "VSCodeDotNet.dll"]

 

도커 파일로 이미지 빌드하기

$ docker build [OPTION] 도커 파일 경로

 

  • --tag, -t : 이미지 이름과 태그를 설정
  • --no-cache : 빌드 시, 캐시 기능을 사용하지 않음

함께 읽으면 좋은 글

 

도커(Docker)로 레디스(redis) 실행하기

항상 동일한 환경으로 레디스 실행하기 메모리에 상주하는 레디스(Redis)는 인메모리 방식으로 다른 RDS와 다르게 엄청난 속도를 보장한다. 이런 레디스를 항상 동일한 환경으로 배포해보자. 도커

jettstream.tistory.com

참고 사이트

 

10장. 도커파일(Dockerfile)

이 포스팅은 위키북스의 시작하세요! 도커/쿠버네티스 를 보고 공부한 내용을 바탕으로 하고 있습니다. (문제가 된다면 비공개 처리하겠습니다😂😂)이미지 출처 : https://data-newbie.tistory.com/516지

velog.io

댓글