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 <[email protected]>

# 重置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测试下服务可用性

猜你喜欢

转载自blog.csdn.net/watermelonbig/article/details/90583267