Dockerfile:设计一个满足开发测试使用需求的mysql容器镜像

这是一个设计为满足开发测试需求的docker容器镜像Dockerfile文件。测试和调试工作中对测试机的使用需求,更希望我们的测试容器是一个瑞士军刀,所以没有把控制镜像文件的体积大小作为重点。最终交付的容器镜像,体积为1.72GB。

使用centos6作为基础镜像,集成安装和配置了基础工具包和依赖包,设置中文支持、时区,以及对系统参数进行了适当调优,安装了mysql5.6.30数据库。为便于开发调试,在镜像中安装并配置了ssh服务。

本镜像实测可以作为k8s平台上一个普通的Pod容器运行。

由于源码编译安装会让容器镜像体积变得特别大,所以我们选择直接使用rpm包安装,出于效率考虑,采用离线安装方式。本文件中示例使用的是5.6.30版本,如果希望试用更新版本的,可以自行从官网下载。主要是获取两个安装包文件:MySQL-server-5.6.30-1.el6.x86_64.rpm MySQL-client-5.6.30-1.el6.x86_64.rpm
官网下载页面:https://dev.mysql.com/downloads/mysql/

Dockerfile文件

FROM centos:6
MAINTAINER watermelonbig <watermelonbig@163.com>

# 重置root密码
RUN echo "root:YYtest2019" | chpasswd
# 安装基础工具和依赖包
RUN yum clean all; \
        rpm --rebuilddb; \
        yum install -y curl which tar openssh-server openssh-clients rsync wget make gcc gcc-c++ cmake bison-devel ncurses ncurses-devel openssl openssl-devel libtool* iproute net-tools vim* vixie-cron sysstat lsof tcpdump telnet iputils lrzsz zip unzip;\
# 配置中文支持和时区
        yum -y groupinstall "Chinese Support"
RUN  sed -i '/LANG/s/.*/LANG="zh_CN.UTF-8"/g' /etc/sysconfig/i18n;\
        echo 'LANG=zh_CN.UTF-8' > /etc/environment;\
        echo 'LC_ALL=' >> /etc/environment;\
        source /etc/environment;\
        cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 系统参数调优
RUN echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf;\
        echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf;\
        echo 'net.ipv4.ip_local_port_range = 1024 65000' >> /etc/sysctl.conf;\
        echo 'vm.swappiness = 10' >> /etc/sysctl.conf;\
        echo '* soft nofile 65535' >> /etc/security/limits.conf;\
        echo '* hard nofile 65535' >> /etc/security/limits.conf;\
        echo "session   required        /lib64/security/pam_limits.so" >> /etc/pam.d/login;\
        sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config;\
        sed -i '/UseDNS yes/s/.*/UseDNS no/g' /etc/ssh/sshd_config
RUN ssh-keygen -t rsa -P "" -f /etc/ssh/ssh_host_rsa_key;\
        ssh-keygen -t dsa -P ""  -f /etc/ssh/ssh_host_dsa_key
RUN chkconfig crond on;\
       chkconfig sshd on;\
       chmod u+s /usr/sbin/lsof;\
       chmod u+s /usr/sbin/tcpdump
ENV LANG=zh_CN.UTF-8

#Install MySQL
RUN yum -y install libaio numactl;\
    rpm -e mysql-libs-5.1.73 --nodeps

COPY ./MySQL-server-5.6.30-1.el6.x86_64.rpm .
COPY ./MySQL-client-5.6.30-1.el6.x86_64.rpm .

RUN rpm -i MySQL-server-5.6.30-1.el6.x86_64.rpm;\
    rpm -i MySQL-client-5.6.30-1.el6.x86_64.rpm

RUN mv /usr/my.cnf /etc;\
    sed -i 's/^# basedir.*$/basedir = \/usr/' /etc/my.cnf;\
    sed -i 's/^# datadir.*$/datadir = \/hskj\/mysql/' /etc/my.cnf;\
    echo "log-error = /var/log/mysqld.log" >> /etc/my.cnf;\
    echo 'explicit_defaults_for_timestamp=true' >> /etc/my.cnf;\
    mv /var/lib/mysql /hskj
    
RUN rm -rf MySQL-server-5.6.30-1.el6.x86_64.rpm;\
    rm -rf MySQL-client-5.6.30-1.el6.x86_64.rpm

CMD ["/usr/sbin/sshd","-D"]

EXPOSE 8080 8081 3306 22

创建容器镜像

# ls
Dockerfile  MySQL-client-5.6.30-1.el6.x86_64.rpm  MySQL-server-5.6.30-1.el6.x86_64.rpm
# docker build -t centos6-base-mysql .

使用镜像创建和配置业务容器

无论是单机docker容器,还是k8s集群中创建Pod容器,均可,这里不做讨论了。
只对创建容器后,几个配置事项进行说明如下:

  1. 登录业务容器,执行 service mysql start 启动数据库
  2. 到/root/.mysql_secret文件中找到数据库的root账号密码
  3. 执行 /usr/bin/mysql_secure_installation 重置root密码,所有配置询问全部选择Y
  4. 登录mysql测试下服务可用性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是构建镜像mysql5.7的Dockerfile: ```dockerfile # 基于centos7镜像构建 FROM centos:7 # 安装必要的软件包 RUN yum -y update && \ yum -y install wget && \ yum -y install tar && \ yum -y install bzip2 && \ yum -y install vim && \ yum -y install net-tools && \ yum -y install gcc && \ yum -y install make && \ yum -y install cmake && \ yum -y install ncurses-devel && \ yum -y install openssl-devel && \ yum -y install libaio-devel && \ yum -y install perl && \ yum -y install numactl && \ yum -y install numactl-devel && \ yum -y install libevent-devel && \ yum -y install git && \ yum -y install epel-release && \ yum -y install pwgen && \ yum -y install python-pip && \ yum -y install python-devel && \ yum -y install python-setuptools && \ yum -y install python-wheel && \ yum -y install python3-pip && \ yum -y install python3-devel && \ yum -y install python3-setuptools && \ yum -y install python3-wheel && \ yum clean all # 下载mysql5.7安装包 RUN wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz # 解压mysql安装包 RUN tar -zxvf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz && \ mv mysql-5.7.35-linux-glibc2.12-x86_64 /usr/local/mysql && \ rm -f mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz # 添加mysql用户和用户组 RUN groupadd mysql && \ useradd -r -g mysql -s /bin/false mysql # 修改mysql目录权限 RUN chown -R mysql:mysql /usr/local/mysql && \ chmod -R 755 /usr/local/mysql # 配置mysql环境变量 ENV PATH=$PATH:/usr/local/mysql/bin # 复制mysql配置文件到容器中 COPY my.cnf /etc/my.cnf # 复制mysql初始化脚本到容器中 COPY init_mysql.sh /usr/local/mysql/init_mysql.sh # 修改mysql初始化脚本权限 RUN chmod +x /usr/local/mysql/init_mysql.sh # 初始化mysql RUN /usr/local/mysql/init_mysql.sh # 暴露3306端口 EXPOSE 3306 # 启动mysql CMD ["mysqld", "--user=mysql"] ``` 其中,my.cnf是mysql的配置文件,init_mysql.sh是mysql的初始化脚本。在Dockerfile中,我们首先安装了mysql所需的软件包,然后下载并解压mysql安装包,接着添加mysql用户和用户组,修改mysql目录权限,配置mysql环境变量,复制mysql配置文件和初始化脚本到容器中,最后运行初始化脚本并启动mysql服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值