菜单
本页目录

镜像动态化实验-MYSQL

拓展:mysql5.5 源码包安装

1)上传安装所需的源码包

image-20230102183431085

2)安装

$ yum -y install ncurses-devel make cmake bison gcc gcc-c++
$ tar -zxvf /root/ncurses-5.9.tar.gz -C /root/
$ cd /root/ncurses-5.9/

# * --without-ada参数为设定不编译为ada绑定,因进入chroot环境不能使用ada ;--enableoverwrite参数为定义把头文件安装到/tools/include下而不是/tools/include/ncurses目录* --with-shared 生成共享库
$ ./configure --with-shared --without-debug --without-ada --enable-overwrite
$ make && make install


$ useradd  -s /sbin/nologin  -M mysql


$ tar -zxvf /root/mysql-5.5.23.tar.gz -C /root/
$ cd /root/mysql-5.5.23/

# -DCMAKE_INSTALL_PREFIX=/usr/local/mysql 安装位置
# -DMYSQL_UNIX_ADDR=/tmp/mysql.sock 指定socket(套接字)文件位置
# -DEXTRA_CHARSETS=all 扩展字符支持
# -DDEFAULT_CHARSET=utf8 默认字符集
# -DDEFAULT_COLLATION=utf8_general_ci 默认字符校对
# -DWITH_MYISAM_STORAGE_ENGINE=1 安装myisam存储引擎
# -DWITH_INNOBASE_STORAGE_ENGINE=1 安装innodb存储引擎
# -DWITH_MEMORY_STORAGE_ENGINE=1 安装memory存储引擎
# -DWITH_READLINE=1 支持readline库
# -DENABLED_LOCAL_INFILE=1 启用加载本地数据
# -DMYSQL_USER=root 指定root运行用户
# -DMYSQL_TCP_PORT=3306 指定mysql端口
$ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_USER=root -DMYSQL_TCP_PORT=3306

$ make && make install


$ cd /usr/local/mysql
$ cp support-files/my-medium.cnf /etc/my.cnf
# 初始化数据库
$ /usr/local/mysql/scripts/mysql_install_db --user=root --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data --defaults-file=/etc/my.cnf

# 后台方式启动数据库
$ /usr/local/mysql/bin/mysqld_safe --user=root &

# 前台方式启动数据库
$ /usr/local/mysql/bin/mysqld_safe --user=root

1、上传安装mysql需要的软件包

image-20230102183431085

2、编写 Dockerfile 文件

$ vim Dockerfile

Dockerfile 配置文件详细:

FROM centos:centos7.9.2009
MAINTAINER yq "yq@yq.com"
LABEL ncurses_version=5.9 \
      mysql_version=5.5.23
RUN cd /etc/yum.repos.d/ && mkdir back && mv *.repo back/ && curl http://mirrors.163.com/.help/CentOS7-Base-163.repo > 163.repo && yum clean all
RUN yum -y install ncurses-devel make cmake bison gcc gcc-c++

ADD ./*.tar.gz /root/

RUN cd /root/ncurses-5.9/ && ./configure --with-shared --without-debug --without-ada --enable-overwrite && make && make install && useradd  -s /sbin/nologin  -M mysql && cd /root/mysql-5.5.23/ && cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_USER=root -DMYSQL_TCP_PORT=3306 && make && make install

RUN cp /usr/local/mysql/support-files/my-medium.cnf  /etc/my.cnf
RUN ln -s /usr/local/mysql/bin/* /usr/local/bin

ADD ./startup.sh /root/

ENV MYSQL_ROOT_PASSWORD default

CMD /bin/bash /root/startup.sh

3、编写 startup.sh 脚本

$ vim startup.sh

startup.sh 脚本详细:

#!/bin/bash

if [ `ls /usr/local/mysql/data/mysql |wc -l` -eq 0 ]; then
    isdata=0
    echo "0                            "
else
    isdata=1
fi

if [ $isdata == "0" ];then
    /usr/local/mysql/scripts/mysql_install_db --user=root --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data --defaults-file=/etc/my.cnf

    /usr/local/mysql/bin/mysqld_safe --user=root &
    
    sleep 2s

    /usr/local/mysql/bin/mysqladmin -uroot password $MYSQL_ROOT_PASSWORD
    
    kill -QUIT $( ps aux | grep  mysqld | grep  "sock" | awk '{print $2}')
    
    sleep 2s

    /usr/local/mysql/bin/mysqld_safe --user=root
fi

if [ $isdata == "1" ];then
    /usr/local/mysql/bin/mysqld_safe --user=root
fi

4、制作镜像

$ pwd
/root

$ ls
Dockerfile  mysql-5.5.23.tar.gz  ncurses-5.9.tar.gz  startup.sh

$ docker build -t mysql:v1 .

5、传递不同参数,使用镜像

$ docker run --name mysql-1 -d -p 3306:3306 mysql:v1				#使用默认参数,密码为defalut
$ docker run --name mysql-2 -d -p 3000:3306 --env MYSQL_ROOT_PASSWORD=123456 mysql:v1		#更改参数,密码改为123456

6、访问容器测试

进入mysql-1容器

image-20230102214811005

进入mysql-2容器

image-20230102215025239