2017年12月4日 星期一

建立Hello World Docker Image 【引用.NET Standard】 - 【C# .Net Core 學習筆記】

目標:

建構一個 .Net Core console 專案,並且建構一個 類別庫 (.NET Standard) 供其引用

環境:

Net Core 2.0.3
Docker version 17.11.0-ce, build 1caf76c

## Net Core Console 專案引用 .NET Standard 範例

// 建立 console 專案
dotnet new console -lang c# --name myApp

// 建立 .Net Standard Library
dotnet new classlib -lang c# --name myLibrary

// myLibrary/Class1.cs 修改內容如下
using System;

namespace myLibrary

    public class Class1

    {

      static public void TestRun()

      {

        Console.WriteLine("Run {0}.{1}."

          , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName

          , System.Reflection.MethodBase.GetCurrentMethod().Name);

      }

    }

}


// myApp 加入並引用參考 myLibrary.csproj
cd myApp 
dotnet add reference ..\myLibrary\myLibrary.csproj

// myApp/Program.cs 修改內容如下

using System;

namespace myApp

{

  class Program

  {

      static void Main(string[] args)

      {

          Console.WriteLine("Hello World!");

          myLibrary.Class1.TestRun();

          Console.ReadLine();

      }

  }

}


// 試運行
dotnet restore
dotnet run


// 運行結果如下
PS D:\NetCoreDockerImage2Example\myApp>dotnet run
Hello World!
Run myLibrary.Class1.TestRun.



建立 Docker Image

建立 Dockerfile

在主資料夾內建立一個 Dockerfile 檔案, 內容如下

# copy csproj and restore as distinct layers

COPY myApp/*.csproj ./myApp/

COPY myLibrary/*.csproj ./myLibrary/



WORKDIR /app/myApp

RUN dotnet restore



# copy everything else and build

WORKDIR /app



COPY myApp/ ./myApp/

COPY myLibrary/ ./myLibrary/



WORKDIR /app/myApp

RUN dotnet publish -c Release -o out



# build runtime image

FROM microsoft/dotnet:runtime

WORKDIR /app/myApp

COPY --from=build-env /app/myApp/out ./

ENTRYPOINT ["dotnet", "myApp.dll"]

### 其中最後一行中的 "myApp.dll" 要修改對應到你專案產生的dll名稱

執行編譯 Docker Image

docker build -t dotnetmyapp2 .


執行成功會有以下訊息 (20ae9d152e3d 這個每次編譯都不一樣得值)
Successfully built 20ae9d152e3d Successfully tagged dotnetmyapp2:latest

執行 docker 

docker run --name testdotnetmyapp dotnetmyapp2

可以看到執行回應
Hello World!
Run myLibrary.Class1.TestRun.



以上範例放上 GitHub 連結如下

https://github.com/JadenDream/NetCoreDockerImage2Example






2017年11月26日 星期日

建立Hello World Docker Image - 【C# .Net Core 學習筆記】

本範例所使用的軟體版本如下

Net Core 2.0.3

確認 Net Core 版本
dotnet --version

升級說明
https://www.microsoft.com/net/learn/get-started/windows#windowsvs2015



建立 Net Core Console 專案

// 建立專案

dotnet new console --name myApp
會幫你自動產生專案檔 myApp.csproj 以及對應的 Program.cs
Program.cs 內容
using System;

namespace myApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

// 還原專案相依

dotnet restore

// 執行看看是否OK

dotnet run

建立 Docker Image

建立 Dockerfile

在主資料夾內建立一個 Dockerfile 檔案, 內容如下

Dockerfile
###
FROM microsoft/dotnet:sdk AS build-env

WORKDIR /app



# copy csproj and restore as distinct layers

COPY *.csproj ./

RUN dotnet restore



# copy everything else and build

COPY . ./

RUN dotnet publish -c Release -o out



# build runtime image

FROM microsoft/dotnet:runtime

WORKDIR /app

COPY --from=build-env /app/out ./

ENTRYPOINT ["dotnet", "myApp.dll"]



### 其中最後一行中的 "myApp.dll" 要修改對應到你專案產生的dll名稱

執行編譯 Docker Image

docker build -t dotnetmyapp2 .



執行成功會有以下訊息 (20ae9d152e3d 這個每次編譯都不一樣得值)
Successfully built 20ae9d152e3d

Successfully tagged dotnetmyapp2:latest



執行 docker 

docker run --name testdotnetmyapp dotnetmyapp2


可以看到執行回應
Hello World!




以上範例放上 GitHub 連結如下

https://github.com/JadenDream/NetCoreDockerImageExample




2017年11月23日 星期四

切換入背景執行的Container [attach] - Docker 學習筆記



在 Docker 裡面,其實是有分 Detached 和 foreground
所謂的 Detached 就是所謂的背景執行 ( -d 參數 )
背景執行的時候,基本上,要和 Container 溝通,就只能靠網路芳鄰等機制了;
也就是說,沒辦法用終端機進行溝通,除非我們再把他給 attach 。

所以我門就 attach 的方式來練習

先 run 一個 ubuntu bash Container 並設定為背景執行
docker run --name test-attach -d -it ubuntu bash

在來使用 attach 方式切換上該 Container

docker attach test-attach

就可以直接 Attach 上該 Container 了


離開Contaiver


結束Contaiver並離開


另外比較需要注意的是當你attach 上該 Container

像是在 nbuntu bash 的container 上,如果下了 exit 則會中止該 container

並且退出

root@75318e397eb3:/# exit

exit

PS M:\>

只離開並且讓原程序進入 Datached 模式


CTRL-p CTRL-q

更多的操作可以參考 docker docs