Docker 安裝 MySQL

下載 MySQL Server Docker Image

#tag代表版本號,如5.5,5.6,5.7,8.0或者latest
docker pull mysql/mysql-server:tag

更多mysql鏡像性含,請查看https://hub.docker.com/r/mysql/mysql-server/tags/

 #查看下載的鏡像
 docker images

要下載MySQL Enterprise Edition 鏡像,請運行如下命令:

 docker pull store/oracle/mysql-enterprise-server:tag

docker pull container-registry.oracle.com/mysql/enterprise-server:tag

開啟MySQL Server 實例

使用以下命令為MySQL社區(qū)服務(wù)器啟動一個新的Docker容器:

docker run --name=mysql1 -d mysql/mysql-server:tag

如果從Oracle容器注冊表中下載了Docker鏡像稽物,那么就可以使用這個命令為MySQL企業(yè)服務(wù)器啟動一個新的Docker容器:

docker run --name=mysql1 -d container-registry.oracle.com/mysql/enterprise-server:tag

如果Docker映像是從Docker商店下載的,那么就用這個命令為MySQL企業(yè)服務(wù)器啟動一個新的Docker容器:

docker run --name=mysql1 -d store/oracle/mysql-enterprise-server:tag

--name 選項鸦做,為docker容器提供一個自定義的名稱,如mysql1,這個操作是可選的励烦。如果沒有提供容器名稱,則會生成一個隨機的容器名泼诱。如果之前的Docker pull 或 Docker run命令沒有下載指定名稱和標簽的Docker鏡像坛掠,那么上面的命令會去下載最新的mysql鏡像。下載完后治筒,容器的初始化就開始執(zhí)行屉栓。當(dāng)您運行docker ps命令時,docker容器列表中會顯示:

shell> docker ps
CONTAINER ID   IMAGE                COMMAND                          CREATED             STATUS                              PORTS                NAMES
a24888f0d6f4   mysql/mysql-server   "/entrypoint.sh my..."       14 seconds ago      Up 13 seconds (health: starting)        3306/tcp, 33060/tcp  mysql1

容器初始化可能需要一些時間耸袜。當(dāng)服務(wù)器準備好使用時友多,docker ps 命令輸出中的容器的狀態(tài)從(health:starting)到(healthy).上面的docker run 命令中使用的 -d 選項使容器在后臺運行。使用這個命令監(jiān)視容器的輸出:

docker logs mysql1

一旦初始化完成堤框,命令的輸出就會包含為root用戶生成的隨機密碼域滥。例如纵柿,檢查密碼。

shell> docker logs mysql1 2>&1 | grep GENERATED
GENERATED ROOT PASSWORD:Axegh3kAJyDLaRuBemecis&EShOs

從容器內(nèi)連接到MySQL服務(wù)器

一旦服務(wù)器準備好了骗绕,您就可以在剛剛啟動的MySQL服務(wù)器容器中運行MySQL客戶端藐窄,并將其連接到MySQL服務(wù)器。使用Docker exec -it 命令在您已經(jīng)啟動的Docker容器中啟動一個mysql客戶端酬土,如下所列:

docker exec -it mysql1 mysql -uroot -p

當(dāng)被詢問時荆忍,輸入生成的根密碼(參見上面關(guān)于如何查找密碼的MySQL服務(wù)器實例的最后一步)。因為mysql onetime password選項默認為true撤缴,在您將mysql客戶端連接到服務(wù)器之后刹枉,您必須通過發(fā)出以下語句重置服務(wù)器根密碼:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

用您選擇的密碼替換密碼。一旦密碼被重置屈呕,服務(wù)器就可以使用了微宝。

容器Shell訪問

要讓shell訪問MySQL服務(wù)器容器,請使用docker exec -it 命令在容器內(nèi)啟動一個bash shell:

shell> docker exec -it mysql1 bash 
bash-4.2#

然后您可以在容器內(nèi)運行Linux命令虎眨。例如蟋软,要查看容器內(nèi)服務(wù)器的數(shù)據(jù)目錄中的內(nèi)容,請使用以下命令:

bash-4.2# ls /var/lib/mysql
auto.cnf    ca.pem       client-key.pem  ib_logfile0  ibdata1        mysql       mysql.sock.lock       private_key.pem  server-        cert.pem  sys
ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile1          ibtmp1   mysql.sock  performance_schema  public_key.pem               server-key.pem

