연습 - 기존 Docker 이미지를 검색하여 로컬로 배포

완료됨

사용자 고유의 Docker 이미지를 빌드하고 실행하는 좋은 시작점은 Docker 허브의 기존 이미지를 가져와 컴퓨터에서 로컬로 실행하는 것입니다.

회사 애플리케이션의 개념 증명 차원에서, 여러분은 Docker 허브의 샘플 이미지를 실행하기로 합니다. 선택한 이미지는 기본 .NET Core ASP.NET 웹앱을 구현합니다. Docker 이미지를 배포하는 프로세스 설정을 마친 후에는 Docker를 사용하여 회사의 고유한 웹앱 중 하나를 실행할 수 있습니다.

이 연습에서는 Docker 허브의 이미지를 끌어와서 실행합니다. Docker의 로컬 상태를 검사하여 배포되는 요소를 이해할 것입니다. 마지막으로, 컴퓨터에서 컨테이너와 이미지를 제거할 것입니다.

중요

이 연습은 Azure가 아닌 컴퓨터에서 수행합니다. 이 연습을 진행하려면 Docker가 로컬로 설치되어 있어야 합니다. 다운로드: https://hub.docker.com/editions/community/docker-ce-desktop-windows/

Docker 허브에서 샘플 애플리케이션을 끌어와서 실행

  1. 컴퓨터에서 Docker를 시작합니다.

  2. 로컬 컴퓨터에서 명령 프롬프트 창을 엽니다.

  3. 다음 코드를 입력하여 Docker Hub 레지스트리에서 ASP.NET 샘플 앱 이미지를 끌어옵니다. 이 이미지는 Microsoft에서 개발한 샘플 웹 앱을 포함하며 Visual Studio에서 사용할 수 있는 기본 ASP.NET 템플릿을 기반으로 합니다.

    docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
    
  4. 다음 코드를 입력하여 이미지가 로컬로 저장되었는지 확인합니다.

    docker image ls
    

    aspnetapp 태그가 지정된 mcr.microsoft.com/dotnet/samples라는 리포지토리가 보일 것입니다.

  5. 다음 코드를 입력하여 샘플 앱을 시작합니다. -d 플래그를 사용하여 백그라운드, 비 대화형 앱으로 실행합니다. -p 플래그는 생성된 컨테이너의 포트 8080을 로컬로 포트 8080에 매핑하는 것입니다. 이 설정은 컴퓨터에서 이미 실행 중인 웹앱과의 충돌을 방지하기 위한 것입니다. 이 명령은 인스턴스에 대한 16진수 식별자로 응답합니다.

    docker run -d -p 8080:8080 mcr.microsoft.com/dotnet/samples:aspnetapp
    
  6. 웹 브라우저를 열고 샘플 웹 앱 http://localhost:8080에 대한 URL을 입력합니다. 아래 스크린샷에서 보이는 페이지가 표시되어야 합니다.

    Screenshot of the sample web app running in a browser.

로컬 Docker 레지스트리의 컨테이너 검사

  1. 명령 프롬프트에서 다음 명령을 실행하여 로컬 레지스트리에서 실행 중인 컨테이너를 확인합니다.

    docker ps
    

    출력은 다음과 비슷해야 합니다.

    CONTAINER ID   IMAGE                                             COMMAND                  CREATED          STATUS          PORTS                  NAMES
    96c851831ade   mcr.microsoft.com/dotnet/samples:aspnetapp   "dotnet aspnetapp.dll"   22 minutes ago   Up 22 minutes   0.0.0.0:8080->80/tcp   eager_montalcini
    

    COMMAND 필드는 dotnet aspnetapp.dll 명령을 실행하여 시작한 컨테이너를 보여줍니다. 이 명령은 aspnetapp.dll(샘플 웹앱의 코드)에서 코드를 시작하는 .NET Core 런타임을 호출합니다. 포트 필드는 이미지의 포트 8080이 컴퓨터의 포트 8080에 매핑되었음을 나타냅니다. STATUS 필드는 애플리케이션이 여전히 실행 중인 것을 보여줍니다. 컨테이너 NAME을 기록해 둡니다.

  2. 다음 명령을 실행하여 Docker 컨테이너를 중지하고 <NAME> 자리 표시자를 이전 명령의 출력 이름으로 바꿉니다.

    docker container stop <NAME>
    
  3. 다음 명령을 실행하여 컨테이너가 더 이상 실행되지 않는지 확인합니다. -a 플래그는 이 명령이 현재 실행 중인 컨테이너뿐 아니라 모든 컨테이너의 상태를 보여준다는 것을 나타냅니다. 출력에는 컨테이너의 상태가 Exited로 표시됩니다.

    docker ps -a
    
  4. 웹 브라우저에서 샘플 웹 앱(http://localhost:8080/). 페이지를 새로 고칩니다. 연결 거부 오류와 함께 실패할 것 입니다.

로컬 레지스트리에서 컨테이너와 이미지를 제거합니다.

  1. 컨테이너가 중지되었지만, 여전히 로드되고 다시 시작할 수 있습니다. 명령 프롬프트 창에서 다음 명령을 실행하여 제거하고 <NAME> 자리 표시자를 컨테이너 이름으로 바꿉니다.

    docker container rm <NAME>
    
  2. 다음 명령을 실행하여 컨테이너가 제거되었는지 확인합니다. 이 명령이 더 이상 컨테이너를 나열하지 않아야 합니다.

    docker ps -a
    
  3. 현재 컴퓨터에서 사용 가능한 이미지를 나열합니다. 출력에는 샘플 리포지토리가 표시되어야 합니다.

    docker image ls
    
  4. 레지스트리에서 이미지를 제거합니다.

    docker image rm mcr.microsoft.com/dotnet/samples:aspnetapp
    
  5. 출력에는 태그가 지정되지 않고 삭제된 수많은 항목이 나열되어야 합니다. 다음 명령을 실행하여 이미지를 다시 나열하고 microsoft/dotnet-samples 웹 앱의 이미지가 사라졌는지 확인합니다.

    docker image ls