Dockerfile构建MySQL
利用Dockerfile自定義構(gòu)建MySQL服務(wù)折騰了幾天,一直在啟動(dòng)服務(wù)上出現(xiàn)錯(cuò)誤,現(xiàn)在終于解決了該問題,這里進(jìn)行記錄一下
本文參考http://iamdavidxie.com/2014/07/21/create-a-mariadb-service-on-centos-with-docker/
此次Dockerfile文件中以centos:latest為基礎(chǔ)鏡像,在此基礎(chǔ)上進(jìn)行安裝MySQL服務(wù)(這里以mariadb為例)
構(gòu)建的原理:
1、利用Dockerfile進(jìn)行安裝MySQL服務(wù)(yum安裝或者以rpm包安裝(由于網(wǎng)絡(luò)問題可將需要安裝的包下載到本地進(jìn)行安裝))
2、編寫shell腳本,將安裝好的mariadb進(jìn)行重新初始化,并啟動(dòng)mariadb,執(zhí)行需要的sql腳本,關(guān)閉mariadb,最后通過前臺(tái)開啟服務(wù)
3、由于MySQL5.6和MySQL5.7的初始化方式不一樣,本文介紹的適用于MySQL5.6(后面會(huì)有5.7的案例)
?
查看整個(gè)構(gòu)建目錄:
[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安裝的包,當(dāng)然如果你網(wǎng)絡(luò)好,只需要配置repo就行,然后將Dockerfile中的安裝rpm的過程換成替換repo就ok
下面介紹Dockerfile文件,并介紹構(gòu)建過程執(zhí)行了什么:
[root@docker mysql]# cat Dockerfile FROM centosMAINTAINER json_hc@163.comCOPY 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.shRUN yum clean all RUN chmod +x /root/setup.sh EXPOSE 3306CMD ["/root/setup.sh"]1、構(gòu)建使用的基礎(chǔ)鏡像為centos:latest
2、將下載好的rpm包c(diǎn)opy到鏡像中,然后進(jìn)行安裝
3、將需要執(zhí)行的sql、配置文件,最后執(zhí)行的shell腳本也copy到鏡像中
在執(zhí)行setup.sh腳本之前mariadb服務(wù)已經(jīng)安裝完畢,基本的數(shù)據(jù)目錄還是/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里面的內(nèi)容可以進(jìn)行修改或者添加更多
查看setup.sh的內(nèi)容:
[root@docker mysql]# cat setup.sh #!/bin/sh chown -R mysql:mysql /var/lib/mysqlmysql_install_db --user=mysql > /dev/nullmysqld_safe --user=mysql &sleep 5mysql < /root/business.sqlsleep 5ps -wef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9mysqld_safe --user=mysql由于需要重新將安裝好的mariadb服務(wù)進(jìn)行初始化,所以避免出錯(cuò)可以將數(shù)據(jù)目錄進(jìn)行權(quán)限授予
MySQL5.6的初始化為mysql_install_db加上一些參數(shù)
初始化數(shù)據(jù)庫后,后臺(tái)開啟mariadb服務(wù),然后將sql進(jìn)行執(zhí)行:
[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內(nèi)容就是創(chuàng)建的庫和設(shè)置root賬號(hào)的密碼
sql執(zhí)行完成后setup.sh腳本后面就是將mariadb進(jìn)程殺掉,最后由前臺(tái)運(yùn)行mariadb服務(wù),如果在啟動(dòng)容器中遇見了錯(cuò)誤,請(qǐng)利用docker logs container_name/container_id
進(jìn)行查看,根據(jù)錯(cuò)誤提示進(jìn)行解決
自定義構(gòu)建MySQL服務(wù)的項(xiàng)目可以在github查看:https://github.com/jsonhc/docker_project/tree/master/docker_dockerfile/lnmp/mysql
總結(jié)
以上是生活随笔為你收集整理的Dockerfile构建MySQL的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dockerfile构建nginx并结合
- 下一篇: 理解MYSQL MVCC 实现机制