您好,登錄后才能下訂單哦!
前言:?
上篇文章介紹了Docker工具的安裝及常用命令使用。本篇文章我們會(huì)介紹如何在Docker中運(yùn)行MySQL實(shí)例,可能有的小伙伴會(huì)問(wèn):為什么要在Docker里運(yùn)行MySQL呢?因?yàn)樵贒ocker里部署MySQL實(shí)例操作簡(jiǎn)單,不需要考慮操作系統(tǒng)等依賴差異,而且可以多實(shí)例部署,比如說(shuō)我們?cè)瓉?lái)服務(wù)器有安裝MySQL5.7,我們想再運(yùn)行MySQL8.0實(shí)例的話只需要用Docker啟動(dòng)MySQL8.0鏡像即可。下面我們就來(lái)介紹下如何用Docker啟動(dòng)MySQL實(shí)例。
在上篇文章中我們介紹過(guò)Docker中三個(gè)基本的概念:鏡像,容器,倉(cāng)庫(kù)。要用在Docker中部署MySQL,第一步要做的是從官方倉(cāng)庫(kù)中拉取MySQL鏡像,這里我們從Docker Hub中拉取MySQL鏡像。進(jìn)入Docker Hub,搜索MySQL,可以看到如下畫(huà)面,其中有不同版本的鏡像及使用介紹。
cdn.nlark.com/yuque/0/2019/png/119537/1572918549506-2b81bb36-1574-4aea-bc6b-9bb21fd1178d.png">
比如我們想拉取MySQL5.7版本及8.0版本的鏡像,可以做如下操作:
# 拉取5.7及8.0版本鏡像 稍等片刻即可拉取成功
docker pull mysql:5.7.23
docker pull mysql:8.0.18
# 查看鏡像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 8.0.18 c8ee894bd2bd 2 weeks ago 456MB
mysql 5.7.23 1b30b36ae96a 12 months ago 372MB
其實(shí)MySQL官方鏡像也存在一些缺陷,比如說(shuō)時(shí)區(qū)不是北京時(shí)間,系統(tǒng)字符集問(wèn)題等。下面以MySQL5.7.23版本鏡像為基礎(chǔ),展示下如何修改構(gòu)建鏡像。
# 創(chuàng)建Dockerfile 主要作用是更改系統(tǒng)字符集及時(shí)區(qū) 內(nèi)容如下:
cat Dockerfile
FROM mysql:5.7.23
MAINTAINER wang
RUN echo "alias ls='ls --color=auto'" >> /root/.bashrc \
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV LANG=C.UTF-8
# 構(gòu)建鏡像
docker build -t my-mysql:5.7.23 .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM mysql:5.7.23
---> 1b30b36ae96a
Step 2/4 : MAINTAINER wang
---> Running in a7cc94f95cc7
Removing intermediate container a7cc94f95cc7
---> d9590ed98de5
Step 3/4 : RUN echo "alias ls='ls --color=auto'" >> /root/.bashrc && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
---> Running in e698bfdb3817
Removing intermediate container e698bfdb3817
---> 31c9ed9103c5
Step 4/4 : ENV LANG=C.UTF-8
---> Running in eefa296fef94
Removing intermediate container eefa296fef94
---> 10aa697936e9
Successfully built 10aa697936e9
Successfully tagged my-mysql:5.7.23
# 再次查看鏡像即可找到我們新構(gòu)建的鏡像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my-mysql 5.7.23 10aa697936e9 About a minute ago 372MB
mysql 8.0.18 c8ee894bd2bd 2 weeks ago 456MB
mysql 5.7.23 1b30b36ae96a 12 months ago 372MB
這里為大家介紹如何利用上面構(gòu)建的鏡像來(lái)運(yùn)行MySQL實(shí)例,MySQL容器化其實(shí)也需要映射端口,數(shù)據(jù)持久化,加載配置文件等操作,下面給大家演示下具體啟動(dòng)操作。
2.1 創(chuàng)建數(shù)據(jù)持久化路徑及配置文件
# 創(chuàng)建配置文件目錄及數(shù)據(jù)目錄
mkdir -p /data/mysql57/{cnf,data}
# 添加配置文件my.cnf
cd /data/mysql57/cnf/
vim my.cnf
# 配置文件內(nèi)容如下,可自定義
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
server-id = 33061
max_connections = 1000
sql_mode = NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
lower_case_table_names=1
innodb_file_per_table = 1
log_timestamps=SYSTEM
character-set-server = utf8
max_allowed_packet = 32M
sort_buffer_size = 4M
read_buffer_size = 4M
join_buffer_size = 4M
binlog_cache_size = 4M
tmp_table_size = 96M
max_heap_table_size = 96M
innodb_buffer_pool_size = 512M
#logs
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/slow.log
long_query_time = 3
log-bin = /var/lib/mysql/binlog
binlog_format = row
expire_logs_days = 15
log_bin_trust_function_creators = 1
2.2 docker run運(yùn)行MySQL實(shí)例
# 一條命令啟動(dòng)一個(gè)MySQL實(shí)例
docker run -itd -p 33061:3306 --name mysql57 --hostname=mysql57 -v /data/mysql57/cnf:/etc/mysql -v /data/mysql57/data:/var/lib/mysql --privileged=true -e MYSQL_ROOT_PASSWORD=Asdf@123456 my-mysql:5.7.23
# 解釋下各個(gè)參數(shù)的含義
-d: 后臺(tái)運(yùn)行容器,并返回容器ID
-i: 以交互模式運(yùn)行容器,通常與 -t 同時(shí)使用
-t: 為容器重新分配一個(gè)偽輸入終端,通常與 -i 同時(shí)使用
-p: 指定端口映射,格式為:主機(jī)(宿主)端口:容器端口
--name="mysql57": 為容器指定一個(gè)名稱
--hostname=mysql57: 指定容器的hostname
-v: 綁定一個(gè)卷
--privileged=true: 以特權(quán)方式啟動(dòng)容器
2.3 檢查容器狀態(tài)
# 查看容器狀態(tài)
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
04cd3d99d5cb my-mysql:5.7.23 "docker-entrypoint.s…" 13 seconds ago Up 11 seconds 33060/tcp, 0.0.0.0:33061->3306/tcp mysql57
# 進(jìn)入容器內(nèi)
docker exec -it mysql57 /bin/bash 或 docker exec -it [CONTAINER ID] /bin/bash
到此為止,我們已經(jīng)在Docker中成功運(yùn)行了MySQL實(shí)例,其實(shí)還沒(méi)有結(jié)束,還有好多操作還沒(méi)講,比如如何備份恢復(fù),怎么更改配置等,下面簡(jiǎn)單介紹下這類相關(guān)操作。
# 備份
docker exec mysql57 sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /tmp/all-databases.sql
# 恢復(fù)
docker exec -i mysql57 sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /tmp/all-databases.sql
# 更改配置只需要修改宿主機(jī) /data/mysql57/cnf/my.cnf 文件,然后重啟容器即可
docker restart mysql57
如果你想在本地通過(guò)工具連接容器內(nèi)MySQL的話,可以使用宿主機(jī)ip加映射端口來(lái)連接。比如我們上面創(chuàng)建的MySQL實(shí)例就可以通過(guò)宿主機(jī)ip+30661端口來(lái)連接,若無(wú)法連接請(qǐng)檢查網(wǎng)絡(luò)及服務(wù)器防火墻。
總結(jié):?
本文主要介紹在Docker中部署MySQL的方法步驟,體驗(yàn)下來(lái)你會(huì)發(fā)現(xiàn)非常簡(jiǎn)單方便,而且可以大規(guī)模多實(shí)例部署。假如你想體驗(yàn)最新版本8.0.18的話,可以自己部署下試試看,其實(shí)還可以更簡(jiǎn)單,比如說(shuō)直接運(yùn)行docker run mysql:5.7.23 即可啟動(dòng)一個(gè)實(shí)例,但是為了更加規(guī)范,還是建議將配置文件及數(shù)據(jù)目錄都掛載到宿主機(jī)本地。
參考資料:?
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。