asp.net core를 docker로 움직여 본 메모

ASP.NET CORE 사용



docker로 설치하여 사용해보십시오.
공식 의 샘플은 배포용과 같았으므로 개발 환경의 샘플을 볼 수 있도록 해본다.

환경


  • docker1.12.3
  • ubuntu-16.04 (가상 환경)
  • vagrant1.8.4
  • virtualbox5.1
  • windows10

  • 폴더 구조


    dotnet
      - bin # dockerコマンド用シェルファイル
        - start.sh            # docker-compose run dotnet /bin/bash
        - container_build.sh  # docker-compose build
        - bash.sh             # docker-compose run dotnet /bin/bash
      - docker-compose.yml
      - dotnet
        - Dockerfile
        - project # アプリケーションプロジェクトディレクトリ
          - src
            - SampleWebApplication # yo aspnet generatorで作成
            + bin
            + Controllers
            + Data
            + Models
            + obj
            + Properties
            + Services
            + Views
            + wwwroot
            - .bowerrc
            - .gitignore
            - appsettings.Development.json
            - appsettings.json
            - bower.json
            - global.json
            - Program.cs # URLをdocker用に修正
            - README.md
            - SampleWebApplication.csproj
            - SampleWebApplication.db
            - Startup.cs
            - web.config
      - nginx # docker外からasp.netにアクセスできるようにプロキシとして利用
        - Dockerfile
        - default.conf 
    

    각 파일 설정



    가상 환경 설정.
    # ansibleインストール用shell
    $ansible_install = <<SHELL
        if ! type ansible > /dev/null 2>&1; then
          sudo apt-get update
          sudo apt-get -y install libffi-dev libssl-dev python-pip # package管理ツール
          sudo pip install --upgrade pip
          sudo pip install ansible           # provisioning ツール
        fi
    SHELL
    
    # virtual machine設定
    Vagrant.configure(2) do |config|
      config.vm.box = "bento/ubuntu-16.04"
      config.vm.box_version = "2.2.9"
    
      # 繋がらないときは/etc/network/interfaces を確認。enp0s8に設定してやる。
      config.vm.network "private_network", ip: "192.168.50.10", auto_config:false
    
      config.vm.provider "virtualbox" do |vm|
        vm.memory = 2048
        vm.linked_clone = true
        vm.customize [ "modifyvm", :id, "--ioapic", "on"]
        # vm.gui = true # 起動が止まるときの確認用
      end
    
      config.vm.provision "shell", inline: $ansible_install
      config.vm.provision "shell", inline: <<-SHELL
        sudo ansible-playbook -i /vagrant/provision/playbooks/inventory/hosts /vagrant/provision/playbooks/site.yml -c local
      SHELL
    end
    

    docker-compose 구성 파일.

    docker-compose.yml
    version: '2'
    services:
      proxy:
        build: ./nginx
        links:
          - dotnet
        ports:
          - "80:80"
      dotnet:
        build: ./dotnet
        environment: 
          - ASPNETCORE_ENVIRONMENT=Development
        volumes:
          - ./dotnet/project/src/SampleWebApplication/Program.cs:/aspnetapp/project/src/SampleWebApplication/Program.cs
    

    asp.net 설정



    dotnet/Dockerfile
    FROM microsoft/aspnetcore-build
    WORKDIR /aspnetapp
    COPY . .
    WORKDIR /aspnetapp/project/src/SampleWebApplication
    RUN dotnet restore
    RUN bower install --allow-root
    ENTRYPOINT ["dotnet", "run"]
    

    ※SampleWebApplication는 yo-generator aspnet 로 작성.yo aspnet mvc bootstrap SampleWebApplication
    주소 및 포트 지정.

    dotnet/project/src/SampleWebApplication/Program.cs
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Hosting;
    
    namespace SampleWebApplication
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                var host = new WebHostBuilder()
                    .UseKestrel()
                    .UseContentRoot(Directory.GetCurrentDirectory())
                    .UseIISIntegration()
                    .UseUrls("http://0.0.0.0:5001") // <-- 追記.ポート番号は任意。
                    .UseStartup<Startup>()
                    .Build();
    
                host.Run();
            }
        }
    }
    

    프록시



    nginx/Dockerfile
    FROM nginx
    COPY default.conf /etc/nginx/conf.d/default.conf
    

    dotnet의 50001 포트에 80번 포트의 통신을 전달하는 프록시 설정.

    nginx/default.conf
    server{
        listen 80;
        server_name 192.168.50.10;
    
        location / {
    
            proxy_pass http://dotnet:5001;
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
            proxy_redirect off;
            proxy_buffering off;
            proxy_set_header Host 192.168.50.10;
            proxy_set_header X-RealIP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    

    이 시점에서 소스



    github

    실행



    컨테이너를 만든 후 asp.net을 얻는다.
    ./bin/container_build.sh # コンテナ作成
    ./bin/start.sh           # 実行
    

    브라우저에서 htp //192.168.50.10에 액세스하면 다음과 같은 화면이 표시됩니다.



    참조



    dotnet docker
    aspnet docker
    docker compose

    좋은 웹페이지 즐겨찾기