如何 build 一个 mysql_client 镜像
本文旨在构建一个 mysql_client 镜像用于项目数据库初始化工作,用于解耦项目
基础镜像如何选取
对于这种工具类的镜像而言,基础镜像的要求是比较低的,故满足基础功能即可。
对于操作系统基础镜像而言,主要分为:
- busybox
官网:https://www.busybox.net/ - alpine
官网:https://www.alpinelinux.org/ - centos
官网:https://www.centos.org/ - ubuntu
官网:http://www.ubuntu.com/ - Debian
官网:https://hub.docker.com/_/debian/
这里选取的是 alpine 轻量级的基础镜像,包管理工具为 apk,各种镜像的优缺点就不一一对比了,感兴趣的可以自行进行搜索。
构建思路
- 基础镜像的选取
因本文的开发环境为 centos 7.2 amd64 架构,故指定了 platform, 大家可根据自己的环境指定
FROM --platform=linux/amd64 alpine:3.4
- 国内 apk 镜像源的切换 && mysql-client 下载
RUN echo -e 'https://mirrors.aliyun.com/alpine/v3.4/main/\nhttps://mirrors.aliyun.com/alpine/v3.4/community/' > /etc/apk/repositories \
&& apk add --update mysql-client \
&& rm -rf /var/cache/apk/* && mkdir /db
- 挂载数据库文件和运行脚本
WORKDIR /db
COPY ./db/schema.sql ./db/db_init.sh /db/
- CMD 运行
CMD ["sh", "./db_init.sh"]
完整的 dockerfile 为
FROM --platform=linux/amd64 alpine:3.4
MAINTAINER tyronemaxi
RUN echo -e 'https://mirrors.aliyun.com/alpine/v3.4/main/\nhttps://mirrors.aliyun.com/alpine/v3.4/community/' > /etc/apk/repositories \
&& apk add --update mysql-client && rm -rf /var/cache/apk/* && mkdir /db
WORKDIR /db
COPY ./db/schema.sql ./db/db_init.sh /db/
CMD ["sh", "./db_init.sh"]
db_init 脚本
#!/bin/sh
set -ex
# 配置环境变量, 需要配置 mysql 信息
export MYSQL_HOST=msyql_server
export MYSQL_USER=root
export MYSQL_PASSWORD=123456
echo "初始化数据库 ..."
mysql -h"$MYSQL_HOST" -u"${MYSQL_USER}" -p"${MYSQL_PASSWORD}" < ./schema.sql
echo "doc_assistant 数据库初始化完成"
schema.sql
# 创建数据库
CREATE DATABASE IF NOT EXISTS you_own_database;
# 创建数据库
USE you_own_database;
docker build
docker build -t mysql_client_alpine:v0.1 -f mysql_client.Dockerfile .
使用
docker run -it --rm --name mysql_client_alphine mysql_client:v0.1
镜像地址
https://hub.docker.com/repository/docker/tyronextian/mysql_client