天天看點

Docker----Dockerfile建構編譯MYSQL5.6版本鏡像

建構MYSQL5.6版本鏡像

在網上看了好多mysql5.6版本鏡像的建構,基本上都是使用Docker官方源下載下傳建構的。這裡我想使用編譯的方法搭建。

當然個人覺的官方提供的Mysql:5.6源也不錯,體積小,這個搭建完成後占用空間5個多G。

下面展示我的Dockerfile檔案

  • 1、建立目錄,在目錄下編寫Dockerfile檔案,存放相關的軟體包
mkdir /mysql
cd /mysql

vi Dockerfile
FROM centos:7
MAINTAINER this is mysql-5.6

#更新yum源
RUN yum -y update

#安裝環境依賴包
RUN yum -y install gcc gcc-c++ make pcre-devel expat-devel perl
RUN yum -y install ncurses ncurses-devel bison cmake autoconf

#解壓mysql包
ADD mysql-5.6.26.tar.gz /opt/

#建立mysql系統使用者
RUN useradd -s /sbin/nologin mysql

#進入源碼包,執行cmake檔案,指定工作目錄
WORKDIR /opt/mysql-5.6.26
RUN cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DSYSCONFIDIR=/etc \
-DMYSQL_DATADIR=/home/mysql/ \
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock   

#make編譯
RUN make && make install

#複制預設配置檔案到/etc目錄下
RUN cp -f support-files/my-default.cnf /etc/my.cnf
RUN mkdir -p /usr/local/mysql/
RUN chown -R mysql:mysql /usr/local/mysql/

#配置mysql環境變量
ENV PATH /usr/local/mysql/bin:$PATH

#初始化資料庫
RUN /usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql

#指明服務端口
EXPOSE 3306
#啟動
RUN cp support-files/mysql.server /etc/init.d/mysqld
RUN chmod 755 /etc/init.d/mysqld
RUN sed -i '46s/basedir=/basedir=\/usr\/local\/mysql/' /etc/init.d/mysqld  
RUN sed -i '46s/datadir=/basedir=\/home\/mysql/' /etc/init.d/mysqld
RUN ln -s /var/lib/mysql/mysql.sock /home/mysql/mysql.sock

#啟動方式我在這裡用的mysqld_safe指令,使用mysql-server啟動服務沒有成功。
ENTRYPOINT ["/usr/local/mysql/bin/mysqld_safe"]
           

搭建這個Mysql5.6版本鏡像花費了我較長時間,因為初次接觸Dockerfile,玩的不是太熟練,調試的過程中需要等待大概20分鐘。mysql-5.7的編譯安裝花費時間更長。

  • 2、建立mysql鏡像
docker build -t mysql.new .
           
  • 3、建立容器
docker run -d mysql.new -P --privileged   #使用root使用者
           
  • 4、要設定遠端登入的權限和本地登入密碼。

docker ps -a 檢視容器ID、端口

Docker----Dockerfile建構編譯MYSQL5.6版本鏡像
#進入容器
docker exec -it 533612e70f2b /bin/bash

#用grant指令授權
grant all privileges on *.* to 'root'@'%' identified by '123';    #遠端可通路資料庫使用123密碼
grant all privileges on *.* to 'root'@'localhost' identified by '123';   #本地登入使用123密碼
#一定記得重新整理權限,不然之前的設定不生效
flush privileges;  
           
  • 5、驗證,我用另一台裝有mysql的虛拟機通路測試
格式:mysql -h mysql容器的IP位址 -P 端口号 -u 使用者 -p 密碼
           
Docker----Dockerfile建構編譯MYSQL5.6版本鏡像