Docker

Dockerfile vs docker-compose.yml, Docker 명령어 의미 및 Dockerfile 작성 방법

naksnaks 2023. 10. 26.
반응형

Dockerfile vs docker-compose.yml

1. Dockerfile

도커 파일은 컨테이너를 빌드할 때, 어떤 이미지로 어떤 명령어를 수행하여 컨테이너를 빌드할지 알려주는 명령어들이 들어있는 파일

이미지를 실행할 때, 특정 작업까지 같이 실행해주는 파일

docker-compose.yml

여러 컨테이너를 쉽게 띄워주는 파일

보통 docker-compose로 여러 컨테이너를 띄워주고, Dockerfile을 이용해 특정 작업을 실행해준다.

아래의 명령어를 통해 yml 파일을 실행할 수 있다.

docker-compose up --build -d

Dockerfile 작성하는 방법

  • FROM : 어떤 이미지로 부터 시작할지 명시
FROM [이미지]:[태그]
  • WORKDIR : 컨테이너 상에서 작업 디렉토리로 전환 (cmd의 cd 역할)
WORKDIR [이동할 경로]
  • RUN : 이미지 빌드 과정에 필요한 커맨드 실행 (특정 소프트웨어를 설치하기 위해)
RUN npm install
RUN apt-get update
  • ENTRYPOINT : 이미지를 컨테이너로 띄울 때 항상 실행되어야 하는 커맨드 저장
RUN npm install
RUN apt-get update
  • CMD : 이미지를 컨테이너로 띄울 때 디폴트로 실행할 커맨드 or ENTRYPOINT 명령문으로 지정된 커맨드에 디폴트로 넘길 파라미터를 지정할 때 사용

    # node 커맨드로 디폴트로는 index.js를 실행하되, docker run 커맨드에 인자가 있는 경우
    
    ENTRYPOINT ["node"]
    CMD ["index.js"]
    • node index.js 실행 시,
    docker run test
    • node main.js 실행 시,
    docker run test main.js
  • EXPOSE : 네트워크 상에서 컨테이너로 들어오는 트래픽을 리스닝하는 포트, 프로토콜을 지정하기 위해 사용 (컨테이너 내부에서만 유효, 호스트 컴퓨터에서 docker run -p 를 통해 특정 포트를 포워딩 해줘야 접근이 허용됨)
EXPOSE [포트]
EXPOSE [포트]/[프로토콜]

#ex1. 80/TCP 포트로 리스닝
EXPOSE 80

#ex2. 9999/UDP 포트로 리스닝
EXPOSE 9999/udp
  • COPY/ADD : 호스트 컴퓨터의 디렉토리 or 파일을 Docker 이미지의 파일 시스템으로 복사
    ADD는 압축 파일 or 네트워크 상의 파일도 사용가능.
COPY [src] [dest]
COPY ["[src]", ... "[dest]"]

#ex1. package.json 파일만 복사
COPY package.json package.json

#ex2. 이미지를 빌드한 디렉토리의 모든 파일을 컨테이너의 app/ 디렉토리로 복사
WORKDIR app/
COPY . .
  • ENV : 환경변수 설정 (이미지 빌드시 사용 + 컨테이너에서 돌아가는 APP에서도 접근 가능)
# NODE_ENV 라는 환경 변수를 production으로 설정
ENV NODE_ENV production
  • ARG : docker build 커맨드로 이미지를 빌드할 때, - - build-arg 옵션을 통해 넘길 수 있는 인자 정의 (ENV와 달리 빌드 시에만 사용)
#ARG port를 하면 docker build 시 port 변수값을 넘길 수 있다. 
ARG port

=>

docker build --build-arg port=8080

#디폴트 값을 설정해주면, --build-arg 옵션이 없을 때 사용
ARG port=8080

=>

CMD start.sh -h 127.0.0.1 -p ${port}
  • .dockerignore 파일
    • Docker 이미지 빌드 시, 제외하고 싶은 파일이 있으면 추가
# .git 디렉토리와 마크다운 파일 모두 제외 시, 명령문들이 해당 파일을 사용할 수 없다
.git
*.md

저는 따배도를 보며 도커를 학습했습니다!

해당 강사님께서 도커에 대해 아주 쉽고 재미있게 알려주셔서 지루하지 않게 공부했던거 같네요!

앞으로 시간이 된다면, 쿠버네티스 강의인 "따라하면서 배우는 쿠버네티스"도 공부해볼까 합니다.

https://www.youtube.com/watch?v=NLUugLQ8unM&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi

반응형

댓글

💲 추천 글