Windows에서 콘솔 응용 프로그램 컨테이너를 작성하려면(시리즈 중 하나)

6860 단어 consoleWindowsDocker

문장의 목적


HelloWorld 수준의 초간단.Docker 컨테이너에서 NET 콘솔 응용 프로그램을 실행하는 데 필요한 단계를 알아봅니다.나는 이것을 기점으로 더욱 복잡한 컨트롤러 응용 프로그램을 용기화할 수 있다고 생각한다.

사용 환경

  • Windows 10주년 업데이트
  • Docker for Windows Community Edition (version 17.03.1-ce)
  • Visual Studio 2017 Enterprise
  • 시작하기 전에 하고 싶은 거.

  • Docker를 Windows Container로 사전 전환(재부팅이 필요할 수 있음)
  • dockerpull microsoft/windowsservercore를 미리 실행합니다(다운로드하는 데 시간이 오래 걸릴 수 있기 때문)
  • 콘솔 응용 프로그램의 프로젝트 만들기


    흔히 볼 수 있는 일.NET/C#의 콘솔 응용 프로그램입니다.

    프로그램은 Docker에서 컨테이너를 실행할 때 임의의 값을 전달하는 것을 보여주기 위해 명령줄에 지정된 값을 출력합니다.
    Program.cs
    using System;
    using System.Linq;
    
    namespace ConsoleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Hello world");
                Console.WriteLine((args.Any() ? 
                    String.Join(Environment.NewLine, args) : "<no argument>"));
            }
        }
    }
    
    정상적으로 수행하면 이런 느낌이야.

    프로젝트에 문서 파일 추가



    Dockerfile 컨텐츠
    FROM microsoft/windowsservercore
    WORKDIR /app
    COPY obj/Docker/publish .
    ENTRYPOINT ConsoleApp.exe
    
    "Docker의 공식 등록표에는 microsoft라는 사용자가 공개한 Windows ServerCore라는 이미지를 바탕으로 (없으면 다운로드).컨테이너에서 앱이라는 디렉토리로 이동합니다.로컬 obj/Docker/publish의 파일을 복사합니다.컨테이너가 부팅될 때 있는 Console App.exe를 실행합니다."그런 느낌의 각본이야.

    프로젝트 구축


    일반적으로 구축되지만 수동으로 구축 출력을obj/Docker/publish 폴더로 복사합니다.
    이것은 예를 들어 bin/debug로 직접 변경되었지만 순조롭지 못하다Sbuild에서도 같은 하드 인코딩 경로 문제가 존재합니다를 보고했습니다. 이 부분은 잘못된 것 같습니다.회피 방법을 아시는 분은 알려주세요.
    어쨌든 여기는 핵심이 아니기 때문에 수동으로 복사했습니다.물론 구축 절차로 자동화하는 것이 좋다.

    Docker 이미지 만들기


    Dockerfile이 포함된 디렉토리로 이동하여 다음 명령을 수행합니다.
    docker build -t hello .
    
    결과는 이런 느낌이었다.아래Successfully built 5f1494ed2cbb가 있습니다.이것은 이미지의 ID입니다. (이름을 지정할 수도 있지만 먼저 이렇게 하십시오.)
    docker images 명령도 그림이 잘 되었는지 확인할 수 있습니다.hello라는 이미지 (저장소) 를 볼 수 있습니다.

    Docker 컨테이너 실행


    다음 명령을 사용하여 Docker 이미지를 컨테이너로 실행합니다.명령줄 구성도 지정합니다.
    docker run hello this is fun
    
    집행 결과는 이렇다.

    가능성이 커질까요?예를 들어 이 컨트롤러 프로그램이 실제로 상당히 번거로운 설치 절차나 설정을 필요로 한다면 Dockerfile에서 절차를 자동화하거나 그림으로 태울 수 있으며, 필요할 때 Docker의 용기로 모든 기계에서 실행할 수 있다.
    이 부근의 응용에 관해서 나도 지금 칭찬을 아끼지 않는 조사 중이다.

    청소하다


    남은 상태가 싫어서 청소 순서.
    먼저 현재 실행되지 않은 컨테이너를 포함한 모든 컨테이너를 표시합니다.hello의 인상을 주는 컨테이너.참고로 용기의 ID는 78ec1e87e172입니다.
    docker ps -a

    컨테이너를 삭제하려면 다음을 수행합니다.다음 명령.표지는 용기에 국한될 뿐만 아니라 짧고 독특하기만 하면 식별할 수 있다.이 정도면 78이면 충분해.
    docker rm 78
    

    그런 다음 이미지를 삭제합니다.일단 확인해.
    docker images
    

    그런 다음 삭제합니다.rmi는 rm와 image의 i의 합성이라는 것을 기억하면 된다.hello는 이미지의 저장소 이름이지만 ID도 입니다.
    docker rmi hello
    

    이렇게 하면 예뻐진다.

    겸사겸사 말씀드리다


    Docker for Windows에는 두 가지 분리 모드가 있습니다.Hyper-v 및 processHyper-v는 무겁지만 격리 상태가 더 좋습니다.프로세스는 더 가볍지만 격리 상황은 약간 약하다.
    그렇다면 Windows 10으로 프로세스 격리 모드를 빠르게 진행하려면
    docker run --isolation process hello
    
    안타깝게도 Windows 10은 Hyper-V 모드만 가능합니다.

    Windows Server 2016이 필요합니다.

    좋은 웹페이지 즐겨찾기