zoukankan      html  css  js  c++  java
  • docker 制作自己的mysql镜像

    1、下载mysql,本次以mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar为例

    2、编辑启动脚本start.sh,容器启动时会运行这个脚本,主要是安装并初始化mysql

    #!/bin/bash
    MYSQL_ROOT_PASSWORD=123456
    if [ -z "$MYSQL_ROOT_PASSWORD" ];then
     echo "MYSQL_ROOT_PASSWORD is empty"
     exit 0
    fi
    INIT_MYSQL(){
       echo "mysql初始化"
       yum install -y libaio  libnuma* net-tools perl.x86_64
       cd /usr/local/src 
       #tar xvf mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar
       rpm -ivh mysql-community-common-5.7.29-1.el7.x86_64.rpm
       rpm -ivh mysql-community-libs-5.7.29-1.el7.x86_64.rpm
       rpm -ivh mysql-community-client-5.7.29-1.el7.x86_64.rpm 
       rpm -ivh mysql-community-server-5.7.29-1.el7.x86_64.rpm
       mkdir -p /usr/local/mysql/data && chown -R mysql.mysql /usr/local/mysql
       sed -i 's/datadir=/var/lib/mysql/datadir=/usr/local/mysql/data/' /etc/my.cnf
       sed -i '/datadir/i default_password_lifetime=0' /etc/my.cnf
       mysqld  --initialize --user=mysql --datadir=/usr/local/mysql/data
       mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --user=mysql
       dbPassword=`grep 'temporary password' /var/log/mysqld.log | awk '{print $11}'`
       mysqladmin -uroot -p$dbPassword password  $MYSQL_ROOT_PASSWORD
       host='127.0.0.1'
       dbUser='root'
       sql_file='/usr/local/bin/init.sql'
       mysql -h $host -u $dbUser -p$MYSQL_ROOT_PASSWORD -e "source $sql_file";
       echo "Remote connection is set"
       rm -rf /usr/local/src/mysql*
    }
    if [ `ls /usr/local/mysql/data |wc -l` -eq 0 ];then
       INIT_MYSQL
    else
       mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --user=mysql
    fi
    tail -f /var/log/mysqld.log

    3、编写init.sql,主要是开启root 远程连接,看需求可以不要

    use mysql;
    update user set host = '%' where user = 'root';
    flush privileges;

    4、编写dockerfile

    需要将init.sql 、 localtime(为了和宿主机时间同步,可以不要,要的话,从宿主机拷贝过来即可)、mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar、start.sh放与dockerfile同一目录下

    FROM  centos7.2
    ADD mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar /usr/local/src
    ADD localtime /etc/localtime
    ADD start.sh /usr/local/bin
    ADD init.sql /usr/local/bin
    CMD ["/usr/local/bin/start.sh"]
    centos7.2镜像也是自己制作的,可以自己制作系统基础镜像,也可以用网上的

    5、制作镜像

    docker build -t mysql5.7:v1  . 

    6、运行

     docker run -it -e MYSQL_ROOT_PASSWORD=123456 -p 1112:3306  -d mysql5.7:v1

    7、其他服务器连接测试

    [root@test-02 ~]# mysql -uroot -h 172.16.210.132 -P 1112 -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 4
    Server version: 5.7.29 MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    mysql> exit
    Bye
    [root@test-02 ~]# 

    ---------------------------------------------------------------------

    上面制作的镜像,运行环境需要能联网才可以,因为要下载依赖包

    如果镜像运行没有网,可以先在有网的环境制作好,再上传到无网环境运行

    制作方法类似,只需更改dockerfile 和start.sh

    dockerfile

    FROM  centos7.2
    ADD mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar /usr/local/src
    ADD localtime /etc/localtime
    ADD start.sh /usr/local/bin
    ADD init.sql /usr/local/bin
    RUN rpm --rebuilddb && yum install -y libaio  libnuma* net-tools perl.x86_64 
    RUN cd /usr/local/src && rpm -ivh mysql-community-common-5.7.29-1.el7.x86_64.rpm &&  rpm -ivh mysql-community-libs-5.7.29-1.el7.x86_64.rpm && rpm -ivh mysql-community-client-5.7.29-1.el7.x86_64.rpm && rpm -ivh mysql-community-server-5.7.29-1.el7.x86_64.rpm && rm -rf /usr/local/src/mysql*
    CMD ["/usr/local/bin/start.sh"]

    start.sh

    #!/bin/bash
    if [ -z "$MYSQL_ROOT_PASSWORD" ];then
     echo "MYSQL_ROOT_PASSWORD is empty"
     exit 0
    fi
    INIT_MYSQL(){
       echo "mysql初始化"
       mkdir -p /usr/local/mysql/data && chown -R mysql.mysql /usr/local/mysql
       sed -i 's/datadir=/var/lib/mysql/datadir=/usr/local/mysql/data/' /etc/my.cnf
       sed -i '/datadir/i default_password_lifetime=0' /etc/my.cnf
       mysqld  --initialize --user=mysql --datadir=/usr/local/mysql/data
       mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --user=mysql
       dbPassword=`grep 'temporary password' /var/log/mysqld.log | awk '{print $11}'`
       mysqladmin -uroot -p$dbPassword password  $MYSQL_ROOT_PASSWORD
       dbUser='root'
       sql_file='/usr/local/bin/init.sql'
       mysql -u $dbUser -p$MYSQL_ROOT_PASSWORD -e "source $sql_file";
       echo "Remote connection is set"
    }
    if [ `ls /usr/local/mysql/data |wc -l` -eq 0 ];then
       INIT_MYSQL
    else
       mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --user=mysql
    fi
    tail -f /var/log/mysqld.log

    ------------------------------------------主从复制镜像--------------------------------------

    前提:使用上面制作好的mysql5.7:latest镜像

    创建目录

    mkdir -p {master,slave}

    1、master镜像制作

    cd master/

    制作my.cnf

    [mysqld]
    default_password_lifetime=0
    datadir=/usr/local/mysql/data
    socket=/var/lib/mysql/mysql.sock
    
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    
    server-id=1
    log-bin=mysql-bin
    binlog-ignore-db=mysql,test
    binlog_format=MIXED
    slave_skip_errors=1062

    制作dockerfile

    FROM mysql5.7:latest
    ADD my.cnf /etc/my.cnf

    制作镜像

    docker build -t mysql5.7:master .

    2、slave镜像

    cd slave

    制作my.cnf

    [mysqld]
    default_password_lifetime=0
    datadir=/usr/local/mysql/data
    socket=/var/lib/mysql/mysql.sock
    
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    
    server-id=2
    log-bin=mysql-bin
    relay-log=relay-log
    relay-log-index=relay-log.index
    binlog-ignore-db=mysql,test
    binlog_format=MIXED
    slave_skip_errors=1062
    ## relay_log配置中继日志
    log_slave_updates=1
    read_only=1 #将slave从库设置为只读状态

    dockerfile 

    FROM mysql5.7:latest
    ADD my.cnf /etc/my.cnf
    docker build -t mysql5.7:slave .

    3、启动

    docker run -it -p 1111:3306 -e MYSQL_ROOT_PASSWORD=123456  -d -v /data/master:/usr/local/mysql/data mysql5.7:maste
    docker run -it -p 2222:3306 -e MYSQL_ROOT_PASSWORD=123456  -d -v /data/slave:/usr/local/mysql/data mysql5.7:slave
  • 相关阅读:
    【 POJ
    C语言常用数学函数及其用法
    【HDU3065】 病毒侵袭持续中(AC自动机)
    windows版本cloudbase-init流程说明
    Metadata 的概念
    DataSource的设置
    cloud-utils
    cloud-init代码调试方法
    cloud-init简介及组件说明
    使用dib element proliant-tools制作deploy image
  • 原文地址:https://www.cnblogs.com/zphqq/p/13123910.html
Copyright © 2011-2022 走看看