Docker & Kubernetes

[Docker] Dockerfile 작성 및 이미지 만들기

Jackerson 2022. 4. 7. 08:26

* Docker deamon 기동 (on Mac)

> open -a docker

 

* 이미지 만드는 순서

  : 도커 파일 -> 도커 클라이언트 -> 도커 서버 -> 이미지

 

-  도커 파일 생성

# 1. 빌드 스테이지
# 베이스 이미지 명시, 이미시 생성 시 기반이 되는 이미지 레이어입니다.
# <이미지 이름>:<태그> 형식으로 작성
# 태그를 안붙이면 자동적으로 가장 최신것으로 다운 받음
FROM node:alpine	AS builder	# FROM 부터 다음 FROM 까지 builder stage 임을 명시

# 파일들을 넣어줄 폴더 설정
# 컨테이너 접근 시 워크디렉토리로 기본으로 접근한다.
WORKDIR /usr/src/app

# 패키지 파일을 먼저 가져간 후 npm install을 해야 캐싱을 쓸수 있다.
COPY package.json ./
RUN npm install

# 소스 파일 이관
COPY ./ ./

# 도커 이미지가 생성되기 전에 수행 할 쉘 명령어
# 추가적으로 필요한 파일들을 다운 받는다.
CMD ["npm","run","build"]


# 2. 러닝 스테이지
# 빌드 스테이지에서 생성된 빌드 파일을 웹서버에 넣어준다.
FROM nginx
COPY --from=builder /usr/src/app/build /usr/share/nginx/html
# --from=builder : 다른 스테이지에 있는 파일을 복사할때 명시해줌
# /usr/src/app/build /usr/share/nginx/html : 파일을 복사하기 위한 from, to

- 도커 이미지 빌드

# 해당 디렉토리 내에서 기본으로 Dockerfile 이라는 파일을 찾아서 도커 클라이언트에 전달시켜 준다.
# ./는 현재 디렉토리를 가르킨다.
# docker build -f [빌드할도커파일명] -t [나의 도커 아이디]/[저장소/프로젝트 이름]:[버전] ./
> docker build -f Dockerfile.dev -t junducut/hello:latest ./

- 도커 이미지 실행

# -it 컨테이너에 쉘로 접속해서 사용을 하기 위한 옵션
# -p 포트 맵핑 옵션, 컨테이너 8080포트로 접근하기 위해 5000번 포트로 맵핑
# -d detach 옵션은 백그라운드 모드로 컨테이너 실행
# -e 환경변수 세팅
# --name 빌드된 이미지의 컨테이너명
> docker run -it -p 5000:8080 --name [컨테이너이름] -e [환경변수명]="[환경변수값]" [이미지 명]

* 생성된 도커 container 접속

# 접속할 도커 컨테이너 아이디 확인
> docker ps -a

# 컨테이너 접속 (bash로)
> docker exec -it [컨테이너ID or 컨테이너명] /bin/bash