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

    xiaoxiao2025-09-06  55

    这是一个设计为满足开发测试需求的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容器,均可,这里不做讨论了。 只对创建容器后,几个配置事项进行说明如下:

    登录业务容器,执行 service mysql start 启动数据库到/root/.mysql_secret文件中找到数据库的root账号密码执行 /usr/bin/mysql_secure_installation 重置root密码,所有配置询问全部选择Y登录mysql测试下服务可用性
    最新回复(0)