自定义DB2 docker映像



IBM为DB2提供了一个Docker映像,可从https://hub.docker.com/r/ibmcom/db2

获得。正如Docker Hub中所述,可以通过使用附加脚本(添加在/var/custom中)创建派生的Docker映像来配置数据库,该脚本包含所有必要的自定义(例如创建模式)。

FROM ibmcom/db2
RUN mkdir /var/custom
COPY createschema.sh /var/custom
RUN chmod a+x /var/custom/createschema.sh

在Db2安装完成后,在容器启动时执行此脚本。

是否有一种方法来构建一个Docker镜像,其中脚本是预先执行的?

我希望在镜像本身配置数据库,以便从镜像生成的新容器在启动时不必执行初始化步骤。

该脚本不能在Dockerfile中使用RUN命令执行,因为DB2设置只在容器启动时执行。是否有一种方法可以触发此设置,然后直接在Dockerfile中运行自定义配置脚本?

如果我尝试执行设置脚本(这是官方映像中的ENTRYPOINT,我可以修改以自定义映像):

FROM ibmcom/db2
ENV LICENSE=accept
RUN /var/db2_setup/lib/setup_db2_instance.sh

启动DB2时出现错误,我不知道如何解决:

Starting DB2...
02/28/2021 09:54:31     0   0   SQL1042C  An unexpected system error occurred.

我可以创建一个镜像从一个运行的容器(与docker commit),但我想保持镜像构建过程自动化的Dockerfile。

这种情况的一般步骤是:

  1. 找到图像的入口点,并分析创建后图像是如何初始化的
  2. 准备新的dockerbuild文件
    1. 调用ENTRYPOINT命令用RUN初始化映像
    2. 运行自己的脚本
    3. 关闭初始化以刷新缓冲区的进程(这对数据库映像很重要)
    4. 创建新的入口点

到目前为止您所做的是正确的步骤,但是您需要确保在映像构建结束时关闭数据库,以强制将数据库的更改写入文件。您还需要分析在容器内初始化数据库对新映像启动过程的影响(例如,使用卷挂载)。

SQL1042C与文件损坏有关,但是您可以在数据库日志中找到更多细节并验证确切的问题。

最新更新