MS 공식홈페이지 예제
위의 링크에 나온 예제를 참고해서 만들었다.
미리 기본 .NET으로 console program을 세팅하고,
무한 loop를 출력하는 코드를 만들었다.
dotnet new console -o App -n NetCore.Docker
아래와 같이 기본적으로 형성된다.
작성한 코드는 아래와 같다.
// Program.cs
using System;
namespace code
{
class Program
{
static void Main(string[] args)
{
int i = 1;
while (i > 0)
{
Console.WriteLine(i);
i++;
}
}
}
}
dotnet run
을 실행하면 잘 작동함을 볼 수 있다.
WSL2 Ubuntu linux 환경에서 개발을 진행하고 있기 때문에, 이에 맞춰 C# 컴파일 프로그램을 설치했다.
sudo apt update
sudo apt install mono-devel // compile
sudo apt install mono-runtime // exe run
Program.cs 가 존재하는 위치로 가서
mono-csc Program.cs
를 실행하면 cs 파일과 같은 이름의 exe 파일이 생성됨을 볼 수 있다.
mono Program.exe
를 실행하면 아래와 같이 잘 작동함을 볼 수 있다.
Docker image에 application을 추가하기 전에 먼저 앱을 게시하는 것이 선행되어야 한다.
dotnet publish -c Release
를 실행한다.
ls bin/Release/net5.0/publish
을 통해서 NetCore.Docker.dll 파일이 생성되었는지 확인한다.
그림과 같은 위치에 Dockerfile을 생성한다.
FROM mcr.microsoft.com/dotnet/aspnet:5.0 COPY bin/Release/net5.0/publish/ App/ WORKDIR /App ENTRYPOINT ["dotnet", "NetCore.Docker.dll"]
코드는 위와 같이 입력한다.
( 해석은 Day2 자료 참조 )
그 뒤 아래의 명령어로 Docker image를 만든다.
(-f 의 위치는 현재 Dockerfile이 있는 곳에서 생성했기 때문에 작성안함)
docker build -t practice-image .
docker images
로 확인하면 아래와 같이 잘 생성됐음을 알 수 있다.
확인차로 image를 실행하면 잘 됨을 알 수 있다.
docker run practice-image
위에 생성한 이미지를 바탕으로 Container를 만들어보자.
docker create --name practice-container practice-image
잘 만들어졌는지 확인을 하자.
docker ps -a
docker start practice-container
라고 실행을 하면 당장은 console에 보이지 않는다.
docker attach --sig-proxy=false practice-container
를 입력하면 현재 진행되는 모습을 볼 수 있다.
멈추고 싶다면
docker stop practice-container
지우고 싶다면
docker rm practice-container
를 입력하면 된다.
먼저 Docker에 login 한다.
sudo docker login
만약 지금까지 똑같이 따라왔다면 Docker image의 이름을 바꿔줘야한다.
sudo docker tag practice-image:latest dnflwlq3231/practice-image:latest
위에서 아래처럼 바뀐것을 확인할 수 있다.
(dnflwlq3231 부분에 본인의 docker id 를 입력하면 된다!)
다음으로 Docker에 배포한다.
sudo docker push dnflwlq3231/practice-image:latest
잘 올라왔음을 확인할 수 있다.