• Docker构建MySQL环境


    一、运行 MySQL 容器

    MySQL 镜像地址:https://hub.docker.com/_/mysql

    根据镜像说明可知:

    • 默认的配置文件是:/etc/mysql/my.cnf
    • 默认的数据目录是:/var/lib/mysql

    最简单的启动方式:

    docker run -d --name mysql --rm -p 3306:3306 
    -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.22

    通过 bash 进入容器,查看 my.cnf:

    docker exec -it mysql bash
    cat /etc/mysql/my.cnf

    可以发现,主配置文件 my.cnf 加载了 /etc/mysql/conf.d 文件夹下所有的配置(后缀必须是 .cnf),我们只需映射 conf.d 文件夹即可。

    宿主机中创建文件夹 mysql,并分别创建 data 目录和 conf 目录。新建配置文件 txl.cnf:

    [mysqld]
    server-id = 1 #服务Id唯一
    port = 3306
    log-error    = /var/log/mysql/error.log
    #只能用IP地址
    skip_name_resolve 
    #数据库默认字符集
    character-set-server = utf8mb4
    #数据库字符集对应一些排序等规则 
    collation-server = utf8mb4_general_ci
    #设置client连接mysql时的字符集,防止乱码
    init_connect='SET NAMES utf8mb4'
    #最大连接数
    max_connections = 300

    接下来分别映射数据库目录和配置文件目录,启动容器:

    docker run --name mysql -d --rm 
    -v /home/txl/mysql/conf:/etc/mysql/conf.d 
    -v /home/txl/mysql/data:/var/lib/mysql 
    -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123 mysql:5.7.22

    使用容器客户端连接:

    docker exec -it mysql mysql -uroot -p123

    二、微容器 Alpine 构建基础镜像

    Alpine Linux 是一个面向安全的轻型的 Linux 发行版。采用了 musl libc 和 busybox 以减小系统的体积和运行时资源消耗。在保持瘦身的同时,Alpine Linux 还提供了自己的包管理工具 apk,如:apk add、apk update、apk del。

    关键的是,相比于其他 Linux 的 Docker 镜像,它的容量非常小,仅仅只有5MB。

    Alpine Linux 的官网:

    apline 镜像地址:https://hub.docker.com/_/alpine

    2.1 构建 MySQL 客户端镜像

    Dockerfile:

    FROM alpine:3.8
    RUN apk add --no-cache mysql-client
    ENTRYPOINT ["mysql"]

    构建镜像:

    docker build -t myalpine:0.1 .

    测试运行:

    docker run -it --name myalpine myalpine:0.1 -h 服务端IP -uroot -p密码

    默认镜像源可能比较慢,可以使用中科大镜像源:http://mirrors.ustc.edu.cn/alpine/

    需要重新构建 Dockerfile,如:

    FROM alpine:3.8
    RUN echo http://mirrors.ustc.edu.cn/alpine/v3.8/main > /etc/apk/repositories
    RUN echo http://mirrors.ustc.edu.cn/alpine/v3.8/community >> /etc/apk/repositories
    RUN apk update && apk upgrade
    RUN apk add mysql-client
    ENTRYPOINT ["mysql"]

    2.2 MySQL 备份专用镜像

    在之前 MySQL 客户端镜像的基础上,利用 mysqldump 数据库备份命令制作一个新的镜像。

    Dockerfile:

    FROM myalpine:0.1
    RUN mkdir data
    ENV mysql_user root
    ENV mysql_pass 123
    ENV mysql_host 服务端IP
    ENV mysql_db test
    ENTRYPOINT mysqldump -h$mysql_host -u$mysql_user -p$mysql_pass $mysql_db > /data/$mysql_db.sql

    构建镜像:

    docker build -t mysqlbackup:0.1 .

    测试运行:

    docker run -it --name mysqlbak --rm 
    -v /home/txl/mysqlbak:/data 
    -e mysql_host = 服务端IP 
    -e mysql_db = test 
    mysqlbackup:0.1

    容器执行成功后自动删除。查看 /home/txl/mysqlbak 目录, test.sql 文件已被自动生成,数据表备份成功。

    2.3 MySQL 备份专用镜像(定时自动备份)

    创建脚本 mysqlbak.sh:

    #!/bin/sh
    if [ ! -d "/data" ]; then
      mkdir /data
    fi
    mysqldump -h$mysql_host -u$mysql_user -p$mysql_pass $mysql_db > /data/$mysql_db-$(date +%Y%m%d_%H%M%S).sql

    Dockerfile:

    FROM myalpine:0.1
    ENV mysql_user root
    ENV mysql_pass 123
    ENV mysql_host 180.76.232.93
    ENV mysql_db test
    COPY ./mysqlbak.sh /
    RUN chmod +x mysqlbak.sh
    ENV cron_conf  "*       *       *       *       *  "
    RUN echo "$cron_conf /mysqlbak.sh" >> /var/spool/cron/crontabs/root
    ENTRYPOINT ["crond","-f"]

     crond -f  代表定时任务卡在前台运行:

    构建镜像:

    docker build -t mysqlbackup:0.2 .

    测试运行:

    docker run -d --name mysqlbak  
    -v /home/txl/mysqlbak:/data 
    -e mysql_user=root 
    -e mysql_pass=123 
    -e mysql_host=服务端IP 
    -e mysql_db=test 
    mysqlbackup:0.2
  • 相关阅读:
    Spring容器启动前传——web应用
    三方依赖bean初始化导致项目启动失败问题
    一个静态内部类单例引发的思考
    依赖传递
    kafka
    设置旋转元素的基点位置
    keep-alive 的 Props && 钩子函数
    css处理文字: 单行居中 多行居左
    localStorage 存 取 删
    for循环中暂停,async await
  • 原文地址:https://www.cnblogs.com/tangxuliang/p/9341271.html
Copyright © 2020-2023  润新知