如何将含MariaDB备份的Docker镜像制作流程写入Dockerfile?
解决方案:将MariaDB备份集成到Docker镜像并部署到Azure Pipeline
一、编写Dockerfile实现数据库初始化
MariaDB官方镜像自带自动初始化机制:容器首次启动时,会自动执行/docker-entrypoint-initdb.d/目录下的.sql、.sh类脚本,我们可以利用这个特性完成数据库创建和备份导入,无需手动执行命令。
1. 调整备份SQL文件
在本地的smdb-dev.sql开头添加以下内容,确保容器启动时自动创建目标数据库并切换到该库:
CREATE DATABASE IF NOT EXISTS smdb_dev; USE smdb_dev;
2. 编写Dockerfile
# 基于指定版本的MariaDB镜像 FROM mariadb:10.4.26 # 用构建参数传递root密码(避免硬编码) ARG MYSQL_ROOT_PASSWORD # 将构建参数转为环境变量,供初始化脚本使用 ENV MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD # 将备份SQL文件复制到镜像的初始化目录 COPY smdb-dev.sql /docker-entrypoint-initdb.d/
说明:构建镜像时不会直接执行数据库操作,而是将初始化脚本打包进镜像,当容器首次启动时,MariaDB会自动完成数据库创建和数据导入。
二、Azure Pipeline配置:构建并推送镜像到Azure容器注册表
以下是完整的Pipeline YAML配置,实现镜像构建、推送至Azure容器注册表的流程:
trigger: - main # 触发Pipeline的分支 variables: # 替换为你的Azure容器注册表名称 acrName: 'your-acr-name' # 镜像名称 imageName: 'mariadb-smdb' # 镜像标签,用构建ID自动生成唯一版本 imageTag: '$(Build.BuildId)' # Dockerfile路径 dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile' stages: - stage: BuildAndPush displayName: 构建并推送镜像 jobs: - job: Build displayName: 构建任务 pool: vmImage: 'ubuntu-latest' # 使用Ubuntu虚拟机运行任务 steps: # 登录到Azure容器注册表(需提前配置服务连接) - task: Docker@2 displayName: 登录Azure容器注册表 inputs: command: login containerRegistry: 'your-acr-service-connection' # 替换为你的服务连接名称 # 构建并推送镜像 - task: Docker@2 displayName: 构建并推送镜像到ACR inputs: command: buildAndPush repository: $(imageName) dockerfile: $(dockerfilePath) containerRegistry: 'your-acr-service-connection' buildArguments: '--build-arg MYSQL_ROOT_PASSWORD=$(MYSQL_ROOT_PASSWORD)' # 传递密码参数 tags: | $(imageTag) latest
关键配置说明:
- 服务连接:需在Azure DevOps中提前创建连接到Azure容器注册表的服务连接,命名与配置中的
your-acr-service-connection一致。 - 密码安全:
MYSQL_ROOT_PASSWORD需在Pipeline的「变量」中设置为秘密变量,避免明文泄露。 - 镜像标签:使用
$(Build.BuildId)作为标签,确保每次构建的镜像版本唯一,也可根据需求自定义标签。
内容的提问来源于stack exchange,提问作者Ivajlo Iliev
相关产品推荐
相关产品推荐

