使用Docker容器運(yùn)行Mysql實(shí)戰(zhàn)記錄
前言
隨著虛擬化技術(shù)和云計(jì)算的普及,容器技術(shù)的優(yōu)點(diǎn)也逐步體現(xiàn),軟件部署和環(huán)境遷移的優(yōu)勢(shì)無可替代。
目前Docker已經(jīng)成為容器技術(shù)中的主要代表,恰好涉及需要在liunux系統(tǒng)上部署Mysql數(shù)據(jù)庫用于測(cè)試,由于是初次使用docker部署Mysql,所以對(duì)其中一些操作進(jìn)行記錄。
一、基礎(chǔ)的虛擬機(jī)環(huán)境
使用虛擬機(jī),安裝ubuntu系統(tǒng),發(fā)行版和內(nèi)核信息如下:
root@ldap:/# cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=22.04 DISTRIB_CODENAME=jammy DISTRIB_DESCRIPTION="Ubuntu 22.04.2 LTS" root@ldap:/# uname -r 5.15.0-72-generic root@ldap:/#
只所以使用ubuntu是因?yàn)閏entos各大鏡像站都已經(jīng)停止維護(hù),在基礎(chǔ)系統(tǒng)安裝過程中,經(jīng)常出現(xiàn)一些莫名其妙的問題,雖然可以解決但比較浪費(fèi)時(shí)間。
二、安裝過程
安裝配置docker
# 安裝 docker 和 docker-compose #先移除docker。其實(shí)也不用重裝docker,我用的ubuntu里已經(jīng)安裝了完整的docker,但我想用用華為云發(fā)布的docker-ce,所以就按說明對(duì)原docker進(jìn)行了移除操作 #如果不是root用戶,則需要加sudo,否則不用。 sudo apt remove docker docker-engine dockdocker.io containerd runc #更新后,安裝依賴,apt源已經(jīng)改為華為鏡像源 sudo apt update sudo apt install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common #運(yùn)行公鑰,添加docker軟件倉庫 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" #安裝docker-ce docker-ce-clicontainerd.io sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io -y #sudo curl -L "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose #sleep 1 #sudo chmod +x /usr/local/bin/docker-compose #安裝docker-compose apt install docker-compose docker-compose-plugin -y #啟動(dòng)docker,開機(jī)自啟動(dòng) systemctl start docker systemctl enable docker
拉取Mysql鏡像
#查看倉庫mysql鏡像 #docker search mysql docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 14159 [OK] mariadb MariaDB Server is a high performing open sou… 5408 [OK] percona Percona Server is a fork of the MySQL relati… 609 [OK] phpmyadmin phpMyAdmin - A web interface for MySQL and M… 802 [OK] circleci/mysql MySQL is a widely used, open-source relation… 29 bitnami/mysql Bitnami MySQL Docker Image 86 [OK] bitnami/mysqld-exporter 5 ubuntu/mysql #使用命令docker pull mysql ,默認(rèn)tag:latest docker pull mysql Using default tag: latest latest: Pulling from library/mysql 90e2fb2facff: Pull complete ba60eb20fd5f: Pull complete 4f509402d469: Pull complete 496c2cfa6815: Pull complete 8ec1dfa9522c: Pull complete 6dec7ba896f8: Pull complete dc9ff75362b0: Pull complete 73e4682f9014: Pull complete 9ffdeecd6fb6: Pull complete a4346ccfb53f: Pull complete 434c13bc32de: Pull complete Digest: sha256:d6164ff4855b9b3f2c7748c6ec564ccff841f79a7023db0f9293143481a44b6e Status: Downloaded newer image for mysql:latest docker.io/library/mysql:latest
用docker啟動(dòng)mysql
docker run -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:latest 60bc33b60efa81c32d93e3452fd5fbe3a5d72c4cfc898d77af1a70a83cdd77e5 root@l:/# root@l:/# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES root@:/#
命令的使用和參數(shù)具體解釋如下:
1.必要參數(shù):
-p 3306:3306:將宿主主機(jī)的3306端口映射到容器的3306端口,使宿主主機(jī)可以連接容器內(nèi)的MySQL服務(wù)。
–name mysql:為容器命名為mysql。
2.數(shù)據(jù)卷配置參數(shù):
- -v /mydata/mysql/log:/var/log/mysql:將宿主機(jī)上的/mydata/mysql/log目錄掛載到容器的/var/log/mysql目錄下,用于存儲(chǔ)MySQL的日志文件。
- -v /mydata/mysql/data:/var/lib/mysql:將宿主機(jī)上的/mydata/mysql/data目錄掛載到容器的/var/lib/mysql目錄下,用于存儲(chǔ)MySQL的數(shù)據(jù)文件。
- -v /mydata/mysql/conf:/etc/mysql:將宿主機(jī)上的/mydata/mysql/conf目錄掛載到容器的/etc/mysql目錄下,用于存儲(chǔ)MySQL的配置文件。
3.MySQL賬戶安全參數(shù):
-e MYSQL_ROOT_PASSWORD=root:設(shè)置MySQL的root賬戶密碼為root。建議設(shè)置復(fù)雜的密碼。
4.容器啟動(dòng)參數(shù):
-d mysql:lates:使用MySQL:lates鏡像,在宿主機(jī)后臺(tái)啟動(dòng)容器,并命名為mysql。
通過以上參數(shù)配置,可以實(shí)現(xiàn)對(duì)MySQL容器的定制化部署,提高應(yīng)用程序的性能和可靠性。
這時(shí)候,返回一串字符“60bc33b60efa81c32d93e3452fd5fbe3a5d72c4cfc898d77af1a70a83cdd77e5”
表示命令正常執(zhí)行,而且已經(jīng)運(yùn)行了Mysql鏡像容器。
當(dāng)然,如果你這樣做了,會(huì)發(fā)現(xiàn):
#使用docker ps查看不到mysql的進(jìn)程 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES #加參數(shù)-a后是有記錄的 # docker ps -a docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 60bc33b60efa mysql "docker-entrypoint.s…" 2 days ago Exited (1) 2 days ago mysql
原因是:雖然成功運(yùn)行的了mysql容器,但是容器中沒有在執(zhí)行的程序,所以容器自動(dòng)停止了。
你可以根據(jù)自己的需要,在啟動(dòng)時(shí)添加容器運(yùn)行參數(shù),例如
#以交互方式運(yùn)行容器,并加載bash指令集 #docker run -it -p 3306:3306 --name mysql_new1 -e MYSQL_ROOT_PASSWORD=root -d mysql bash #之前使用centos、ubuntu等基礎(chǔ)鏡像時(shí),使用參數(shù)-it后,會(huì)進(jìn)入到容器內(nèi),但這里不知道為什么,命令符還是宿主機(jī)的 docker run it -e MYSQL_ROOT_PASSWORD=root -d mysql bash 101258d2fdbf87f97dd533a05f164e2c6ec152e170a497b4ac787723cfc2cc81 # docker ps就可以看到運(yùn)行容器狀態(tài) docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 101258d2fdbf mysql "docker-entrypoint.s…" 7 seconds ago Up 6 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql_new1 #進(jìn)入容器:docker exec -it mysql bash docker exec -it 101 bash bash-4.4# ls bin dev entrypoint.sh home lib64 mnt proc run srv tmp var boot docker-entrypoint-initdb.d etc lib media opt root sbin sys usr bash-4.4# cat /etc/os-release NAME="Oracle Linux Server" VERSION="8.8" ID="ol" ID_LIKE="fedora" VARIANT="Server" VARIANT_ID="server" VERSION_ID="8.8" PLATFORM_ID="platform:el8" PRETTY_NAME="Oracle Linux Server 8.8" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:oracle:linux:8:8:server" HOME_URL="https://linux.oracle.com/" BUG_REPORT_URL="https://bugzilla.oracle.com/" ORACLE_BUGZILLA_PRODUCT="Oracle Linux 8" ORACLE_BUGZILLA_PRODUCT_VERSION=8.8 ORACLE_SUPPORT_PRODUCT="Oracle Linux" ORACLE_SUPPORT_PRODUCT_VERSION=8.8 #尷尬了,沒用過Oracle Linux 8
總結(jié)
以上就是我使用docker運(yùn)行mysql的過程記錄,docker的使用使用雖然簡(jiǎn)單而且便利,但對(duì)不同程序鏡像運(yùn)行容器時(shí),還是要對(duì)具體要運(yùn)行的程序有一定的了解,比如mysql,至少要知道一些mysql的使用命令或者參數(shù)。
相關(guān)文章
docker部署nodejs開發(fā)環(huán)境詳細(xì)步驟(基礎(chǔ)示例篇)
這篇文章主要給大家介紹了docker部署nodejs開發(fā)環(huán)境詳細(xì)步驟,docker是一個(gè)開源的應(yīng)用容器引擎,可以為我們提供安全、可移植、可重復(fù)的自動(dòng)化部署的方式,需要的朋友可以參考下2023-10-10Docker部署web項(xiàng)目的實(shí)現(xiàn)
這篇文章主要介紹了Docker部署web項(xiàng)目的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10Docker容器化部署嘗試——多容器通信(node+mongoDB+nginx)
這篇文章主要介紹了Docker容器化部署嘗試——多容器通信(node+mongoDB+nginx),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12解決docker安裝jenkins容器內(nèi)無法訪問外網(wǎng)
這篇文章為大家主要介紹了docker安裝jenkins容器內(nèi)無法訪問外網(wǎng)的問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11linux上安裝Docker(非常簡(jiǎn)單的安裝方法)
今天小編就為大家分享一篇關(guān)于linux上安裝Docker(非常簡(jiǎn)單的安裝方法),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-04-04寫給前端的nginx配置指南基于docker所有配置秒級(jí)運(yùn)行(最新講解)
這篇文章主要介紹了寫給前端的nginx配置指南基于docker所有配置秒級(jí)運(yùn)行,通過?docker?高效學(xué)習(xí)?nginx?配置,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06