MySQL在Docker環(huán)境下運行基礎(chǔ)
墨墨導(dǎo)讀:MySQL在Docker環(huán)境下運行的基礎(chǔ)操作,本文從Docker介紹、安裝Docker、MySQL安裝部署幾個方面展開介紹。
1. Docker介紹
1.1.
docker是一種linux容器技術(shù)。容器有效的將由單個操作系統(tǒng)掛管理的資源劃分到孤立的組中,以便更好的在組之間平衡有沖突的資源使用需求。每個容器內(nèi)運行一個應(yīng)用,不同的容器之間相互隔離,容器之間也可以建立通信機(jī)制。容器的創(chuàng)建和停止都十分快速,資源需求遠(yuǎn)遠(yuǎn)低于虛擬機(jī)。
優(yōu)點:
能高效地構(gòu)建應(yīng)用。
能快速的交付和部署
高效的資源利用
輕松的遷移擴(kuò)展
簡單的更新管理
1.2. 容器的發(fā)展史:


1.3. Docker容器的運行方式:(三大核心組件)
鏡像(images):類似虛擬機(jī)鏡像
倉庫(Repository):集中存放鏡像的地方。每個服務(wù)器上可以有多個倉庫。
容器(containers):鏡像的一個運行實例,類似linux系統(tǒng)環(huán)境,運行和隔離應(yīng)用

2. 安裝docker
2.1. 先決條件
必須是64位CPU架構(gòu)的計算機(jī),Docker目前不支持32位CPU;
運行Linux3.8或更高版本內(nèi)核,CentOS的內(nèi)核版本不能低于3.10;
內(nèi)核必須支持一種合適的存儲驅(qū)動,可以是Device Manager、AUFS、vfs、btrfs、以及默認(rèn)的驅(qū)動Device Mapper中的一個;
內(nèi)核必須支持并開啟cgroup和命名空間namespace功能。
2.2. 檢查前提條件
內(nèi)核
通過uname命令來檢查內(nèi)核版本信息。
檢查Device Mapper
ls -l /sys/class/misc/device-mapper
2.3. 安裝docker
環(huán)境準(zhǔn)備:
Kernel 3.10+
(1)檢查系統(tǒng)的內(nèi)核版本,返回的值大于3.10即可
[root@ss30 ~]# uname -r3.10.0-1127.el7.x86_64
(2)使用sudo或root權(quán)限的用戶登入中端
(3)保證apt-get是最新版本的,執(zhí)行如下命令:
命令:yum update
[root@ss30 ~]# yum update
安裝docker:
命令:yum -y install docker.io (apt-get install -y docker.io)用此命令安裝的可能不是docker的最新版本,要想安裝docker的最新版本可以使用如下命令:
命令:curl -s https://get.docker.com | sh
[root@ss30 redis6.0]# service docker start 或systemctl start docker.service[root@ss30 redis6.0]# ps -ef |grep dockerroot 6966 1 1 19:51 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sockroot 7102 1862 0 19:51 pts/0 00:00:00 grep --color=auto docker[root@ss30 redis6.0]# docker version

備注:移除Docker
yum -y remove docker-engine3. MySQL安裝部署
3.1. 拉去鏡像
訪問 MySQL 鏡像庫地址:https://hub.docker.com/_/mysql?tab=tags
下載鏡像
[root@ss30 softwares]# docker pull mysql:5.7.30
[root@ss30 img]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmysql 5.7.30 a4fdfd462add 9 days ago 448MB
備注:
docker images [OPTIONS] [REPOSITORY[:TAG]] ?:此命令是來查看我們本機(jī)都有哪些鏡像,也可以驗證我們的pull是否執(zhí)行成功
查看容器運行情況
[root@ss30 ~]# docker container ls[root@ss30 ~]# docker ps ##列出容器
備注:
docker ps [OPTIONS]說明:
-a :顯示所有的容器,包括未運行的。
-f :根據(jù)條件過濾顯示的內(nèi)容。
–format :指定返回值的模板文件。
-l :顯示最近創(chuàng)建的容器。
-n :列出最近創(chuàng)建的n個容器。
–no-trunc :不截斷輸出。
-q :靜默模式,只顯示容器編號。
-s :顯示總的文件大小。
3.2. 簡單啟動 mysql
查看所有container
[root@ss30 ~]# docker images[root@ss30 ~]# docker run -p 3306:3306 --name mysql5730 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.30[root@ss30 ~]# docker container ls


