จดไว้ก่อน เพราะ 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
- Getting started with IBM .NET Provider for .NET Core , .NET 5 and .NET 6
- ibmdb/go_ibm_db: GoLang Driver for Db2 family of database servers (github.com)
- Creating Linux based Docker applications using Db2 Data Providers for .NET Core and .NET 5.0 (ibm.com)
- Setting up the Python environment for IBM database servers - IBM Documentation
- python - Setting IBM_DB_HOME prevents pip install ibm_db - Stack Overflow
- docker - Unable to load shared library 'libdb2.so' - Stack Overflow
- ASP.NET Core Runtime by Microsoft | Docker Hub
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.