停止并刪除一個MySQL容器

要停止我們創(chuàng)建的MySQL服務(wù)器容器嗽桩,請使用以下命令:

docker stop mysql1

docker stop 向mysqld進程發(fā)送SIGTERM信號岳守,這樣服務(wù)器就會優(yōu)雅地關(guān)閉。
還要注意的是碌冶,當(dāng)容器的主進程(MySQL服務(wù)器容器中的mysqld)停止時湿痢,Docker容器會自動停止。
再次啟動MySQL服務(wù)器容器:

docker start mysql1

重啟容器

docker restart mysql1

刪除mysql服務(wù)容器前先停止容器:

docker stop mysql1
docker rm mysql1
如果您想要同時刪除服務(wù)器數(shù)據(jù)目錄的Docker卷扑庞,則將 -v 選項添加到Docker rm命令中譬重。

致此,以上操作已經(jīng)完全滿足docker安裝mysql的方式罐氨。如下是針對Docker的優(yōu)化MySQL安裝 臀规。

針對Docker的優(yōu)化MySQL安裝

MySQL的Docker鏡像針對代碼的大小進行了優(yōu)化,這意味著它們只包含了那些在Docker容器中運行MySQL實例的大多數(shù)用戶的關(guān)鍵組件栅隐。在以下方面以现,MySQL Docker安裝與普通的、非Docker的安裝不同:
包含的二進制文件僅限于:
/usr/bin/my_print_defaults
/usr/bin/mysql
/usr/bin/mysql_config
/usr/bin/mysql_install_db
/usr/bin/mysql_tzinfo_to_sql
/usr/bin/mysql_upgrade
/usr/bin/mysqladmin
/usr/bin/mysqlcheck
/usr/bin/mysqldump
/usr/bin/mysqlpump
/usr/sbin/mysqld
所有的二進制被剝落约啊,不包含調(diào)試信息。

配置MySQL Server

當(dāng)你啟動mysql docker容器時佣赖,您可以通過Docker run命令將配置選項傳遞給服務(wù)器;例如:

docker run --name mysql1 -d mysql/mysql-server:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_col

命令以utf8mb4作為默認字符集和utf8mb4col作為您的數(shù)據(jù)庫的默認排序啟動MySQL服務(wù)器恰矩。
另一種配置MySQL服務(wù)器的方法是準備一個配置文件,并將其掛載到容器內(nèi)的服務(wù)器配置文件的位置憎蛤。有關(guān)詳細信息外傅,請參閱持久數(shù)據(jù)和配置更改纪吮。

持久數(shù)據(jù)和配置更改

Docker容器在原則上是臨時的,如果容器被刪除或損壞,任何數(shù)據(jù)或配置都將丟失(參見討論)。然而,Docker卷提供了一種機制,可以在Docker容器中保存數(shù)據(jù)萎胰。在初始化時,MySQL服務(wù)器容器為服務(wù)器數(shù)據(jù)目錄創(chuàng)建Docker卷碾盟。運行docker檢查容器命令的JSON輸出有一個掛載鍵,其值提供數(shù)據(jù)目錄卷的信息:

shell> docker inspect mysql1 
...
 "Mounts": [
        {
            "Type": "volume",
            "Name": "4f2d463cfc4bdd4baebcb098c97d7da3337195ed2c6572bc0b89f7e845d27652",
            "Source": "/var/lib/docker/volumes/4f2d463cfc4bdd4baebcb098c97d7da3337195ed2c6572bc0b89f7e845d27652/_data",
            "Destination": "/var/lib/mysql",
            "Driver": "local",
            "Mode": "",
            "RW": true,
            "Propagation": ""
        }
    ],
...

輸出顯示源文件夾
/var/lib/docker/volumes/4f2d463cfc4bdd4baebcb098c97d7da3337195ed2c6572bc0b89f7e845d27652/_data,將數(shù)據(jù)持久化到主機上的數(shù)據(jù),已經(jīng)安裝在/var/lib/mysql中技竟,容器內(nèi)的服務(wù)器數(shù)據(jù)目錄冰肴。

保存數(shù)據(jù)的另一種方法是在創(chuàng)建容器時使用 --mount 選項掛載主機目錄。同樣的技術(shù)可以用來持久化服務(wù)器的配置榔组。下面的命令創(chuàng)建一個MySQL服務(wù)器容器熙尉,并將數(shù)據(jù)目錄和服務(wù)器配置文件綁定在一起:

