일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Detached
- anonymous volume
- 익명볼륨
- crossbrowsing
- docker image
- named volume
- WORKDIR
- Thymeleaf
- Port Fowarding
- arg
- spring boot
- template engine
- 컨테이너간 통신
- 명명된 볼륨
- docker volume
- Copy
- Docker Desktop
- docker
- dockerfile
- bind mount
- repository
- docker hub
- docker container
- env
- docker예시
- dockerignore
- attached
- 도커파일
- container
- Docker배경
- Today
- Total
코딩왕 미룡
[Docker] Dockerfile 예제 본문
노드 이미지를 구축하고자 함
FROM node
디폴트로 모든 명령은 도커 컨테이너 및 이미지의 작업 디렉토리에서 실행
그 작업 디렉토리는 컨테이너 파일 시스템의 루트 폴더
npm install 도 app 폴더 내부에서 실행하고 싶음
도커에게 모든 명령이 그 폴더에서 실행되어야 한다고 알림
WORKDIR /app
Dockerfile과 동일한 폴더에 있는 모든 파일 + 모든 하위폴더가 컨테이너 내부의 app 폴더에 복사됨
(폴더가 존재하지 않는 경우는 이미지와 컨테이너에 생성됨)
WORKDIR 를 app 폴더로 지정했기 때문에 COPY도 이 작업 디렉토리를 기준으로 실행됨
but, 가독성을 위해 명시적으로 표현해주는 것이 좋음(절대경로)
COPY . /app
(모든 로컬 파일을 이미지에 복사한 후)노드 애플리케이션에 있는 모든 종속성을 설치
RUN npm install
로컬호스트에 특정 포트를 노출하고 싶다는 것을 도커에 알림
컨테이너의 포트는 우리의 로컬 머신에 노출하지 않음 (컨테이너 내부에서 수신 대기중)
마지막 명령 실행전에 로컬 시스템에 특정 포트를 노출하고 싶다고 표기
EXPOSE 80
모든 작업이 완료되면 서버를 시작해라
→ RUN node server.js
위와 같은 명령은 이미지가 생성될 때마다 서버가 실행됨
하나의 동일한 이미지에서 여러 컨테이너를 시작하면 노드 서버도 여러개 실행됨
이미지를 기반으로 컨테이너를 시작하는 경우에만 노드 서버를 실행하고 싶음
CMD는 이미지가 생성될 때 실행되는 것이 아닌 이미지를 기반으로 컨테이너가 실행될 때 컨테이너에서 실행됨
도커에게 이미지를 기반으로 컨테이너가 생성될 때마다 그 컨테이너 내부에 있는 node 명령을 사용하여 파일을 실행하도록 지시
CMD에 특정하지 않으면 베이스 이미지가 실행되고 베이스 이미지가 없는 경우 에러가 발생
CMD ["node", "server.js"]
FROM node
WORKDIR /app
COPY . /app
RUN npm install
EXPOSE 80
CMD ["node", "server.js"]
'Docker' 카테고리의 다른 글
[Docker]컨테이너 간의 통신 (0) | 2023.06.08 |
---|---|
[Docker] Docker hub(push/pull) (0) | 2023.06.07 |
[Docker] Dockerfile 작성하기 (0) | 2023.06.06 |
[Docker] Bind Mounts(바인드 마운트) (0) | 2023.06.06 |
[Docker] Volumes(볼륨) (1) | 2023.06.05 |