備注:
–name:為容器指定一個名稱,此處命名為mysql5.7
-e:配置信息,此處配置mysql的root用戶的登陸密碼
-p:端口映射,此處映射 主機(jī)3306端口 到 容器的3306端口
-d:后臺運行容器,并返回容器ID;
內(nèi)部映射的端口改成其他端口時候,需要進(jìn)入docker內(nèi) 把對應(yīng)的端口my.cnf進(jìn)行配置
登錄容器:docker exec -it 容器ID bash
docker exec -it b2240680eb53 /bin/bash3.3. 登錄mysql
查看所有container
[root@ss30 openssl-1.1.1g]# docker ps -a[root@ss30 openssl-1.1.1g]# docker start fd014d8ed34b ##關(guān)閉使用stop命令[root@ss30 openssl-1.1.1g]# docker ps

登錄docker之后 登錄數(shù)據(jù)庫:
進(jìn)入mysql容器
[root@ss30 ~]# docker exec -it mysql bashroot@fd014d8ed34b:/#root@fd014d8ed34b:/# mysql -uroot -p123456
3.4. 目錄映射
主機(jī)上創(chuàng)建對應(yīng)的映射目錄:
[root@ss30 mysql]# rm -rf /usr/local/docker/mysql/[root@ss30 docker]# mkdir -p /usr/local/docker/mysql/conf[root@ss30 docker]# mkdir -p /usr/local/docker/mysql/data[root@ss30 docker]# mkdir -p /usr/local/docker/mysql/logs
配置文件my.cnf
MySQL的默認(rèn)配置中可以找到/etc/mysql/my.cnf,這可能! includedir
/etc/mysql/conf.等額外的目錄d或/etc/mysql/mysql.conf.d(https://hub.docker.com/_/mysql/)
#vim /usr/local/docker/mysql/conf/my.cnf[mysqld]server_id = 1303306character_set_server = utf8mb4collation_server = utf8mb4_unicode_ciport = 3306transaction_isolation = READ-COMMITTEDmax_connections = 1000datadir = /var/lib/mysqlsocket = /var/run/mysqld/mysqld.sockpid_file = /var/run/mysqld/mysqld.pidlog_error??????????????????????????=?/var/log/mysql/error.log
# chmod 644 /usr/local/docker/mysql/conf/my.cnf
啟動數(shù)據(jù)庫
#docker run -p 3306:3306 --name mysql \-v /usr/local/docker/mysql/conf:/etc/mysql \-v /usr/local/docker/mysql/logs:/var/log/mysql \-v /usr/local/docker/mysql/data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=123456 \-d mysql:5.7.30
備注:-v:主機(jī)和容器的目錄映射關(guān)系,":"前為主機(jī)目錄,之后為容器目錄
備注:映射本地目錄之后,但MySQL容器出現(xiàn)故障之后,可通過文件遷移,掛載方式,用原有數(shù)據(jù)搭建新容器,提供服務(wù)。
3.5. 備份
mysqldump備份命令:
[root@ss30 opt]# docker exec 327a1c4866ee sh -c 'exec mysqldump -uroot -p123456 -P3309 --single-transaction --master-data --all-databases' > /opt/all-databases.sql
4. 總結(jié)
通過實踐,在docker中的MySQL部署和運維,還是比較簡單的。實際測試性能損耗也在10%,當(dāng)然主要個人認(rèn)為還是網(wǎng)絡(luò)方面的延遲。IO和CPU 已經(jīng)不再是瓶頸。
容器方面,更想進(jìn)一步深入的話,需要理解幾個核心點:
1.Docker的數(shù)據(jù)持久化:目錄的映射 和 volume方式
2.資源方面的隔離 Namespace 和 CGroup
3.容器服務(wù)編排:Mesos Swarm Kubernetes
4.網(wǎng)絡(luò)連接方式的選擇

3.?大型網(wǎng)站架構(gòu)演化發(fā)展歷程
8. 深入理解 MySQL:快速學(xué)會分析SQL執(zhí)行效率

掃碼二維碼關(guān)注我
·end·
—如果本文有幫助,請分享到朋友圈吧—
我們一起愉快的玩耍!




