Dockerfile

Stormi·2022년 4월 28일
0

Docker

목록 보기
6/9

Dockerfile

  1. FROM : 다른 베이스 이미지에 우리의 이미지를 구축할 수 있음
    (우리 시스템 자체에 있는 이름으로 넣거나 도커허브안에 있는거로 넣거나)
    (이게 인식이됨)

    1 - 2: WORKDIR /app
    도커에게 모든 후속 명령이 app 안에서 실행 될것임을 알리는 것.

  2. COPY . .
    (기본적으로 여기에서 두개의 경로를 지정하는데, 첫번째 경로는 컨테이너의 외보, 이미지의 외부 경로이며 이미지로 복사되어야할 파일들이 있는 곳이다.)
    " . "을 쓰는 이유는 Dockerfile이 위치한 동일한 폴더임을 말한다.

    즉, 이 동일한 폴더에 있는 Dockerfile을 제외한 모든 것을 복사해야한다고 도커에게 알리는 것이다.

    (두번째 경로는 복사되어야하는 이미지 내부의 경로이다.)

    
    COPY . /app

    컨테이너 내부의 app이라는 곳에 이미지가 생성이됨

  3. RUN npm install
    (이번 단계는 npm install 차례)

  4. (작업 디렉토리가 /app)인것을 생각하면(1-2 를 추가 후, COPY . /app 을 COPY . . (절대경로에서 상대경로가돼서)으로 수정 가능)

    2번을 COPY . . 을 바꿀수 있는 것이다 -> 정확성을 위해
    권장하는 것은 COPY . ./app 으로 쓰는 것이 맞음

  5. (마지막 명령은 모든 작업이 완료되면 서버를 시작하라는 것)
    RUN node server.js

이미지는 컨테이너의 템플릿!!!

이미지를 실행 시키는 것이 아니라, 이미지를 기반으로 컨테이너를 실행하는 것이다. 따라서 5번 명령어는 틀린것.(맞을 때도 있음)

  1. CMD node server.js-> 이것도 틀림(문법적으로)

RUN 과의 차이점은 이미지가 생성될 때 실행되지 않고 아미지를 기반으로 컨테이너가 시작될때 실행된다는 것

컨테이너가 실행 된 후에 노드서버를 실행하고 자 하는것.

5. CMD ["node", "server.js"]

-> 맞는 코드

이런식으로 실행하려고하면 아직 애플리케이션을 볼 수가 없음!!

노드의 웹서버를 봐보면 app.listen(80)이라고 해서 이 노드 웹 서버는 포트 80번에서 수신 대기중이기 때문에!!

  1. 도커 컨테이너는 격리되어 있음!! 우리의 지역환경과 분리되어있기때문에 컨테이너 내부의 노드 애플리케이션에서 포트 80을 수신할 때 컨테이너는 그 포트를 우리의 로컬머신에 노출하지 않는다!!

따라서 컨테이너 내부에서만 무언가를 수신 대기 중이기때문에 애플리케이션을 그 포트에서 수신할 수 없다. Dockerfile에 추가해줘야한다

  1. 언제나 마지막 명령어 전에
    즉 5번 자리 앞에
  2. EXPOSE 80
    이런식으로 써줘야함

0개의 댓글

관련 채용 정보