클라우드/도커

자주 사용하는 Dockerfile(도커파일) 모음

KyuminKim 2024. 11. 8. 23:33

내가 자주 사용하는 Dockerfile 정리 + 사용법도 간단하게 정리해본다!


Dockerfile 사용법

💡 도커 이미지 생성 (Dockerfile 기반)

  • 맨 마지막 점(.): . 위치에 존재하는 Dockerfile을 기반으로 도커 이미지를 생성하겠다는 의미
$ docker build -t test-img .
$ docker build -t (도커계정)/(이미지명):(태그) . 
# docker build -t my_account/test_img:latest .

 

 

💡생성한 이미지 도커허브에 Push

  • 생성한 도커 이미지를 허브에 Push    (다른 컴퓨터에서, 도커 허브에 접속해 이미지 다운로드 가능)
  • 깃허브 생각해보시라!   (로컬 파일을 ➔ 깃허브로 push하는 개념과 유사)
$ docker push (이미지명)
# docker build -t my_account/test_img:latest .

 

 

💡도커허브에서 이미지 다운로드 & 실행(run)

  • 참고로, local에 해당 이미지가 없다면 도커허브에서 이미지를 다운로드한다!
  • 가끔 이미지를 띄우는 데, 자꾸 pod이 꺼져서 문제였다면? 주목!
    • VM과 달리, pod는 그 안의 소스코드를 모두 실행 완료하면 자동으로 꺼진다.
    • 이를 방지하지 위해, sleep infinity/bin/sh 명령어 등등을 넣어준다
docker run -d ubuntu:22.04 --name test /bin/sh # 꺼지지 않고 계속 띄우기 위해 /bin/sh 명령어 이용
  • 위 명령어의 경우, ubuntu:22.04 이미지를 사용해
  • test라는 이름의 도커 컨테이너를 생성하고,
  • 백그라운드 (-d)로 실행한 후,
  • /bin/sh 명령어를 컨테이너에서 실행하게 함으로써 ➔ 컨테이너가 죽지 않도록 한다

 

💡도커 이미지 다운로드만!

$ docker pull ubuntu:latest
  • docker pull 명령어를 통해 실행은 하지 않고, 이미지를 도커허브에서 다운로드만 한다

 

💡local에 이미 이미지가 있지만, 도커허브에서 (이미지) 다운로드받아서 실행하고 싶을 때!

$ docker run --pull=always (이미지):(태그)
  • --pull=always 명령어를 통해 명시적으로 도커허브에서 다운로드하도록 설정 가능하다

파이썬 Dockerfile

💡로컬 환경의 Python 코드를 도커 이미지로 만들고 싶을 때 사용

# 기반 이미지 설정 (Python 3.8을 사용하는 공식 Python 이미지)
FROM python:3.8

# 작업 디렉토리를 /app으로 설정
WORKDIR /app

# 호스트 시스템의 현재 디렉토리에 있는 모든 파일을 컨테이너의 /app 디렉토리로 복사
COPY . /app

# 필요한 패키지들을 설치하기 위해 requirements.txt를 복사하고 의존성 설치
RUN pip install --no-cache-dir -r requirements.txt

# 앱 실행을 위한 명령
CMD ["python", "app.py"]

 

파이썬의 경우, 

pip freeze > requirement.txt 명령어를 통해 현재 패키지 정보를 적어둘 수 있다.

(백엔드 자바 스프링부트로 치면, gradle 문서와 비슷한 느낌이다)

 

 

새로 생성될 컨테이너에서도 같은 버전의 패키지가 설치되도록

local에서 requirements.txt를 설치 + Dockerfile을 통해 명시함으로써

Dockerfile을 통해 컨테이너에서 같은 버전의 패키지를 설치하게 한다

 

+

CMD ["python", "app.py"] 명령어를 통해

컨테이너 실행 시 app.py를 실행하도록 한다


고랭 Dockerfile

💡로컬 환경의 Golang 코드를 도커 이미지로 만들고 싶을 때 사용

# 기반 이미지 설정 (golang 1.20.5)
FROM golang:1.20.5-alpine3.17

# 작업 디렉토리를 /app으로 설정
WORKDIR /app

# 호스트 시스템의 test.go를 컨테이너의 .로 이동
COPY test.go .
# 호스트 시스템의 go.mod와 go.sum을 컨테이너의 ./로 이동
COPY go.mod go.sum ./

# 필요한 패키지들을 설치하기 위해 go mod download 명령어 수행
RUN go mod download
# 컨테이너 안에서 ./test.go파일을 testResult로 빌드
RUN go build -o testResult ./test.go
# 빌드한 testResult 실행
CMD ["./testResult"]

 

파이썬과 마찬가지로 

패키지를 컨테이너에서도 생성해야 하는데,

이때 go mod download 명령어를 쓰면 소스코드의 패키지 정보를 알아서 찾아서 다운로드해준다!
(golang이 똑똑하다!)

 

+

CMD ["./testResult"] 명령어를 통해

컨테이너 실행 시 빌드된 test.go 파일이 실행되도록 한다