/////////////////// 2021 - 12 - 23 수정
dotnet 6 버전 출시와 함께 dockerfile도 수정해줘야한다.
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY zomdleageApiServer.csproj .
RUN dotnet restore "프로젝트이름.csproj"
COPY . .
RUN dotnet build "프로젝트이름.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "프로젝트이름.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "프로젝트이름.dll"]
///////////////////
도커와 컨테이너에 대한 자세한 설명은 생략한다..
도커 설명 : 도커 (소프트웨어) - 위키백과, 우리 모두의 백과사전 (wikipedia.org)
컨테이너 설명 : 컨테이너의 개념과 이점 | Google Cloud
도커 사용하기
이 글은 Docker Desktop on Windows 을 기준으로 작성되었다.
Windows 10 64-bit: Pro, Enterprise, or Education (Build 16299 or later) 만 지원하며 Pro 를 기준으로 작성되었다.
Windows 10 Home 의 경우 Install Docker Desktop on Windows Home | Docker Documentation 을 참고하자.
윈도우10 설정
먼저 Hyper-v 를 활성화 시켜줘야한다.
윈도우 로고 - 오른쪽 클릭 - 앱 및 기능 - 프로그램 및 기능 - Windows 기능 켜기/끄기 - Hyper-v 활성화 해준다.
Docker Desktop on Windows
도커 데스크탑을 설치해준다. 도커 데스크탑은 리눅스를 일단 가상화를 한 후 그 위에서 컨테이너를 돌린다.
Docker Desktop on Windows : Install Docker Desktop on Windows | Docker Documentation
위 사이트에 들어간 후 Download from Docker Hub 를 눌러 다운로드 받은 후 설치한다.
Containerising a Blazor Server App
필수 구성 요소
먼저 컨테이너화를 시킬 blazor server 앱이 필요하다. 글쓴이는 기존의 작업하던 blazor api server 를 사용할것이다.
Dockerfile 만들기
Visual Studio를 사용하는 경우 프로젝트을 오른쪽 클릭 후 추가 - Docker 지원 을 선택한다.
그런 다음 대상 OS 를 물어보는 창이 나온다.
기본은 리눅스를 선택하고 진행한다.
윈도우에서 특정해서 해야할 일이 있다면 윈도우를 선택한다.
선택을 했다면 확인 을 눌러주면 몇초 후 프로젝트에 Dockerfile 이라는 파일이 생길 것이다.
이 파일은 그대로 사용할 경우 도커 이미지 파일이 성공적으로 빌드가 되지 않는다. 아래와 같이 수정을 해야한다.
출처 : Containerising a Blazor Server App (chrissainty.com)
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY zomdleageApiServer.csproj .
RUN dotnet restore "프로젝트이름.csproj"
COPY . .
RUN dotnet build "프로젝트이름.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "프로젝트이름.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "프로젝트이름.dll"]
80 포트는 http
443 포트는 https 이다.
이미지 제작
인제 이미지를 정의하는 dockerfile 이 만들어졌으니 프로젝트를 도커 이미지로 만들어보자.
터미널로 dockerfile 이 있는 위치로 이동한 후 아래 명령어를 실행시켜준다.
docker build -t blazor-server-with-docker .
blazor-server-with-docker 는 이미지 이름이며 원하는대로 수정해주면 된다.
명령어 끝에 있는 . (점) 은 Docker 에게 현재 디렉토리에서 Dockerfile 을 찾도록 지시한다.
실행하면 주루룩 명령어가 실행되며 도커 이미지가 만들어진다.
Successfully tagged blazor-server-with-docker:latest 라는 메세지가 터미널에 찍히면 이미지가 다 만들어진것이다.
컨테이너 시작
제작한 이미지가 제대로 작동하는지 테스트를 해보자. 아래 명령어를 실행하여 새로운 컨테이너를 시작한다.
docker run -p 8080:80 blazor-server-with-docker
포트 뒤에 있는 blazor-server-with-docker 는 자신이 설정한 이미지 이름을 입력해준다.
warn: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[60]
Storing keys in a directory '/root/.aspnet/DataProtection-Keys' that may not be persisted outside of the container. Protected data will be unavailable when container is destroyed.
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
No XML encryptor configured. Key {6016a2c4-0ac2-47cf-9359-c07c03c328eb} may be persisted to storage in unencrypted form.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: http://[::]:80
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
Content root path: /app
warn: Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware[3]
Failed to determine the https port for redirect.
info: Microsoft.Hosting.Lifetime[0]
Application is shutting down...
같이 이미지에서 새로운 컨테이너가 만들어진것이며 http://localhost:8080/ 로 접속하면 자신의 홈페이지를 확인 할 수 있다.
잘 사용해보자!
최근댓글