docker run --name=mysql1 \
--mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf \
--mount type=bind,src=/path-on-host-machine/datadir,dst=/var/lib/mysql \
-d mysql/mysql-server:tag

配置文件path-on-host-machine/my.cnf必須存在,同時包含指定的用戶:

[mysqld]
user=mysql

path-on-host-machine.datadir目錄必須存在搓扯。要發(fā)生服務(wù)器初始化检痰,目錄必須是空的。您還可以安裝一個帶有數(shù)據(jù)的目錄锨推,并使用它啟動服務(wù)器;但是铅歼,您必須確保啟動Docker容器,其配置與創(chuàng)建數(shù)據(jù)的服務(wù)器具有相同的配置换可,并且啟動容器時所需的任何主機文件或目錄都被安裝椎椰。

運行額外的初始化腳本

如果您想在創(chuàng)建后立即在數(shù)據(jù)庫上運行任何.sh或.sql腳本,您可以將它們放入主機目錄中锦担,然后mount目錄在/docker-entrypoint-initdb.d

docker run --name=mysql1 \
--mount type=bind,src=/path-on-host-machine/scripts/,dst=/docker-entrypoint-initdb.d/ \
-d mysql/mysql-server:tag

從另一個Docker容器中的應(yīng)用程序連接到MySQL

通過建立一個Docker網(wǎng)絡(luò)俭识,你可以讓多個Docker容器相互通信,這樣洞渔,在另一個Docker容器中的客戶端應(yīng)用程序就可以在服務(wù)器容器中訪問MySQL服務(wù)器套媚。首先,創(chuàng)建一個Docker網(wǎng)絡(luò):

docker network create my-custom-net

然后磁椒,當(dāng)您創(chuàng)建并啟動服務(wù)器和客戶端容器時堤瘤,使用-網(wǎng)絡(luò)選項將它們放在您創(chuàng)建的網(wǎng)絡(luò)上。例如:

docker run --name=mysql1 --network=my-custom-net -d mysql/mysql-server

docker run --name=myapp1 --network=my-custom-net -d myapp

myapp1容器隨后可以與mysql1主機連接到mysql1容器浆熔,反之亦然本辐,因為Docker會自動為給定的容器名稱設(shè)置一個DNS。在下面的例子中医增,我們從myapp1容器中運行mysql客戶端慎皱,以便在自己的容器中連接主機mysql1:

docker exec -it myapp1 mysql --host=mysql1 --user=myuser --password

參考:https://dev.mysql.com/doc/refman/5.7/en/docker-mysql-more-topics.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市叶骨,隨后出現(xiàn)的幾起案子茫多,更是在濱河造成了極大的恐慌,老刑警劉巖忽刽,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件天揖,死亡現(xiàn)場離奇詭異夺欲,居然都是意外死亡,警方通過查閱死者的電腦和手機今膊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門些阅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人斑唬,你說我怎么就攤上這事市埋。” “怎么了赖钞?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵腰素,是天一觀的道長。 經(jīng)常有香客問我雪营,道長弓千,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任献起,我火速辦了婚禮洋访,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谴餐。我一直安慰自己姻政,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布岂嗓。 她就那樣靜靜地躺著汁展,像睡著了一般。 火紅的嫁衣襯著肌膚如雪厌殉。 梳的紋絲不亂的頭發(fā)上食绿,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音公罕,去河邊找鬼器紧。 笑死,一個胖子當(dāng)著我的面吹牛楼眷,可吹牛的內(nèi)容都是我干的铲汪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼罐柳,長吁一口氣:“原來是場噩夢啊……” “哼掌腰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起张吉,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤辅斟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后芦拿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體士飒,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年蔗崎,在試婚紗的時候發(fā)現(xiàn)自己被綠了酵幕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡缓苛,死狀恐怖芳撒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情未桥,我是刑警寧澤笔刹,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站冬耿,受9級特大地震影響舌菜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜亦镶,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一日月、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缤骨,春花似錦爱咬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至虱歪,卻和暖如春蜂绎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背实蔽。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工荡碾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人局装。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓坛吁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親铐尚。 傳聞我的和親對象是個殘疾皇子拨脉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容