Docker中使用mysql數(shù)據(jù)庫(kù)

docker中使用mysql

1铭污、搜索源

docker search mysql

2房资、下載源(這里以mysql:5.6為例)

docker pull mysql:5.6

3淘这、創(chuàng)建并啟動(dòng)mysql容器(設(shè)置端口才可以連接)

docker run -d -p 3306:3306  -e MYSQL_ROOT_PASSWORD=password --name mysql  mysql:5.6

解釋一下上面的參數(shù)run就是運(yùn)行docker鏡像的命令穴张,--name就是給容器取個(gè)名字叫mysql掉伏,-e就是設(shè)置容器里的環(huán)境變量缝呕,我們?cè)O(shè)置了mysql的密碼環(huán)境變量,這個(gè)變量會(huì)傳入容器里面來(lái)設(shè)置mysql的密碼斧散,-d就是把容器運(yùn)行在后臺(tái)供常,后面加的就是鏡像的名字了

容器如果刪了,那么我們的數(shù)據(jù)不就也沒(méi)有了鸡捐,那么有沒(méi)有一種方法把容器中的數(shù)據(jù)存在容器外面栈暇,有,我們換一種方式來(lái)運(yùn)行mysql容器闯参,首先在本地新建一個(gè)/root/vol3/data文件夾用來(lái)存放mysql的數(shù)據(jù)文件

docker run -d -p 3306:3306 -v /root/vol3/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.6

-v的意思就是把容器中的目錄和宿主機(jī)中的目錄做映射瞻鹏,我們只要把容器中mysql的數(shù)據(jù)目錄映射到本地悲立,將來(lái)就算這個(gè)容器被刪除了,那么數(shù)據(jù)也還是在本地

4新博、查看容器

docker ps mysql

5薪夕、進(jìn)入mysql容器

docker  exec -it mysql /bin/bash

容器內(nèi)使用mysql命令可以進(jìn)行相關(guān)操作

root@c2ea1f543f35:/# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.44 MySQL Community Server (GPL)
 
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
mysql> 

創(chuàng)建成功,宿主機(jī)中的//root/vol3/data目錄也有通過(guò)mysql創(chuàng)建的數(shù)據(jù)庫(kù)

6赫悄、完成之后刪除mysql這個(gè)容器

    docker stop mysql
    docker rm mysql

接著我們重新生成容器

docker run -d -p 3306:3306 -v /root/vol3/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.6

檢查原來(lái)存放于mysql中數(shù)據(jù)可以重新訪問(wèn)原献,啟動(dòng)docker速度還快。

7埂淮、使用容器中的客戶端去連接其他的mysql數(shù)據(jù)庫(kù)(假設(shè)遠(yuǎn)程數(shù)據(jù)庫(kù)ip:72.17.0.1)

docker run -it --rm mysql:5.6 mysql -h172.17.0.1 -uroot -p

--rm的意思就是當(dāng)容器運(yùn)行結(jié)束之后就自動(dòng)刪除

     ~ docker run -it --rm mysql:5.6 mysql -h172.17.0.1 -uroot -p 
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 8
    Server version: 5.6.44 MySQL Community Server (GPL)
     
    Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
     
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.

還有一種連接方法姑隅,你可以想一下,兩個(gè)都是容器倔撞,那么就沒(méi)有一種更簡(jiǎn)單的方法去連接嗎讲仰?,實(shí)際上真的有痪蝇,采用--link我們可以這樣做

docker run -it --link mysql-data:mysql --rm mysql:5.6 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

通過(guò)mysql啟動(dòng)時(shí)自動(dòng)執(zhí)行sql文件

1鄙陡、首先創(chuàng)建Dckerfile:

FROM mysql:5.6
 
#設(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、編寫容器啟動(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,1590257904,1590257904,'TigerwolfC@example.com','TigerwolfC','chen','user');

因?yàn)槭菧y(cè)試牌柄,所以隨便寫了一個(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 ./docker-mysql .

docker build 為創(chuàng)建鏡像命令守屉,名稱為./docker-mysql惑艇,'.'表示當(dāng)前目錄,即Dockerfile文件所在的目錄,特別注意上述命令最后的一個(gè)“.”滨巴,千萬(wàn)不要弄掉思灌,創(chuàng)建過(guò)程如下:

你只要回車,連密碼嗎都可以不用輸入恭取,就是命令有點(diǎn)長(zhǎng)泰偿。

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

6蜈垮、啟動(dòng)容器

docker run -d -p 3306:3306 docker-mysql

7耗跛、進(jìn)入容器

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

docker exec -it 76d6c460e6f5 /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ò)程為:

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

輸入密碼123456通過(guò)登錄驗(yàn)證,show databases;

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

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

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

如有不對(duì)紊扬,歡迎指正蜒茄,相互學(xué)習(xí)唉擂,共同進(jìn)步餐屎。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市玩祟,隨后出現(xiàn)的幾起案子腹缩,更是在濱河造成了極大的恐慌,老刑警劉巖空扎,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藏鹊,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡转锈,警方通過(guò)查閱死者的電腦和手機(jī)盘寡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)撮慨,“玉大人竿痰,你說(shuō)我怎么就攤上這事∑瞿纾” “怎么了影涉?”我有些...
    開(kāi)封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)规伐。 經(jīng)常有香客問(wèn)我蟹倾,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任鲜棠,我火速辦了婚禮肌厨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘豁陆。我一直安慰自己夏哭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布献联。 她就那樣靜靜地躺著竖配,像睡著了一般。 火紅的嫁衣襯著肌膚如雪里逆。 梳的紋絲不亂的頭發(fā)上进胯,一...
    開(kāi)封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音原押,去河邊找鬼胁镐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛诸衔,可吹牛的內(nèi)容都是我干的盯漂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼笨农,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼就缆!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起谒亦,我...
    開(kāi)封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤竭宰,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后份招,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體切揭,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年锁摔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了廓旬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谐腰,死狀恐怖孕豹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情怔蚌,我是刑警寧澤巩步,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站桦踊,受9級(jí)特大地震影響椅野,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一竟闪、第九天 我趴在偏房一處隱蔽的房頂上張望离福。 院中可真熱鬧,春花似錦炼蛤、人聲如沸妖爷。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)絮识。三九已至,卻和暖如春嗽上,著一層夾襖步出監(jiān)牢的瞬間次舌,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工兽愤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留彼念,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓浅萧,卻偏偏與公主長(zhǎng)得像逐沙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子洼畅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355