[도커(Docker)] Next.js 프로젝트 도커 설치부터 이미지 파일 생성까지
2024. 8. 1. 16:18ㆍ클라이언트/웹 기술
1개월 인턴 진행 중 백엔드에서 배포를 진행하기로 했는데 프론트에서 도커 이미지 파일을 생성해서 주어야 한다는 답변을 받았다. 그래서 그 과정을 기록하려고 한다.
1. 도커 설치 (Windows 기준)
https://www.docker.com/products/docker-desktop/
Docker Desktop: The #1 Containerization Tool for Developers | Docker
Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.
www.docker.com
링크 접속 후 다운을 받는다.
2. powershell 설정하기
관리자 권한으로 powershell을 실행한다.
아래 명령어를 각각 차례로 입력한다.
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
wsl --set-default-version 2
+ https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
링크를 눌러 패키지를 설치해 WSL2로 업그레이드하고 재부팅.
3. docker 실행을 한다. 그럼 WSL error가 반겨준다.
Docker Desktop - Unexpected WSL error
deploying WSL2 distributions
ensuring main distro is deployed: deploying "docker-desktop": importing WSL distro
"WSL2는 현재 컴퓨터 구성에서 지원되지 않습니다.\r\n"가상 머신 플랫폼" 선택적 구성 요소를 사용하도록 설정하고
BIOS에서 가상화가 사용하도록 설정되어 있는지 확인하세요.\r\n실행하여 "가상 머신 플랫폼"을 사용하도록 설정:
wsl.exe --install --no-distribution\r\n자세한 내용은 https://aka.ms/enablevirtualization
참조하세요.\r\nError code: Wsl/Service/RegisterDistro/CreateVm/HCS/HCS_E_HYPERV_NOT_INSTALLED\r\n"
output="docker-desktop": exit code: 4294967295: running WSL command wsl.exe
C:\Windows\System32\wsl.exe --import docker-desktop <HOME>\AppData\Local\Docker\wsl\main
C:\Program Files\Docker\Docker\resources\wsl\wsl-bootstrap.tar --version 2: WSL2는 현재 컴퓨터 구성에서 지원되지 않습니다.
"가상 머신 플랫폼" 선택적 구성 요소를 사용하도록 설정하고 BIOS에서 가상화가 사용하도록
설정되어 있는지 확인하세요.
실행하여 "가상 머신 플랫폼"을 사용하도록 설정: wsl.exe --install --no-distribution
자세한 내용은 https://aka.ms/enablevirtualization 참조하세요.
Error code: Wsl/Service/RegisterDistro/CreateVm/HCS/HCS_E_HYPERV_NOT_INSTALLED
: exit status 0xffffffff
checking if isocache exists: CreateFile \wsl$\docker-desktop-data\isocache: The network name cannot be found.
4. error해결
- 첫 번째 방법
- windows기능 켜기/끄기 검색 후 실행
- Linux용 Windows 하위 시스템 기능 켜기
- 가상 머신 플랫폼 기능 켜기
- Hyper-V기능 켜기 (윈도우 버전에 따라 없을 수 있음.)
- 두 번째 방법
- window 재부팅 후 DEL 또는 F12 연타를 해서 BIOS모드에 진입한다.
- pc마다 다르지만
- Intel (VMX) Virtualization Technology 혹은 svm mode 켜기(제조사마다 다를 수 있다.)
나는 virtual까지만 검색했다. 대충 가상환경 기능 실행 같은 문구면 켜주면 되는 것 같다.
위의 과정을 거치고 재부팅 한번 더 해준다.
5. 드디어 docker 실행
이제 이미지 파일을 생성할 프로젝트에 도커 코드를 작성한다.
- root에 Dockerfile 생성
// Dockerfile
# 1. 베이스 이미지 설정 (Node.js 18 사용)
FROM node:18-alpine
# 2. 작업 디렉토리를 설정
WORKDIR /app
# 3. 의존성 파일을 복사하고 설치
COPY package.json yarn.lock ./
RUN yarn
# 4. 환경 변수 파일을 복사 or env를 compose로 했을 경우는 제외
COPY .env.local .env.local
# 4. 나머지 프로젝트 파일을 복사
COPY . .
# 5. start.sh 파일 복사 및 실행 권한 부여
COPY start.sh /app/start.sh
RUN chmod +x /app/start.sh
# 6. 빌드
RUN yarn build
# 7. 포트 설정
EXPOSE 3000 4000
# 8. 애플리케이션 시작 명령어 설정
CMD ["/app/start.sh"]
현재 프로젝트는 json-server를 사용했기 때문에 pakage.json/script에 추가한 yarn server 명령어를 같이 실행 하고 3000번과 4000번 포트를 두 개 띄워야 하는 상황이므로 CMD를 따로 설정해 주었다.
- root에 start.sh 파일 생성
여기서 app 시작 명령어를 커스텀할 수 있다.
//start.sh
# json-server 실행 (예: db.json이 데이터베이스 파일인 경우)
yarn server &
# 애플리케이션 서버 실행 (yarn start)
yarn start
- root에 .dockerignore파일 생성
.gitignore와 같이 docker파일 생성에 포함시키지 않을 파일들을 지정해 준다.
//.dockerignore
node_modules
.env.local
yarn-debug.log*
yarn-error.log*
.vercel
*.tsbuildinfo
next-env.d.ts
- root에 docker-compose.yml 파일 생성
.env파일을 도커 이미지 파일에 포함시키지 않기 위해 설정을 해준다.
//docker-compose.yml
version: '3'
services:
app:
image: your-image-name
build: .
ports:
- "3000:3000"
- "4000:4000"
env_file:
- .env
6. docker 이미지 생성
이제 이미지 생성 후 컨테이너를 실행하여 잘 동작하는지 확인하면 된다.
터미널에 아래 명령어 입력.
// 이미지 생성
docker build -t your-image-name .
// 컨테이너 실행
docker-compose up
생성된 도커 이미지 파일을 저장소에 push 하기
//터미널
docker tag <image 이름> <url>/ 원하는 이름
docker login <url> 해서 저장소 로그인
docker push <url>/ 1번에서 url뒤에 쓴 이름
'클라이언트 > 웹 기술' 카테고리의 다른 글
[Typography(타이포그래피)] Typography 설치부터 적용까지 (0) | 2024.08.01 |
---|---|
실행컨텍스트(스코프,변수,객체,호이스팅) (0) | 2024.02.23 |
bit, byte, memory (0) | 2024.02.23 |
WEB의 기본 (0) | 2024.02.23 |