내가 자주 사용하는 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 파일이 실행되도록 한다
'클라우드 > 도커' 카테고리의 다른 글
[도커] 도커 4: docker 파일 1 (Dockerfile) (3) | 2024.11.14 |
---|---|
[도커] 도커 3: docker 명령어 모음 2탄 (도커 이미지 관련 명령어) (3) | 2024.11.13 |
[도커] 도커 2: docker 명령어 모음 1탄 (도커 컨테이너 관련 명령어) (1) | 2024.11.12 |
[도커] 도커 1: 도커의 3가지 컨셉 (0) | 2024.11.11 |
[도커] 도커 0: 도커가 뭐고 왜 쓰나요? (1) | 2024.11.10 |