dockerfile สำหรับ .NET6 + DB2

จดไว้ก่อน เพราะ documentation ของ DB2 ในส่วนนี้มันไม่ค่อยดีครับ และตัว Library ของมันเอง มีความ Unique ด้วยตัวมันเองอีกครับ

ใช้ alpine ไม่ได้นะ

  • ตอนแรกใช้ Image aspnet:6.0-alpine
FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine3.17 AS runtime
  • ปรากฏว่าตอน Run มัน Crash เลย libdb2.so นอกจากต้อง Build ตาม Platform (OS) แล้ว ตัว Base Image ผมเข้าใจว่าต้องมีลง Runtime เพิ่มอีก
System.DllNotFoundException: Unable to load shared library 'libdb2.so' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: Error loading shared library liblibdb2.so: No such file or directory
   at IBM.Data.Db2.UnsafeNativeMethods.DB232.SQLFreeConnAttribsADONET(DB2SQLGetConnAttribsADONETParams& pParam)
   at IBM.Data.Db2.DB2ConnPool.ReplaceConnectionStringParms(DB2Connection connection, String szValue, DB2ConnSettings& pSettings, DB2ConnSettingsInternal& pSettingsInternal, Boolean bAttach, Boolean pushDownStrAppended)
   at IBM.Data.Db2.DB2Connection.set_ConnectionString(String value)
   at ds.DAO.ADO.Utilities.DbConnectionFactory.CreateDBConnection(String name, String connectionString, String providerName)
   at ds.DAO.ADO.Utilities.DbConnectionFactory.GetDbConnection()
   at ds.DAO.ADO.Utilities.dsAccessControl.TwoStepDbAccess(String connectionName, IDbConnection dbConnection)
   at ds.DAO.ADO.Utilities.dsAccessControl.AcquireConnection(Int32& id, String pCustomConnectionName)
  • สุดท้ายใช้ image อันนี้ aspnet:6.0 ขนาดเพิ่มมา 230 MB 555+ จะได้ไม่ต้องมาจัดการเรื่อง Image
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime

DB2 Environment

  • DB2_CLI_DRIVER_INSTALL_PATH - บอกว่า clidriver อยู่ไหน ปกติผมใส่ไว้เสมอนะ แม้เวอร์หลังๆ เอาออกแล้ว มันยังทำงานได้อยู่
  • IBM_DB_HOME มัน คือ ตัว DB2HOME เดิม เอาไว้ใช้สำหรับ Command Line
  • LD_LIBRARY_PATH - อันนี้สำคัญนะเป็น path ให้ Linux มันใช้หาตัว dynamically linkable libraries ซึ่งตัว DB2 มันมีการใช้งานส่วนนี้ น่าจะเป็นส่วนของ C++ ของ DB2 ให้มาตัว libdb2.so
  • PATH - ใส่ Path ของ DB2 Client เอาไว้เผื่อใช้งาน Command Line จริงๆ ไม่ใส่ก็ได้นะ
  • DB2CODEPAGE - สำหรับระบบงานที่เก่าๆ ที่ยังเป็น DB2 ที่กำหนด Codepage Windows-874 ต้องกำหนดตัวนี้เพิ่มด้วยครับ
ENV DB2CODEPAGE=874

Full dockerfile

ตรง Reference บางอันดูไม่เกี่ยวกับ .NET นะ แต่มันมีอธิบายเรื่อง DB2 ผมเลยเอามา Reference ด้วยนะ

Reference


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts to your email.