您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何用Dockerfile構建mysql鏡像并實現數據的初始化及權限設置”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“如何用Dockerfile構建mysql鏡像并實現數據的初始化及權限設置”文章能幫助大家解決問題。
搭建步驟
1、首先創建dckerfile:
from mysql:5.7 #設置免密登錄 env mysql_allow_empty_password yes #將所需文件放到容器中 copy setup.sh /mysql/setup.sh copy schema.sql /mysql/schema.sql copy privileges.sql /mysql/privileges.sql #設置容器啟動時執行的命令 cmd ["sh", "/mysql/setup.sh"]
2、編寫容器啟動腳本setup.sh:
#!/bin/bash set -e #查看mysql服務的狀態,方便調試,這條語句可以刪除 echo `service mysql status` echo '1.啟動mysql....' #啟動mysql service mysql start sleep 3 echo `service mysql status` echo '2.開始導入數據....' #導入數據 mysql < /mysql/schema.sql echo '3.導入數據完畢....' sleep 3 echo `service mysql status` #重新設置mysql密碼 echo '4.開始修改密碼....' mysql < /mysql/privileges.sql echo '5.修改密碼完畢....' #sleep 3 echo `service mysql status` echo `mysql容器啟動完畢,且數據導入成功` tail -f /dev/null
這里是先導入數據,然后才是設置用戶和權限,是因為mysql容器一開始為免密登錄,dockerfile中有如下設置:env mysql_allow_empty_password yes
,此時執行導入數據命令不需要登錄驗證操作,如果是先執行權限操作,那么導入數據則需要登錄驗證,整個過程就麻煩了許多。
3、需要導入數據的mysql腳本命令schema.sql:
-- 創建數據庫 create database `docker_mysql` default character set utf8 collate utf8_general_ci; use docker_mysql; -- 建表 drop table if exists `user`; create table `user` ( `id` bigint(20) not null, `created_at` bigint(40) default null, `last_modified` bigint(40) default null, `email` varchar(255) default null, `first_name` varchar(255) default null, `last_name` varchar(255) default null, `username` varchar(255) default null, primary key (`id`) ) engine=innodb default charset=latin1; -- 插入數據 insert into `user` (`id`, `created_at`, `last_modified`, `email`, `first_name`, `last_name`, `username`) values (0,1490257904,1490257904,'john.doe@example.com','john','doe','user');
因為是測試,所以隨便寫了一個建表語句,如果是真實項目肯定不止這一張表,直接將建表語句覆蓋過來就好。
4、mysql權限設置命令privileges.sql:
use mysql; select host, user from user; -- 因為mysql版本是5.7,因此新建用戶為如下命令: create user docker identified by '123456'; -- 將docker_mysql數據庫的權限授權給創建的docker用戶,密碼為123456: grant all on docker_mysql.* to docker@'%' identified by '123456' with grant option; -- 這一條命令一定要有: flush privileges;
5、創建鏡像
docker build -t 13/docker-mysql .
docker build 為創建鏡像命令,名稱為13/docker-mysql,'.'表示當前目錄,即dockerfile文件所在的目錄,創建過程如下:
執行docker images查看該鏡像是否存在于鏡像列表中:
創建成功。
6、啟動容器
docker run -d -p 13306:3306 13/docker-mysql
啟動容器,并將端口映射到本地的13306端口,命令行如圖所示:
容器啟動成功。
查看容器的日志記錄,啟動過程與啟動腳本setup.sh中所規范的步驟一致,數據導入和權限設置成功:
驗證結果
1、通過進入容器在命令行驗證
啟動時容器的id為9db491b1d760,因此執行exec命令進入容器:
docker exec -it 9db491b1d760 /bin/bash
這個命令不要直接使用,因為在你機器上id可能不同,替換掉id值即可。
前文中創建了docker_mysql數據庫,并在此數據庫中創建了user表,同時將數據庫的連接授權賦予了新建的docker用戶,因此驗證過程為:
使用docker用戶登錄數據庫:mysql -u docker -p
輸入密碼123456通過登錄驗證
切換至docker_mysql數據庫:use docker_mysql;
查看數據庫中的表:show tables;
查看表中的數據:select * from user;
整個過程如下:
通過圖中的結果對比,與前文一致,驗證成功。
2、通過mysql客戶端管理軟件驗證
關于“如何用Dockerfile構建mysql鏡像并實現數據的初始化及權限設置”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。