미루고 미루다 드디어 Docker를 활용하여 배포를 한다.
개념은 나중에 정리하고 바로 시작해보자.
1) next.config.js 파일 수정
/** @type {import('next').NextConfig} */
const path = require('path');
const withImages = require('next-images');
module.exports = {
output: 'standalone',
distDir: 'build',
reactStrictMode: true,
async rewrites() {
if (process.env.NODE_ENV === "production") {
return [
{
source: process.env.PRODUCTION_JAVA_SERVER_PATH,
destination: process.env.PRODUCTION_JAVA_SERVER_URL,
}
];
} else {
return [
{
source: process.env.JAVA_SERVER_PATH,
destination: process.env.JAVA_SERVER_URL,
}
];
}
},
};
2) .env.local 변경
NODE_ENV = 'development'
PRODUCTION_JAVA_SERVER_PATH = '/java/:path*'
PRODUCTION_JAVA_SERVER_URL = 'http://사용하는 IP 주소:8083/:path*'
JAVA_SERVER_PATH = '/java/:path*'
JAVA_SERVER_URL = 'http://localhost:8083/:path*'
3) Dockerfile 생성
# 위에서 도커 허브 node 이미지를 기반으로 로컬로 다운로드 및 캐싱 되었기 때문에 이미지를 가져올 수 있다.
FROM node:18.4.0
# 만약 컨테이너 안의 이미지의 경로가 /app 이런식으로 되어있다면 작업할 div 경로를 설정할 수도 있다.
# 설정해주면 COPY 의 두번째 경로를 ./ 이것으로 했을 때 자동으로 /app 경로가 된다.
WORKDIR /app
# package.json 파일을 복사한다. 만약 다시 빌드할 때 변경사항이 없을 경우 npm install까지 그냥 넘어간다.
COPY package.json /app
# 이미지를 받으면 npm install을 자동으로 해줌
RUN npm install
# 어떤 파일이 이미지에 들어가야 하는지
# 첫 번째 .은 이 프로젝트의 모든 폴더 및 파일들 (Dockerfile을 제외한)
# 두 번째 .은 파일을 저장할 컨테이너 내부 경로 (ex /app)
COPY . /app
# 배포환경으로 설정
ENV NODE_ENV=production
RUN npm run build
# 도케에게 우리가 서버를 실행할 포트를 말해준다.
EXPOSE 3000
# 이미지가 생성될 때 실행되지 않고 컨테이너가 실행될 때 수행하는 명령어
CMD ["npm","start"]
가급적 개발 서버와 Node 버전을 맞춰주어야 한다.
필자는 NVM 을 활용하여 버전을 맞춰주었다.
4) dockerignore 생성
/.dockerignore
.node_modules
.next
5) 이미지 빌드
$ docker build -t 도커허브이름/web-client:버전정보 . ex) docker build -t ohkwonseok/web-client:1.0.1 .
만약 맥북에서 빌드하고 리눅스, amd64 서버에 배포할 예정인 경우
$ docker buildx build --platform=linux/amd64 -t 도커허브이름/web_client:버전정보 .
ex) docker buildx build --platform=linux/amd64 -t ohkwonseok/web-client:1.0.1 .
개발서버 및 배포서버의 운영체제에 따라 알맞게 선택하여 둘 중 하나를 사용하면 된다.
6) Dockerhub Repository 생성

회원가입을 안했을 경우 회원가입을 해주고, 이미 회원가입이 되어있다면
우측 상단의 Sign In 을 클릭하여 로그인한다.
*** 이때, username 이 실질적인 docker hub name 이 되므로, 비교적 간단하게 작성바란다.
명령어에 계속 작성할 일이 많다. ***
7) Create repository 클릭하여 생성한다. (별로 어렵지 않으니 나머지 부분은 생략)

8) 이제 빌드한 것을 도커허브에 업로드한다.
$ docker push 도커허브이름/web-client:1.0.1
ex) docker push ohkwonseok/web-client:1.0.1
*** 이제부터 리눅스 서버에 도커를 배포하는 것을 진행한다. ***
1) 도커 설치
$ sudo wget -qO- http://get.docker.com/ | sh
2) 도커 로그인
$ docker login
3) 도커 시작
$ sudo systemctl start docker
4) 도커허브에서 이미지 파일 받기(Pull)
$ docker pull 도커허브이름/web_client:버전정보
ex) docker pull ohkwonseok/web_client:1.0.1
5) 이미지 id 확인
$ docker images
6) 이미지 컨테이너 실행
$ docker run -p 80:3000 -d --rm 도커허브이름/web_client:버전정보
3000 번 포트를 80포트로 전환 실행한다.
끝~~!
'Docker' 카테고리의 다른 글
[Docker] Spring Boot build 및 서버 배포 (1) | 2025.02.17 |
---|---|
[Docker] Image별 삭제, 태그네임 삭제,전체 삭제 (0) | 2025.02.17 |
[Docker] curl (56) Recv failure: Connection reset by peer (0) | 2025.02.14 |
[Docker] 도커 자동 재시작 및 로그인 설정 (0) | 2025.02.14 |
[Docker] 도커 실시간 로그 확인 (0) | 2025.02.14 |