공식문서를 참고하여 찬찬히 따라해본다.
Node.js 앱 생성
- package.json 파일을 생성하고 내용을 넣는다.
- npm install을 통해 의존성을 설치한다.
- 이 때 설치되는 것은 명시되어 있는대로 "express": "^4.16.1"이다.
- package-lock.json이 생성되었다면 성공적으로 설치된 것이다.
- server.js를 만든다.
Dockerfile 생성
FROM node:12
# 앱 디렉터리 생성
WORKDIR /usr/src/app
# 앱 의존성 설치
# 가능한 경우(npm@5+) package.json과 package-lock.json을 모두 복사하기 위해
# 와일드카드를 사용
COPY package*.json ./
RUN npm install
# 프로덕션을 위한 코드를 빌드하는 경우
# RUN npm ci --only=production
# 앱 소스 추가
COPY . .
EXPOSE 8080
CMD [ "node", "server.js" ]
- COPY . .
- Dockerfile이 있는 디렉토리의 모든 파일들을(.) 컨테이너의 디렉토리에(.) 복사한다.
- EXPOSE 8080
- 앱이 8080포트에 바인딩 되어 있으므로 EXPOSE 지시어를 사용해서 docker 데몬에 매핑한다?
- CMD [ "node", "server.js" ]
- 터미널에 node server.js를 치면 서버가 실행되듯, node server.js를 실행하는 명령어다.
.dockerignore
- .gitignore와 마찬가지로 dockerignore에 있는 파일들은 컨테이너에 추가되지 않는다.
이미지 빌드
- 빌드를 한다.
docker build . -t <your username>/node-web-app
Dockerfile에 작성한 순서대로 작업이 진행되는 것이 보인다.
- 빌드된 이미지를 확인해본다.
docker images
이미지 실행
- 이미지를 컨테이너로 실행한다. 앱이 8080에 바인딩되어 있으므로 명령어는 다음과 같다.
docker run -p 49160:8080 -d <your username>/node-web-app
- 실행중인 container id나 names를 확인한다.
docker ps
- 로그를 출력하여 정상 작동하는지 확인한다.
docker logs <container id 혹은 names>
- 잘 작동안되면 직접 컨테이너에 들어가서 확인해보자.
docker exec -it <container id 혹은 names> bash
테스트
- 직접 방문해보자. localhost:49160
- curl 날려보자!
curl -i localhost:49160
- 모든 실습이 완료되었으면 컨테이너를 없애보자! 먼저 stop으로 멈추고 rm으로 제거할 것이다.
docker stop <container id 혹은 names>
docker rm <container id 혹은 names>
'Container > Docker' 카테고리의 다른 글
[Docker]Dockerfile을 이용해 빌드, 배포하기 트러블슈팅 (0) | 2022.05.08 |
---|---|
[Docker]애플리케이션을 Docker compose와 AWS의 ECS/ECR을 통해 배포해보자! (0) | 2022.03.22 |
[Docker]풀스택 앱 컨테이너화, Docker Compose를 이용해 실행해보자 (0) | 2022.03.21 |
[Docker]docker: Error response from daemon: failed to create shim: OCI runtime create failed: (0) | 2022.03.21 |