该教程建议仅作为练习使用
1. 主要步骤
- 系统基本设置
- 基础层使用centos
- 更新yum为aliyun的yum源
- 使用yum安装mariadb
- mariadb配置
- 配置用户和密码等
- 配置数据存储挂载点
- 暴露端口
- 添加启动脚本
- 数据库启动
- 初始化数据库用户名及密码
2. Dockerfile示例
- Dockerfile
# 底层为centos
FROM centos
MAINTAINER zly
# 更新yum源及安装mariadb
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup \
&& curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo \
&& yum clean all && yum makecache && yum update -y \
&& yum install mariadb-server mariadb-client -y
# 设置相关环境变量
ENV MARIADB_USER root
ENV MARIADB_PASS yourpwd
ENV LC_ALL en_US.UTF-8
# 暴露端口
EXPOSE 3306
# 设置挂载点
#VOLUME /var/lib/mysql
# 增加mysql启动
ADD db_init.sh /root/db_init.sh
RUN chmod 775 /root/db_init.sh && /root/db_init.sh
# 设置容器启动时,需执行的脚本
CMD ["mysqld_safe"]
- db_init.sh
#!/bin/bash
# 启动
mysql_install_db --user=mysql
sleep 3
mysqld_safe &
sleep 3
mysqladmin -u "$MARIADB_USER" password "$MARIADB_PASS"
# 授权
mysql -u "$MARIADB_USER" -p"$MARIADB_PASS" -e "use mysql; grant all privileges on *.* to '$MARIADB_USER'@'%' identified by
'$MARIADB_PASS' with grant option;"
h=$(hostname)
# 设置用户密码
mysql -u "$MARIADB_USER" -p"$MARIADB_PASS" -e "use mysql; update user set password=password('$MARIADB_PASS') where user='$M
ARIADB_USER' and host='$h';"
# 创建默认数据库
#mysql -u "$MARIADB_USER" -p"$MARIADB_PASS" -e "CREATE DATABASE IF NOT EXISTS default_db DEFAULT CHARSET utf8 COLLATE utf8_general_ci;"
# 刷新权限
mysql -u "$MARIADB_USER" -p"$MARIADB_PASS" -e "flush privileges;"
3. 启动命令
-
Dockerfile build
在Dockerfile所在文件夹执行一下命令
docker build -t my-mariadb .
启动命令
docker run -d -v /data/mysql:/var/lib/mysql -p 3309:3306 -e MARIADB_PASS=123456 -e MARIADB_USRE=root --name my-mariadb <容器id>
-
启动命令解析
-
-d
后台运行 -
-e
增加环境变量,如果Dockerfile已包含该变量,将会覆盖Dockerfile中的值 -
-v
挂载点映射: 宿主机目录:容器内目录(挂载点目录) -
--name
为容器命名,否则就会随机起名 -
-p
暴露及映射端口地址: 宿主机端口:容器内暴露端口
-
4. 总结
- 该镜像不具备生产实用性,仅适合学习Dockfile练习
- 整个镜像比较大,需要精简化
- 当前容器可以定义变量比较少,用户可以根据自己需求增加定义
- 不需要定制镜像的话,建议使用官方的mariadb(更安全稳定)
- 该镜像不支持数据存储在宿主机即共享数据,具体如何支持共享数据方式可参考官方的Dockerfile