基於官方mysql鏡像構建本身的mysql鏡像

參考文章:https://www.jb51.net/article/115422.htm搭建步驟mysql

一、首先建立Dckerfile:sql

1
2
3
4
5
6
7
8
9
10
11
12
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" ]

二、編寫容器啓動腳本setup.sh:docker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/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,此時執行導入數據命令不須要登陸驗證操做,若是是先執行權限操做,那麼導入數據則須要登陸驗證,整個過程就麻煩了許多。數據庫

三、須要導入數據的mysql腳本命令schema.sql:bash

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
-- 建立數據庫
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' );

由於是測試,因此隨便寫了一個建表語句,若是是真實項目確定不止這一張表,直接將建表語句覆蓋過來就好。ide

四、mysql權限設置命令privileges.sql:學習

1
2
3
4
5
6
7
8
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 ;

五、建立鏡像測試

1
docker build -t 13 /docker-mysql .

docker build 爲建立鏡像命令,名稱爲13/docker-mysql,'.'表示當前目錄,即Dockerfile文件所在的目錄,建立過程以下:ui

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

建立成功。

六、啓動容器

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

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

容器啓動成功。

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

驗證結果

一、經過進入容器在命令行驗證

啓動時容器的id爲9db491b1d760,所以執行exec命令進入容器:

1
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;

整個過程以下:

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

二、經過mysql客戶端管理軟件驗證

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

結語

本篇文章是單獨介紹了一下建立mysql鏡像的步驟,但願對你們的學習有所幫助,也但願你們多多支持腳本之家。

相關文章
相關標籤/搜索