Dockerfile構建MySQL

轉自:https://www.cnblogs.com/jsonhc/p/7807931.html

利用Dockerfile自定義構建MySQL服務折騰了幾天,一直在啓動服務上出現錯誤,如今終於解決了該問題,這裏進行記錄一下html

本文參考http://iamdavidxie.com/2014/07/21/create-a-mariadb-service-on-centos-with-docker/mysql

這次Dockerfile文件中以centos:latest爲基礎鏡像,在此基礎上進行安裝MySQL服務(這裏以mariadb爲例)git

構建的原理:github

一、利用Dockerfile進行安裝MySQL服務(yum安裝或者以rpm包安裝(因爲網絡問題可將須要安裝的包下載到本地進行安裝))sql

二、編寫shell腳本,將安裝好的mariadb進行從新初始化,並啓動mariadb,執行須要的sql腳本,關閉mariadb,最後經過前臺開啓服務docker

三、因爲MySQL5.6和MySQL5.7的初始化方式不同,本文介紹的適用於MySQL5.6(後面會有5.7的案例)shell

 

查看整個構建目錄:數據庫

複製代碼
[root@docker mysql]# tree 
.
├── business.sql
├── Dockerfile
├── MariaDB-10.0.33-centos7-x86_64-client.rpm
├── MariaDB-10.0.33-centos7-x86_64-common.rpm
├── MariaDB-10.0.33-centos7-x86_64-compat.rpm
├── MariaDB-10.0.33-centos7-x86_64-server.rpm
├── mariadb.repo
├── server.cnf
├── setup.sh
└── setup.sh.bak
複製代碼

目錄中有下載好的mariadb安裝的包,固然若是你網絡好,只須要配置repo就行,而後將Dockerfile中的安裝rpm的過程換成替換repo就okjson

下面介紹Dockerfile文件,並介紹構建過程執行了什麼:centos

複製代碼
[root@docker mysql]# cat Dockerfile 
FROM centos

MAINTAINER json_hc@163.com

COPY MariaDB-10.0.33-centos7-x86_64-client.rpm /root/MariaDB-10.0.33-centos7-x86_64-client.rpm
COPY MariaDB-10.0.33-centos7-x86_64-common.rpm /root/MariaDB-10.0.33-centos7-x86_64-common.rpm 
COPY MariaDB-10.0.33-centos7-x86_64-compat.rpm  /root/MariaDB-10.0.33-centos7-x86_64-compat.rpm
COPY MariaDB-10.0.33-centos7-x86_64-server.rpm  /root/MariaDB-10.0.33-centos7-x86_64-server.rpm
WORKDIR /root
RUN yum remove mysql-libs -y
RUN yum -y install *.rpm
ADD business.sql /root/business.sql
ADD server.cnf /etc/my.cnf.d/server.cnf
ADD setup.sh /root/setup.sh

RUN yum clean all
RUN chmod +x /root/setup.sh
EXPOSE 3306

CMD ["/root/setup.sh"]
複製代碼

一、構建使用的基礎鏡像爲centos:latest

二、將下載好的rpm包copy到鏡像中,而後進行安裝

三、將須要執行的sql、配置文件,最後執行的shell腳本也copy到鏡像中

在執行setup.sh腳本以前mariadb服務已經安裝完畢,基本的數據目錄仍是/var/lib/mysql

將配置文件拷貝到了鏡像中,查看配置文件:

複製代碼
[root@docker mysql]# cat server.cnf 
[mysqld]
bind-address=0.0.0.0
console=1
general_log=1
general_log_file=/dev/stdout
#log_error=/dev/stderr
collation-server=utf8_unicode_ci
character-set-server=utf8
複製代碼

裏面的內容能夠進行修改或者添加更多

查看setup.sh的內容:

複製代碼
[root@docker mysql]# cat setup.sh
#!/bin/sh
chown -R mysql:mysql /var/lib/mysql

mysql_install_db --user=mysql > /dev/null

mysqld_safe --user=mysql &

sleep 5

mysql < /root/business.sql

sleep 5

ps -wef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9

mysqld_safe --user=mysql
複製代碼

因爲須要從新將安裝好的mariadb服務進行初始化,因此避免出錯能夠將數據目錄進行權限授予

MySQL5.6的初始化爲mysql_install_db加上一些參數

初始化數據庫後,後臺開啓mariadb服務,而後將sql進行執行:

複製代碼
[root@docker mysql]# cat business.sql 
create database wordpress DEFAULT CHARACTER SET utf8;

USE mysql;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

UPDATE user SET password=PASSWORD("root") WHERE user='root';
FLUSH PRIVILEGES;
複製代碼

sql內容就是建立的庫和設置root帳號的密碼

sql執行完成後setup.sh腳本後面就是將mariadb進程殺掉,最後由前臺運行mariadb服務,若是在啓動容器中碰見了錯誤,請利用docker logs container_name/container_id

進行查看,根據錯誤提示進行解決

自定義構建MySQL服務的項目能夠在github查看:https://github.com/jsonhc/docker_project/tree/master/docker_dockerfile/lnmp/mysql

相關文章
相關標籤/搜索