溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何用Dockerfile構(gòu)建mysql鏡像并實(shí)現(xiàn)數(shù)據(jù)的初始化及權(quán)限設(shè)置

發(fā)布時(shí)間:2022-05-25 14:49:12 來(lái)源:億速云 閱讀:1553 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“如何用Dockerfile構(gòu)建mysql鏡像并實(shí)現(xiàn)數(shù)據(jù)的初始化及權(quán)限設(shè)置”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“如何用Dockerfile構(gòu)建mysql鏡像并實(shí)現(xiàn)數(shù)據(jù)的初始化及權(quán)限設(shè)置”文章能幫助大家解決問(wèn)題。

搭建步驟

1、首先創(chuàng)建dckerfile:

from mysql:5.7

#設(shè)置免密登錄
env mysql_allow_empty_password yes

#將所需文件放到容器中
copy setup.sh /mysql/setup.sh
copy schema.sql /mysql/schema.sql
copy privileges.sql /mysql/privileges.sql

#設(shè)置容器啟動(dòng)時(shí)執(zhí)行的命令
cmd ["sh", "/mysql/setup.sh"]

2、編寫(xiě)容器啟動(dòng)腳本setup.sh:

#!/bin/bash
set -e

#查看mysql服務(wù)的狀態(tài),方便調(diào)試,這條語(yǔ)句可以刪除
echo `service mysql status`

echo '1.啟動(dòng)mysql....'
#啟動(dòng)mysql
service mysql start
sleep 3
echo `service mysql status`

echo '2.開(kāi)始導(dǎo)入數(shù)據(jù)....'
#導(dǎo)入數(shù)據(jù)
mysql < /mysql/schema.sql
echo '3.導(dǎo)入數(shù)據(jù)完畢....'

sleep 3
echo `service mysql status`

#重新設(shè)置mysql密碼
echo '4.開(kāi)始修改密碼....'
mysql < /mysql/privileges.sql
echo '5.修改密碼完畢....'

#sleep 3
echo `service mysql status`
echo `mysql容器啟動(dòng)完畢,且數(shù)據(jù)導(dǎo)入成功`

tail -f /dev/null

這里是先導(dǎo)入數(shù)據(jù),然后才是設(shè)置用戶和權(quán)限,是因?yàn)閙ysql容器一開(kāi)始為免密登錄,dockerfile中有如下設(shè)置:env mysql_allow_empty_password yes,此時(shí)執(zhí)行導(dǎo)入數(shù)據(jù)命令不需要登錄驗(yàn)證操作,如果是先執(zhí)行權(quán)限操作,那么導(dǎo)入數(shù)據(jù)則需要登錄驗(yàn)證,整個(gè)過(guò)程就麻煩了許多。

3、需要導(dǎo)入數(shù)據(jù)的mysql腳本命令schema.sql:

-- 創(chuàng)建數(shù)據(jù)庫(kù)
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;

-- 插入數(shù)據(jù)
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');

因?yàn)槭菧y(cè)試,所以隨便寫(xiě)了一個(gè)建表語(yǔ)句,如果是真實(shí)項(xiàng)目肯定不止這一張表,直接將建表語(yǔ)句覆蓋過(guò)來(lái)就好。

4、mysql權(quán)限設(shè)置命令privileges.sql:

use mysql;
select host, user from user;
-- 因?yàn)閙ysql版本是5.7,因此新建用戶為如下命令:
create user docker identified by '123456';
-- 將docker_mysql數(shù)據(jù)庫(kù)的權(quán)限授權(quán)給創(chuàng)建的docker用戶,密碼為123456:
grant all on docker_mysql.* to docker@'%' identified by '123456' with grant option;
-- 這一條命令一定要有:
flush privileges;

5、創(chuàng)建鏡像

docker build -t 13/docker-mysql .

docker build 為創(chuàng)建鏡像命令,名稱為13/docker-mysql,'.'表示當(dāng)前目錄,即dockerfile文件所在的目錄,創(chuàng)建過(guò)程如下:

如何用Dockerfile構(gòu)建mysql鏡像并實(shí)現(xiàn)數(shù)據(jù)的初始化及權(quán)限設(shè)置

執(zhí)行docker images查看該鏡像是否存在于鏡像列表中:

如何用Dockerfile構(gòu)建mysql鏡像并實(shí)現(xiàn)數(shù)據(jù)的初始化及權(quán)限設(shè)置

創(chuàng)建成功。

6、啟動(dòng)容器

docker run -d -p 13306:3306 13/docker-mysql

啟動(dòng)容器,并將端口映射到本地的13306端口,命令行如圖所示:

如何用Dockerfile構(gòu)建mysql鏡像并實(shí)現(xiàn)數(shù)據(jù)的初始化及權(quán)限設(shè)置

容器啟動(dòng)成功。

查看容器的日志記錄,啟動(dòng)過(guò)程與啟動(dòng)腳本setup.sh中所規(guī)范的步驟一致,數(shù)據(jù)導(dǎo)入和權(quán)限設(shè)置成功:

如何用Dockerfile構(gòu)建mysql鏡像并實(shí)現(xiàn)數(shù)據(jù)的初始化及權(quán)限設(shè)置

驗(yàn)證結(jié)果

1、通過(guò)進(jìn)入容器在命令行驗(yàn)證

啟動(dòng)時(shí)容器的id為9db491b1d760,因此執(zhí)行exec命令進(jìn)入容器:

docker exec -it 9db491b1d760 /bin/bash

這個(gè)命令不要直接使用,因?yàn)樵谀銠C(jī)器上id可能不同,替換掉id值即可。

前文中創(chuàng)建了docker_mysql數(shù)據(jù)庫(kù),并在此數(shù)據(jù)庫(kù)中創(chuàng)建了user表,同時(shí)將數(shù)據(jù)庫(kù)的連接授權(quán)賦予了新建的docker用戶,因此驗(yàn)證過(guò)程為:

  1. 使用docker用戶登錄數(shù)據(jù)庫(kù):mysql -u docker -p

  2. 輸入密碼123456通過(guò)登錄驗(yàn)證

  3. 切換至docker_mysql數(shù)據(jù)庫(kù):use docker_mysql;

  4. 查看數(shù)據(jù)庫(kù)中的表:show tables;

  5. 查看表中的數(shù)據(jù):select * from user;

整個(gè)過(guò)程如下:

如何用Dockerfile構(gòu)建mysql鏡像并實(shí)現(xiàn)數(shù)據(jù)的初始化及權(quán)限設(shè)置

通過(guò)圖中的結(jié)果對(duì)比,與前文一致,驗(yàn)證成功。

2、通過(guò)mysql客戶端管理軟件驗(yàn)證

如何用Dockerfile構(gòu)建mysql鏡像并實(shí)現(xiàn)數(shù)據(jù)的初始化及權(quán)限設(shè)置

關(guān)于“如何用Dockerfile構(gòu)建mysql鏡像并實(shí)現(xiàn)數(shù)據(jù)的初始化及權(quán)限設(shè)置”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI