본문 바로가기

Docker

[ Docker ] Dockerfile 작성

0. Dockerfile

# Dockerfile을 생성 후 빌드 시 작성한 내용의 이미지 생성가능
# e.g. docker build -t my_image .
docker build -t [생성할이미지명]:[생성태그명] [Dockerfile이 위치한 경로]
# ==================================================
# Dockerfile 파일은 아래와 같이 생성
# ==================================================
# Dockerfile

# 사용할 기본 이미지를 선택합니다.
FROM node:14

# 작업 디렉토리를 설정합니다.
WORKDIR /usr/src/app

# 현재 디렉토리의 모든 파일을 작업 디렉토리로 복사합니다.
COPY . .

# 애플리케이션을 빌드하거나 의존성을 설치하는 등의 작업을 수행합니다.
RUN npm install

# 컨테이너가 시작될 때 실행할 기본 명령어를 설정합니다.
CMD ["node", "app.js"]
# ==================================================

 

1.  FROM 명령문

# 도커 파일 빌드를 위한 기본 베이스 이미지 선택
# e.g. FROM ubuntu:lastest
FROM <이미지>
FROM <이미지>:<태그>

 

2.  WORKDIR 명령문

# 컨테이너내 작업 디렉토리 설정
# Dockerfile 파일 기본 명령어는 해당 디렉토리 기준으로 동작
# e.g. WORKDIR /app
WORKDIR <이동할 경로>

 

3. RUN 명령문

# 이미지 빌드 과정에 필요한 커맨드를 작성
# RUN 명령어는 이미지 레이어를 생성하기 때문에 한 줄로 작성하는 것이 좋음
# e.g. RUN ["apk", "add", "curl"]
# e.g. RUN apk add curl
RUN ["<커맨드>", "<파라미터1>", "<파라미터2>"]
RUN <전체 커맨드>

 

4. ENTRYPOINT 명령문

# 이미지를 컨테이너로 띄울 때 실행되는 명령어
# e.g. ENTRYPOINT ["npm", "start"]
ENTRYPOINT ["<커맨드>", "<파라미터1>", "<파라미터2>"]
ENTRYPOINT <전체 커맨드>

 

5. CMD 명령문

# 이미지를 컨테이너로 띄울때 디폴트로 실행될 명령어를 지정
# e.g. CMD ["/bin/bash"]
# e.g. ENTRYPOINT ["node"]
# e.g. CMD ["index.js"]
# [ docker run 이미지명 ] index.js 가 실행 됨
# [ docker run 이미지명 main.js ] main.js 가 실행 됨
CMD ["<커맨드>","<파라미터1>","<파라미터2>"]
CMD ["<파라미터1>","<파라미터2>"]
CMD <전체 커맨드>

 

6. EXPOSE 명령문

# 도커 내부에서 사용할 포트를 명시
# docker run 옵션에서 -P 옵션을 줄경우 호스트의 랜덤한포트:지정한포트로 매핑됨
# e.g. EXPOSE 80 디폴트는 tcp로 지정됨
# e.g. EXPOSE 80/udp
EXPOSE [포트번호]/[프로토콜]

 

7. COPY 명령문

# 로컬 폴더의 파일을 작업경로로 복사
# 상대경로 절대경로 모두 지원
# 로컬 폴더의 모든 파일을 작업경로에 붙여넣기
# e.g. COPY . .
# 로컬 폴더의 package.json 을 작업경로(WORKDIR)의 경로로 붙여넣기
# e.g. COPY package.json package.json
COPY [로컬소스경로] [컨테이너복사경로]
COPY ["[로컬소스경로]", "[컨테이너복사경로]"]

 

8. ADD 명령문

# COPY 명령어와 같으나 온라인상의 파일도 복사가능
# e.g. ADD http://~~~~/index.php /app/test/index.php
ADD  [복사소스경로] [컨테이너복사경로]

 

9. ENV 명령문

# 컨테이너 내에서 사용할 환경변수를 명시
# e.g. ENV NODE_ENV production
ENV [키] [값]
ENV [키]=[값]

 

10. ARG 명령문

# 도커 빌드 시 사용될 환경변수를 명시
# --build-arg 옵션에 넘길 수 있음
# e.g. docker build --build-arg port=8080 .
# CMD start.sh -h 127.0.0.1 -p ${port}
# 와 같이 build-arg에 변수 및  값을 넘길 수있는데
# ARG port 8080 과 같이 사용할 경우 자동으로 값이 넘어감
ARG [키] [값]
ARG [키]=[값]

 

11. VOLUME 명령문

# 컨테이너가 실행될 때 호스트와 연결할 디렉토리를 정의
# 해당 명령어가 지정되었을 경우 docker commit 등으로 상태가 저장되지 않음
# 해당 디렉토리는 호스트에서 관리한다는 의미로
# docker run -v [ 호스트 디렉토리 ]/[ 컨테이너 내부 디렉토리 ] 로 매핑해주어야함
# e.g. docker run -it -v C:\directory:/container/directory 이미지_이름:태그
VOLUME [ 컨테이너 내부 디렉토리 ]

 

12. [ .dockerignore ] 파일

# .gitignore 파일과 같이 Dockerfile 내에
# COPY . . 등의 명령어 사용시 제외되는 파일을 기제
# e.g. 
# ==================================================
.git
*.md
# ==================================================