docker安裝mysql并實(shí)現(xiàn)數(shù)據(jù)卷掛載的示例代碼
1.下載mysql的鏡像
我們先通過docker命令docker pull mysql:latest
下載docker的鏡像
這里我們可以在mysql:
后加上我們想要的版本,這里如果沒有指定版本將會(huì)下載最新的latest
版本
2.數(shù)據(jù)卷掛載
在創(chuàng)建mysql容器之前,我們先了解一下什么時(shí)數(shù)據(jù)卷掛載:
首先,每當(dāng)我們創(chuàng)建一個(gè)容器,容器內(nèi)部的文件和宿主機(jī)文件是分離開的,這里會(huì)有兩個(gè)比較重要的問題:
- 我們?nèi)绻苯硬僮鱩ysql容器中的文件會(huì)很麻煩,在容器中目錄層級(jí)可能會(huì)很復(fù)雜
- 我們?nèi)绻獙?duì)mysql進(jìn)行升級(jí)或者其他操作,那么數(shù)據(jù)卷會(huì)隨之丟失,我們的數(shù)據(jù)庫中的數(shù)據(jù)也會(huì)隨之一起丟失
那么我們有什么方法去解決呢?當(dāng)然就是數(shù)據(jù)卷掛載,我們先創(chuàng)建一個(gè)mysql容器來體驗(yàn)一下什么是容器
docker run -d \ --name mysql-demo \ -p 3306:3306 \ -e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=123 \ mysql?
我這里因?yàn)?306端口已經(jīng)有一個(gè)mysql容器,所以我用3307端口來演示
下面逐條來解釋一下每一條命令的含義
# 創(chuàng)建并運(yùn)行一個(gè)容器,-d 是讓容器在后臺(tái)運(yùn)行 docker run # 給容器起一個(gè)名字(mysql),必須唯一 --name mysql # 設(shè)置端口映射 <宿主機(jī)端口>:<容器內(nèi)端口> -p 3306:3306 # 設(shè)置環(huán)境變量 -e KEY=VALUE # 指定運(yùn)行時(shí)的鏡像的名字,一般由兩部分組成:[repository]:[tag],其中repostory就是鏡像名,tag是鏡像的版本,沒有指定tag時(shí),默認(rèn)是latest,代表最新版本的鏡像 mysql
接下來可以通過docker ps
來查看我們的已經(jīng)啟動(dòng)的容器
通過docker inspect mysql-demo
可以查看我們mysql-demo容器的詳細(xì)信息,我們這里找到Mounts這里,這里就是我們mysql-demo容器的詳細(xì)掛載信息。
看到這里你可能會(huì)問,我還不會(huì)設(shè)置容器的數(shù)據(jù)卷掛載,為什么他這里直接自動(dòng)掛載了呢?
這是因?yàn)槲覀冊(cè)趧?chuàng)建容器的時(shí)候,docker會(huì)幫我們自動(dòng)生成一個(gè)匿名卷,然后和我們的mysql容器進(jìn)行掛載,我們可以docker volume ps
通過查看所有的數(shù)據(jù)卷信息,對(duì)應(yīng)上圖發(fā)現(xiàn),這個(gè)就是我們對(duì)應(yīng)的數(shù)據(jù)卷,我們mysql容器的數(shù)據(jù)都會(huì)存放在這里。
但是這名字也太長(zhǎng)了,我們后期也不好維護(hù),我們可以在創(chuàng)建容器的時(shí)候就指定數(shù)據(jù)卷的掛載
先將剛剛創(chuàng)建的mysql容器刪除docker rm -f mysql-demo
現(xiàn)在我們可以挑選一個(gè)地方來存儲(chǔ)我們的數(shù)據(jù)卷,我這里以/root
目錄下來演示,先創(chuàng)建一個(gè)目錄,并進(jìn)入該目錄
mkdir mysql-demo cd mysql-demo
創(chuàng)建conf、data、init目錄
mkdir conf mkdir data mkdir init
進(jìn)入conf目錄
cd conf
創(chuàng)建并編寫一個(gè).cnf配置文件,只要后綴是cnf即可,名字可以任意,我這里命名為custom.cnf
vi custom.cnf
編寫內(nèi)容如下,作用:在linux系統(tǒng)中查看數(shù)據(jù)庫內(nèi)容出現(xiàn)中文亂碼
[client] default_character_set=utf8mb4 [mysql] default_character_set=utf8mb4 [mysqld] character_set_server=utf8mb4 collation_server=utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4'
到這里我們可以直接來創(chuàng)建并運(yùn)行MySQL容器
docker run -d \ --name mysql-demo \ -p 3306:3306 \ -e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=123 \ -v /root/mysql-demo/data:/var/lib/mysql \ -v /root/mysql-demo/init:/docker-entrypoint-initdb.d \ -v /root/mysql-demo/conf:/etc/mysql/conf.d \ mysql
這次我們的命令和上面不同的是多出了三個(gè)-v
開頭的命令,這就是指定數(shù)據(jù)卷目錄掛載的命令
我們可以再次查看mysql容器的掛載信息
docker inspect mysql-demo
到這里,我們就實(shí)現(xiàn)了數(shù)據(jù)卷的掛載,那么到底有什么用呢?
3.為什么要實(shí)現(xiàn)數(shù)據(jù)卷掛載?
實(shí)現(xiàn)數(shù)據(jù)卷掛載,只要我們每次創(chuàng)建容器掛載的是同一目錄,那么我們就可以將數(shù)據(jù)保留,不會(huì)造成數(shù)據(jù)的丟失我們可以先進(jìn)入mysql容器docker exec -it mysql-demo bash
然后連接mysqlmysql -u root -p123
接著我們可以創(chuàng)建一個(gè)數(shù)據(jù)庫create database mysql_test;
查看當(dāng)前所有的數(shù)據(jù)庫show databases;
我們退出mysqlexit
再推出mysql容器exit
刪除剛剛創(chuàng)建的mysql容器docker rm -f mysql-demo
現(xiàn)在我們可以通過docker ps -a
命令來查看當(dāng)前的所有容器,發(fā)現(xiàn)mysql-demo已經(jīng)被刪除,我們?cè)俅芜\(yùn)行上面的創(chuàng)建容器命令,這里我們可以給我們的容器改一個(gè)名稱
docker run -d \ --name mysql-demo2 \ -p 3306:3306 \ -e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=123 \ -v /root/mysql-demo/data:/var/lib/mysql \ -v /root/mysql-demo/init:/docker-entrypoint-initdb.d \ -v /root/mysql-demo/conf:/etc/mysql/conf.d \ mysql
進(jìn)入mysql容器,發(fā)現(xiàn)我們之前創(chuàng)建的mysql_test表還在,相信你也對(duì)數(shù)據(jù)卷掛載有了一個(gè)清晰的認(rèn)識(shí)
到此這篇關(guān)于docker安裝mysql并實(shí)現(xiàn)數(shù)據(jù)卷掛載的示例代碼的文章就介紹到這了,更多相關(guān)docker mysql數(shù)據(jù)卷掛載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用遠(yuǎn)程Docker進(jìn)行集成測(cè)試的環(huán)境搭建過程
使用docker可以幫助我們快速的搭建項(xiàng)目依賴環(huán)境,但是本地化的docker依賴,依然讓我們的代碼在測(cè)試時(shí),不夠純粹,對(duì)其各個(gè)運(yùn)行環(huán)境,都有本地docker安裝的要求2021-07-07如何通過Dockerfile 創(chuàng)建 kali-novnc
這篇文章主要介紹了如何通過Dockerfile 創(chuàng)建 kali-novnc,在Dockerfile所在目錄運(yùn)行相關(guān)命令操作即可完成,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-04-04教你使用Portainer管理多臺(tái)Docker容器環(huán)境的方法
這篇文章主要介紹了Portainer管理多臺(tái)Docker容器環(huán)境,本文給大家介紹的非常詳細(xì),包括環(huán)境準(zhǔn)備及管理docker的詳細(xì)過程,需要的朋友可以參考下2021-11-11CentOS7 安裝docker 解決啟動(dòng)不了的問題
這篇文章主要介紹了CentOS7 安裝docker 解決啟動(dòng)不了的相關(guān)資料,需要的朋友可以參考下2016-10-10Docker多平臺(tái)安裝與配置指南的實(shí)現(xiàn)
這篇文章主要介紹了Docker多平臺(tái)安裝與配置指南的實(shí)現(xiàn),深入研究了Docker在Linux、Windows、和macOS等不同平臺(tái)上的安裝過程及Docker鏡像管理、容器運(yùn)維、使用Docker Compose進(jìn)行多容器管理,以及網(wǎng)絡(luò)與數(shù)據(jù)管理等,感興趣的可以了解一下2024-01-01