三、学习Dockerfile,制作mariadb数据库Docker镜像

该教程建议仅作为练习使用

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

5. 参考及官方镜像

  • 参考方案: https://www.jb51.net/article/135036.htm
  • 官方镜像地址: https://github.com/docker-library/mariadb

你可能感兴趣的:(三、学习Dockerfile,制作mariadb数据库Docker镜像)