パソコン練習日記

やってみたことを記録しています。Bloggerからこちらに引っ越して来ました。一部、画像がリンク切れしていますがひとつひとつ直すのは心が折れたのでそのままにします。

Visual Studioとコンテナを使ったCICDお勉強の記録1 とりあえずDBに接続するまで

最終的にAKSにデプロイするまでのCICDを構築していきたいと思っています。

まずは、コンテナで動かすまで

 

開発デバイスの環境

コンテナを使っていきたいので、また、開発はVisual Studioを使う。

そのために以下をインストールしておく。

  • Visual Studio2022
  • Docker desktop
プログラム作成

とりあえず、コードはこんな感じにしておく。単体テスト書く段階になったらリファクタリングしていくつもり。

現在時刻と数字の"1"をDBにInsertするだけの簡単なプログラム。

using System;
using System.Data.SqlClient;

namespace SqlServerOperation
{
    class Program
    {
        static void Main(string[] args)
        {
            string server = "192.168.10.13,1433"; // ホスト名と動的に割り当てられたポート
            string database = "TestDB"; // データベース名
            string username = "sa";
            string password = "P@$$w0rd";

            string connectionString = $"Server={server};Database={database};User Id={username};Password={password};";

            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();

                //現在日時取得
                DateTime now = DateTime.Now;

                // テーブルに挿入する数値
                int testNum = 1;

                //データ登録
                string insertQuery = "INSERT INTO TestTable (date,num) VALUES (@Value1, @Value2)";
                using (SqlCommand command = new SqlCommand(insertQuery, connection))
                {
                    command.Parameters.AddWithValue("@Value1", now);
                    command.Parameters.AddWithValue("@Value2", testNum);
                    command.ExecuteNonQuery();
                }

                Console.WriteLine("Data inserted successfully.");
            }
        }
    }
}

using System.Data.SqlClientしているのに、SqlConnectionとかでCS1069エラーになっている。

調べたところ、System.Data.SqlClientをNugetしないといけないらしい。

感覚的には、using System.Data.SqlClientのところがエラーになるんじゃないの?って思ってしまうんだけど、そういうもんなのかなぁ。と思いながらNuget

とりあえず、エラー無くなった。

 

Dockerコンテナ化対応(Docker Compose)

開発デバイス上でのDockerコンテナを使ったCICD環境は、Docker Cmposeが良いとのことなので、

プロジェクトを右クリックし、「追加」 > 「コンテナーオーケストレーターのサポート」を選択

Windowsライセンスのこととか考えたくないのでLinux

 

docker-compose.ymlと

Dockerfileが自動で作成

 

デバッグ実行が、"Docker Compose"に変わった。

DBはまだないけど、デバッグ実行。

あたりまえだけどDB接続エラー。それはいいとして、コンテナを見てみる

コンテナが作られて動いてる

っていうか、コンテナイメージのほうを見てみると脆弱性が21あるんだけど

いちおう、12日前に作られたイメージっぽいけど・・・

dockerfileの中で、apt update upgradeしようとしたけど

 

.NETの公式DockerイメージはMicrosoftが提供し、セキュリティパッチを含む定期的な更新が行われています。一般的に、これらのイメージに対して apt-get update や apt-get upgrade を実行することは、特に必要がない限り推奨されません。


とのことなので、止めとくことにした。

 

デバッグのとき接続する用のDB作成

このプログラムが接続しに行くDBを作成。

UbuntuベースのSQLServer Dockerコンテナを使う。

Microsoft SQL Server - Ubuntu based images by Microsoft | Docker Hub

 

単体テスト用はDocker Composeを使ってコンテナを作るつもりだが、デバッグ用は単純にコンテナを稼働させておくだけにしておく。

 

SQLServer2022のイメージを使う。まずはdocker pull

docker pull mcr.microsoft.com/mssql/server:2022-latest
Microsoft Learnを参考にしつつ、

learn.microsoft.com

今のところ特に何か理由があるわけではないけど、SQL Server照合順序を"Japanese_CI_AS"に、コンテナの名前を"sqlserver_express_debug"にして、1433ポートをマッピング

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=P@$$w0rd" -e "MSSQL_COLLATION=Japanese_CI_AS" -p 1433:1433 --name sqlserver_express_debug -d mcr.microsoft.com/mssql/server:2022-latest

コンテナが稼働したので、

SQLServer Management Studioで接続

 プログラムで定義した通りのDB、テーブルを作成。

DBも作ったので、デバッグを実行。エラーなしで処理終了

標準出力がコンテナのログとして出力されていることを確認

データがDBに登録されたことを確認


いったんこれで区切って、次は単体テストを作ることを行う