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

2016年7月21日 星期四

JMeter 筆記 - 取樣間隔

JMeter 使用版本: 3.0 r1743807

如果你想要在迴圈取樣中設定間隔時間的話,可以使用固定間隔功能

新增->計時器->固定時隔



兩層迴圈間隔設定

有種情況是如果你在迴圈中想將你設定的人員資料跑完後Sleep30秒後在繼續進入迴圈,這時候你就需要使用固定間隔+測試動作來達到你期望的功能




我們只需要增加測試動作即可
新增->取樣->測試動作



設定動作為 "暫停"
期間為 "30000" (單位:毫秒)

這樣就可以完成想要的功能了!








2016年2月27日 星期六

Joomla-後台設計-Checkboxes學習筆記

以下是 joomla checkboxes 的官方說明
https://docs.joomla.org/Checkboxes_form_field_type

在使用這個欄位類型時,對應的Mysql 可以使用 char(12) 類型

然後需要修改在後台元件的以下檔案
administrator\components\com_name\tables\com_name.php

必須 Overloaded bind 這個 function, 如已經有Overloaded 此 function 了則直接加上對應欄位的語法
這邊假設欄位名稱為 checkboxes_test
則需要在bind 這個 function 中加入以下語法
if (!empty($array['checkboxes_test']))
{
 if (is_array($array['checkboxes_test']))
 {
  $array['checkboxes_test'] = implode(',', $array['checkboxes_test']);
 }
 elseif (strpos($array['checkboxes_test'], ',') != false)
 {
  $array['checkboxes_test'] = explode(',', $array['checkboxes_test']);
 }
}
else
{
 $array['checkboxes_test'] = '';
}


如果你是還沒有 overloaded bind function 的話,則在元件table類別加上以下function
public function bind($array, $ignore = '')
{
 if (!empty($array['checkboxes_test']))
 {
  if (is_array($array['checkboxes_test']))
  {
   $array['checkboxes_test'] = implode(',', $array['checkboxes_test']);
  }
  elseif (strpos($array['checkboxes_test'], ',') != false)
  {
   $array['checkboxes_test'] = explode(',', $array['checkboxes_test']);
  }
 }
 else
 {
  $array['checkboxes_test'] = '';
 }

 return parent::bind($array, $ignore);
}



...

2016年1月18日 星期一

Redis 中 Hash 資料設定 timeout(生存時間)

假如我們設定一個hash資料如下
HMSET tetswebsite google www.google.com yahoo www.yahoo.com

只要在加上以下命令即可設定該key資料的生存時間
EXPIRE tetswebsite 10


EXPIRE 說明:
EXPIRE key seconds
為給定KEY的資料設定生存時間,當該KEY過期時他會自動被刪除
seconds 單位為秒

2015年10月8日 星期四

Redis筆記-數據類型-String

Redis 數據類型 String


  1. 介紹

  2. String是redis最基本的類型,而且string類型是二進位安全的。

    也就是說String可以包含任何數據。

     比如jpg圖片或者序列化的對象。

    從內部實現來看其實string可以看作byte數組,最大上限是1G位元組。

    下面為string類型的定義。
       
    struct sdshdr {
        long len;
        long free;
        char buf[];
    };
    

    buf是個char數組用於存貯實際的字串內容。

    其實char和c#中的byte是等價的,都是一個位元組len是buf數組的長度,free是數組中剩餘可用位元組數。

    由此可以理解為什麼string類型是二進位安全的了。

    因為它本質上就是個byte數組。

    當然可以包含任何數據了。

    另外string類型可以被部分命令按int處理.比如incr等命令,下面詳細介紹。

    還有redis的其他類型像list,set,sorted set ,hash它們包含的元素與都只能是string類型。

  3. 指令對應說明

  4. 指令說明
    APPEND拼接字串
    BITCOUNT計算字串中的二進位值被設成1的個數
    BITOP字串中的二進位值的位元操作
    DECR遞減值一
    DECRBY遞減指定的值
    GET取得指定鍵值的內容
    GETBIT取得指定鍵值的二進位內容
    GETRANGE取得指定鍵值的資料特定位置的內容
    GETSET設定指定鍵值的內容,並返回舊值
    INCR遞增值一
    INCRBY遞增指定的值
    INCRBYFLOAT遞增指定的浮點數值
    MGET一次取回多組指定的key value
    MSET一次設定多組key value
    MSETNX一次設定多組key value,並且所有設定的key都不存在才成功
    PSETEX設定key value,並指定過期時間,單位是毫秒
    SET設定key value
    配合ex參數設定過期時間,單位是秒
    配合px參數設定過期時間,單位是毫秒
    配合nx參數只有key不存在時才成功
    配合xx參數只有key已存在時才成功
    SETBIT設定指定鍵值的二進位資料
    SETEX設定key value,並指定過期時間,單位是秒
    SETNX設定key value,並只有在key不存在時才成功
    SETRANGE更改特定位置的資料內容
    STRLEN取得指定鍵值的內容長度