1. 程式人生 > >【docker】基於Dockerfile構建mysqld服務鏡像

【docker】基於Dockerfile構建mysqld服務鏡像

mysqld服務鏡像

一 創建構建目錄結構
    # mkdir  -pv docker/mysql# cd docker/mysql/

二 寫Dockerfile 文件

# vim  Dockerfile  #此處 sshd:latest 為上篇文章中創建的鏡像#此Dockerfile 「dookerpool」的 Dockerfile文件,僅僅在在測試時候做了些優化和更改FROM sshd:latestMAINTAINER mykernel(www.mykernel.cn)#安裝軟件 RUN ENV DEBIAN_FRONTEND noninteractive apt-get update && \apt-get -yq install mysql-server-5.6 pwgen && \rm -rf /var/lib/apt/lists/*# 刪除預安裝的數據庫文件RUN rm -rf /var/lib/mysql/*# 添加文件夾下的 MYSQL 配置文件ADD my.cnf /etc/mysql/conf.d/my.cnfADD mysqld_charset.cnf /etc/mysql/conf.d/mysqld_charset.cnfADD authorized_keys /root/.ssh/authorized_keys# 添加 MYSQL 的腳本ADD import_sql.sh /import_sql.shADD run.sh /run.shRUN chmod 755 /*.sh# 設置環境變量,用戶名以及密碼ENV MYSQL_USER adminENV MYSQL_PASS **Random**# 設置主從復制模式下的環境變量ENV REPLICATION_MASTER **False**ENV REPLICATION_SLAVE **False**ENV REPLICATION_USER replicaENV REPLICATION_PASS replica# 設置可以允許掛載的卷,可以用來備份數據庫和配置文件VOLUME  ["/etc/mysql", "/var/lib/mysql"]# 設置可以映射的端口,如果是從我們的 sshd 鏡像繼承的話,默認還會開啟 22 端口EXPOSE 3306CMD ["/run.sh"]

三 準備Dockefile中需要的ADD的文件

     # touch my.cnf  mysqld_charset.cnf  authorized_keys   import_sql.sh run.sh

(1)my.cnf為mysql運行時候的主配置文件,需要根據自己的實際情況進行書寫
(2)mysqld_charset.cnf為mysql運行時候的字符配置,需要根據自己的實際情況進行書寫
(3) import_sql.sh
(4)run.sh 此處提供帶主從復制和自定義密碼的run文件

四 創建鏡像

     # docker build -t mysql:first  .

五 測試

     # sudo docker run -d -p 1027:22 -p 1026:3306 --name mysql mysql:first

通過xshell 連接進容器,查看服務器是否啟動;此處直接使用mysql命令,便可以以root的身份進入,配置好相關用戶之後使用關閉容器,docker commit進行提交。
通過mysql默認的用戶名和用戶密碼遠程連接mysqld 測試,默認用戶為admin密碼可以使用docker logs mysql查看。admin用戶具有root的所有權限。

說明:每次如果是使用-P選項啟動容器,每次stop容器之後再start,端口將會發生變化,所以建議使用-p指定固定的端口。可以減少修改iptables規則或者雲服務器的安全策略

六 掛載mysql數據卷

     # docker run -d -P -v  /mydata/mysql:/var/lib/mysql  mysql:first

其實mysql的dockerfile文件中已經使用了VOLUME 指令為容器創建一個一直有效的空間(不會因為刪除容器而被刪除),但是這個空間是新創建的,而且物理機上命令比較復雜。此處可以直接使用-v選項掛載一個宿主機現在的目錄,而且容器可以直接訪問該目錄下的所有數據。

七 設置mysql默認用戶的密碼

默認的mysql密碼在啟動容器之後使用docker logs |查看。修改默認用戶(admin)的密碼:

     # docker run -d -P -e MYSQL_PASS="your_pass"   mysql:first

-e參數可以來設定容器內任意的環境變量。甚至覆蓋已經存在的環境變量,或者是在Dockerfile中通過ENV設定的環境變量。

八 啟用主從模式

創建mysql主容器

     # docker run -d -e REPLICATION_MASTER=true -P -name mysql:first

創建mysql從容器(–link name:alias)

     # docker run -d -e  REPLICATION_SLAVE=true --link mysql:mysql mysql:first

註意:此處主容器的–name必須為mysql,否則會報錯。


【docker】基於Dockerfile構建mysqld服務鏡像