91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 服務器 > 
  • 詳解利用Dockerfile構建mysql鏡像并實現數據的初始化及權限設置

詳解利用Dockerfile構建mysql鏡像并實現數據的初始化及權限設置

發布時間:2020-08-25 20:35:47 來源:腳本之家 閱讀:486 作者:13的技術分享 欄目:服務器

本文提要

本文目的不僅僅是創建一個MySQL的鏡像,而是在其基礎上再實現啟動過程中自動導入數據及數據庫用戶的權限設置,并且在新創建出來的容器里自動啟動MySQL服務接受外部連接,主要是通過Dockerfile和shell腳本實現這一過程。

搭建步驟

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文件所在的目錄,創建過程如下:

詳解利用Dockerfile構建mysql鏡像并實現數據的初始化及權限設置

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

詳解利用Dockerfile構建mysql鏡像并實現數據的初始化及權限設置

創建成功。

6、啟動容器

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

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

詳解利用Dockerfile構建mysql鏡像并實現數據的初始化及權限設置

容器啟動成功。

查看容器的日志記錄,啟動過程與啟動腳本setup.sh中所規范的步驟一致,數據導入和權限設置成功:

詳解利用Dockerfile構建mysql鏡像并實現數據的初始化及權限設置

驗證結果

1、通過進入容器在命令行驗證

啟動時容器的id為9db491b1d760,因此執行exec命令進入容器:

docker exec -it 9db491b1d760 /bin/bash

這個命令不要直接使用,因為在你機器上id可能不同,替換掉id值即可。

前文中創建了docker_mysql數據庫,并在此數據庫中創建了user表,同時將數據庫的連接授權賦予了新建的docker用戶,因此驗證過程為:

  1. 使用docker用戶登錄數據庫:mysql -u docker -p
  2. 輸入密碼123456通過登錄驗證
  3. 切換至docker_mysql數據庫:use docker_mysql;
  4. 查看數據庫中的表:show tables;
  5. 查看表中的數據:select * from user;

整個過程如下:

詳解利用Dockerfile構建mysql鏡像并實現數據的初始化及權限設置

通過圖中的結果對比,與前文一致,驗證成功。

2、通過mysql客戶端管理軟件驗證

詳解利用Dockerfile構建mysql鏡像并實現數據的初始化及權限設置

通過圖中的結果對比,與前文一致,驗證成功。

結語

本篇文章是單獨介紹了一下創建mysql鏡像的步驟,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

凤翔县| 赤水市| 金乡县| 广汉市| 攀枝花市| 岐山县| 莱西市| 东乌珠穆沁旗| 教育| 云梦县| 五峰| 平原县| 稷山县| 罗田县| 武鸣县| 正宁县| 奈曼旗| 南京市| 团风县| 海南省| 綦江县| 隆安县| 恩平市| 台山市| 惠安县| 五河县| 营口市| 阿合奇县| 灌云县| 开原市| 伽师县| 哈巴河县| 贡觉县| 那坡县| 鄂托克旗| 藁城市| 神木县| 扬州市| 日喀则市| 获嘉县| 华阴市|