Docker 系列教程:輕松在 Docker 容器中運行 MySQL 圖文指南
Docker 已成為流行的 DevOps 工具,您可能需要知道如何在 Docker 容器中運行 MySQL。
本指南逐步解釋了如何在幾分鐘內(nèi)設(shè)置在 Docker 容器中運行新的 MySQL 服務(wù)器。
Docker 的一大優(yōu)點是您可以快速使用它來試用應(yīng)用程序,而無需直接在您的機器上安裝它。您可以使用 Docker 在容器中運行數(shù)據(jù)庫,就像它是遠(yuǎn)程服務(wù)器一樣,并測試您的應(yīng)用程序如何與其交互。
使用 Docker 容器運行 MySQL 是一種廣泛使用的機制。事實上,MySQL 是與 Docker 容器一起使用的最流行的數(shù)據(jù)庫之一。
要將 MySQL 創(chuàng)建為 Docker 容器,主機應(yīng)安裝 Docker。如果你沒有安裝它,這里有一個如何在 Ubuntu 上安裝 Docker 的分步指南。(見:https://www.linuxmi.com/ubuntu-docker-zhinan.html )
1. 拉取 MySQL Docker 鏡像
要在 Docker 中創(chuàng)建和測試 MySQL 服務(wù)器,您要做的第一件事是從Docker Hub拉取 MySQL 官方鏡像 。
您可以下載特定版本,例如 8.0、5.7、5.6,或選擇最新版本,如以下命令所示:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker pull mysql:latest
- [sudo] linuxmi 的密碼:
- latest: Pulling from library/mysql
- 72a69066d2fe: Pull complete
- 93619dbc5b36: Pull complete
- 99da31dd6142: Pull complete
- 626033c43d70: Pull complete
- 37d5d7efb64e: Pull complete
- ac563158d721: Pull complete
- d2ba16033dad: Pull complete
- 688ba7d5c01a: Pull complete
- 00e060b6d11d: Pull complete
- 1c04857f594f: Pull complete
- 4d7cfa90e6ea: Pull complete
- e0431212d27d: Pull complete
- Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
- Status: Downloaded newer image for mysql:latest
- docker.io/library/mysql:latest docker pull mysql:latest
如果您需要特定版本的 MySQL,請?zhí)鎿Q latest 為版本號。
您可以運行該docker images 命令來查看從 Docker Hub 中提取的 Docker 鏡像列表。
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker images
- 輸出
- REPOSITORY TAG IMAGE ID CREATED SIZE
- mysql latest 3218b38490ce 23 hours ago 516MB
如您所見,MySQL 映像現(xiàn)在可用于我們本地安裝的 Docker。
2. 設(shè)置 Docker數(shù)據(jù)卷(Volume)
如您所知,Docker 容器原則上是短暫的,如果容器被刪除,任何數(shù)據(jù)或配置都可能會丟失。然而,Docker Volume提供了一種機制來保存在 Docker 容器內(nèi)創(chuàng)建的數(shù)據(jù)。它們是 Docker 用于存儲 Docker 容器持久數(shù)據(jù)的首選機制。
默認(rèn)情況下,MySQL 將其數(shù)據(jù)文件存儲在該 /var/lib/mysql 目錄中。因此,在部署之前,您需要設(shè)置一個 Docker Volume來持久化您的數(shù)據(jù)庫。否則,當(dāng)容器重新啟動時,您的數(shù)據(jù)將丟失。
讓我們創(chuàng)建一個新Volume并將其命名為mysql-data。這將用于存儲您的所有數(shù)據(jù)庫信息。
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker volume create mysql-data
- mysql-data
您可以通過發(fā)出以下命令列出 Docker 已知的所有數(shù)據(jù)卷:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker volume ls
輸出
- DRIVER VOLUME NAME
- local mysql-data
如下圖:
如您所見,我們新創(chuàng)建的名為 Docker 的數(shù)據(jù)卷mysql-data在這里并準(zhǔn)備好提供數(shù)據(jù)。然后可以將其附加到新創(chuàng)建的 MySQL 容器。
3. 運行一個 MySQL Docker 容器
現(xiàn)在您的機器上有 MySQL Docker 映像和一個用于保存數(shù)據(jù)的Volume,您可以部署一個容器。您還必須使用MYSQL_ROOT_PASSWORD環(huán)境變量為 MySQL root 用戶設(shè)置密碼。
現(xiàn)在,讓我們運行容器:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker run -d --name=mysql-server -p 3306:3306 -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=your_password mysql
輸出
- 0ef0b05cce690b44da538291781f4885702074d4b63a7a293fe71dcdd3f69695
OK。這將啟動最新版本的 MySQL 實例,可以使用指定的 root 密碼從任何地方遠(yuǎn)程訪問它。
為了讓事情更清楚,讓我們分解這個語法。以下是該命令中每個參數(shù)的含義:
- -d 將以分離模式運行此容器,以便它在后臺運行。
- --name 將名稱分配mysql-server給您的容器實例。如果不指定此項,Docker 將生成一個隨機名稱。
- -p 將 MySQL 容器端口綁定3306到主機上的相同端口。您將能夠 使用在您的主機上運行的MySQL 客戶端 ( )連接到 127.0.0.1端口。3306mysql
- -v 選項將容器卷 ( /var/lib/mysql)內(nèi)的數(shù)據(jù)文件夾綁定到mysql-data您在上一步中創(chuàng)建的本地 Docker 卷 ( )。
- -e 設(shè)置環(huán)境變量。在這種情況下,MySQL 根密碼。
- mysql 是我們用來創(chuàng)建容器的映像的名稱。
您可以通過列出正在運行的容器來檢查容器是否正在運行:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker ps
輸出
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 0ef0b05cce69 mysql "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql-server
4. 連接到 MySQL 容器
您可以通過附加到容器并運行mysql命令來獲得交互式 MySQL shell 。這提供了完整的 MySQL 命令行界面,因此您可以使用所有熟悉的命令和標(biāo)志。
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker exec -it mysql-server mysql -u root -p
mysql 如果您的主機上預(yù)安裝了它,您還可以使用客戶端連接 MySQL Docker 實例 。
請注意,默認(rèn)情況下,當(dāng)您告訴 mysql 客戶端連接到 localhost. 所以一定要使用 127.0.0.1 而不是 localhost。
- linuxmi@linuxmi:~/www.linuxmi.com$ mysql -u root -h 127.0.0.1 -p
當(dāng)然,您也可以使用基于 GUI 的客戶端(例如 MySQL Workbench)來連接數(shù)據(jù)庫。在 MySQL Workbench 中為“Hostname”指定啟動 Docker 容器的機器的 IP 地址。
相關(guān):如何使用 MySQL Workbench 在 MySQL 中創(chuàng)建數(shù)據(jù)庫 (見:https://www.linuxmi.com/ubuntu-20-04-mysql-workbench.html )
當(dāng)然,在上面顯示的主機名示例中,您可以使用 MySQL docker 容器所在機器的 IP 地址而不是127.0.0.1. 您可以通過運行ifconfig不帶任何參數(shù)的命令來找到該地址。
使用機器的 IP 地址可以讓您遠(yuǎn)程訪問 MySQL 服務(wù)器。
5. 停止、啟動和重啟 MySQL 容器
此命令將暫時停止正在運行的 MySQL 容器(并且可以稍后恢復(fù)/重新啟動):
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker stop mysql-server
要啟動MySQL 容器,請運行:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker start mysql-server
下面的命令用于重啟正在運行的 MySQL 容器:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker restart mysql-server
結(jié)論
如您所見,在 Docker 中運行 MySQL 比在本地安裝 MySQL Server 更快、更容易。如果您打算在 Docker 上使用 MySQL 進(jìn)行測試以外的任何事情,還有很多事情需要考慮。有關(guān)更多信息,您可以查看Docker Hub 上的 MySQL 頁面和有關(guān)該主題的官方 MySQL 手冊。
如果您有任何問題或建議,請告訴我。