利用Dockerfile自定義構建MySQL服務折騰了幾天,一直在啟動服務上出現錯誤,現在終於解決了該問題,這裡進行記錄一下
本文參考http://iamdavidxie.com/2014/07/21/create-a-mariadb-service-on-centos-with-docker/
此次Dockerfile檔案中以centos:latest為基礎映象,在此基礎上進行安裝MySQL服務(這裡以mariadb為例)
構建的原理:
1、利用Dockerfile進行安裝MySQL服務(yum安裝或者以rpm包安裝(由於網路問題可將需要安裝的包下載到本地進行安裝))
2、編寫shell指令碼,將安裝好的mariadb進行重新初始化,並啟動mariadb,執行需要的sql指令碼,關閉mariadb,最後通過前臺開啟服務
3、由於MySQL5.6和MySQL5.7的初始化方式不一樣,本文介紹的適用於MySQL5.6(後面會有5.7的案例)
檢視整個構建目錄:
[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就ok
下面介紹Dockerfile檔案,並介紹構建過程執行了什麼:
[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"]
1、構建使用的基礎映象為centos:latest
2、將下載好的rpm包copy到映象中,然後進行安裝
3、將需要執行的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