$ npm init -y
- 프로젝트 초기화
$ npm i express
- 웹 애플리케이션 프레임워크 설치(express)
index.js
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('🐳 Dream Coding in Docker! 🐳');
});
app.listen(8080, () => console.log('Server is running 🤖'));
$ node index.js
- 백엔드 서버 구동
컨테이너를 만들기 위해서 해야할 것
1. Dockerfile 생성
FROM node:16-alpine
WORKDIR /app
COPY package.json package-lock.json ./
## npm install 대신
RUN npm ci
COPY index.js .
ENTRYPOINT [ "node", "index.js" ]
FROM node:16-alpine
- 베이스 이미지 지정 : node.js 16 버전을 기반으로 하는 Alpine Linux 이미지를 사용한다.
WORKDIR /app
- 작업 디렉토리 설정 : 컨테이너 내부에서 /app 디렉토리를 작업 디렉토리로 설정한다.
- 이후 명령(COPY, RUN 등)은 이 디렉토리를 기준으로 실행된다.
- /app은 컨테이너 내부에서 애플리케이션 파일과 의존성을 정리해서 관리하는 디렉토리이다.
COPY package.json package-locj.json ./
- 파일 복사 : 호스트 머신의 package.json과 package-lock.json 파일을 컨테이너의 현재 작업 디렉토리(WORKDIR /app, 즉 /app)로 복사한다.
- 전체 파일을 복사하지 않고 필요한 파일만 복사함으로써 Docker의 캐싱을 효율적으로 사용.
Run npm ci
- 의존성 설치 : npm ci 명령을 실행하여 애플리케이션의 의존성을 설치한다.
- npm ci란?
- npm install 대신 사용하며, package-lock.json에 맞춰 엄격희 의존성을 설치한다.
- 기존 node_modules를 무시하고 새로 설치한다.
- 빌드 환경에서 더 빠르고 안정적
ENTRYPOINT [ "node", "index.js" ]
- 컨테이너 시작 명령 : 컨테이너가 실행될 때 Node.js로 index.js 파일을 실행한다.
- ENTRYPOINT 란?
- 도커 컨테이너가 실행될 때 기본으로 실행될 명령을 정의
Dockerfile 작성 시 레이어 캐싱을 효율적으로 활용하기 위해 가장 빈번하게 변경되는 항목은 마지막에 작성하는 것이 중요하다.
이는 Docker가 이전 레이어를 캐싱하여 빌드 속도를 빠르게 하기 위함이다.
2. 이미지 만들기
$ docker build -f Dockerfile -t fun-docker .
- Docker 이미지를 빌드하기 위한 명령.
docker build
- Docker CLI 명령어로, Docker 이미지를 빌드하는 데 사용됨.
-f Dockerfile
- 사용할 Dockerfile의 경로를 지정함.
- 이 옵션이 없으면 기본적으로 현재 디렉토리의 Dockerfile을 사용.
-t fun-docker
- -t 는 태그를 의미.
- 빌드한 이미지에 이름과 태그를 지정
- 이미지 이름 : fun-docker, 태그는 기본 값인 latest로 설정.
- 형식 : <이미지 이름>:<태그>
- 예 : fun-docker:v1
.
- 빌드 컨텍스트 지정.
- Docker 빌드에 사용할 파일과 디렉토리의 루트 경로를 의미.
- . 은 현재 디렉토리를 빌드 컨텍스트로 설정.
- Docker는 이 디렉토리의 모든 파일을 빌드 과정에서 사용할 수 있도록 압축해 Docker 데몬에 전송한다.
$ docker images
- 현재 Docker 호스트에 저장된 Docker 이미지들의 목록을 보여준다.
3. 도커 컨테이너 실행
$ docker run -d -p 8080:8080 fun-docker
- Docker 컨테이너 실행하기 위한 명령.
docker run :
- 새 컨테이너를 생성하고 실행.
- 실행하려는 이미지를 지정해야 한다.(fun-docker)
-d :
- 컨테이너를 백그라운드(Detached) 모드로 실행한다.
- 터미널이 컨테이너 실행에 점유되지 않아 다른 작업을 계속할 수 있음.
-p 8080:8080 :
- 호스트와 컨테이너 간 포트 매핑을 설정한다.
- 호스트의 포트 8080을 컨테이너의 포트 8080에 연결한다.
- http://localhost:8080 으로 접속해 컨테이너에서 실행 중인 애플리케이션에 접근 가능.
fun-docker :
- docker build 로 생성된 이미지.
4. 컨테이너 확인
$ docker ps
$ docker logs 307ca2e0bd76
5. 이미지 배포
도커 허브 -> 새 레포지토리 생성
$ docker tag fun-docker:latest jhyngu/docker-example:latest
$ docker images
$ docker login
$ docker push jhyngu/docker-example:latest
도커 이미지 등록 확인
'docker' 카테고리의 다른 글
Docker 기초 이론 (0) | 2025.01.21 |
---|---|
Docker 설치 및 실행 (1) | 2025.01.20 |