Docker 系列教程:輕松在 Docker 容器中運行 MySQL 圖文指南
Docker 已成為流行的 DevOps 工具,您可能需要知道如何在 Docker 容器中運行 MySQL。
本指南逐步解釋了如何在幾分鐘內設置在 Docker 容器中運行新的 MySQL 服務器。
Docker 的一大優點是您可以快速使用它來試用應用程序,而無需直接在您的機器上安裝它。您可以使用 Docker 在容器中運行數據庫,就像它是遠程服務器一樣,并測試您的應用程序如何與其交互。
使用 Docker 容器運行 MySQL 是一種廣泛使用的機制。事實上,MySQL 是與 Docker 容器一起使用的最流行的數據庫之一。
要將 MySQL 創建為 Docker 容器,主機應安裝 Docker。如果你沒有安裝它,這里有一個如何在 Ubuntu 上安裝 Docker 的分步指南。(見:https://www.linuxmi.com/ubuntu-docker-zhinan.html )
1. 拉取 MySQL Docker 鏡像
要在 Docker 中創建和測試 MySQL 服務器,您要做的第一件事是從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,請替換 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 映像現在可用于我們本地安裝的 Docker。
2. 設置 Docker數據卷(Volume)
如您所知,Docker 容器原則上是短暫的,如果容器被刪除,任何數據或配置都可能會丟失。然而,Docker Volume提供了一種機制來保存在 Docker 容器內創建的數據。它們是 Docker 用于存儲 Docker 容器持久數據的首選機制。
默認情況下,MySQL 將其數據文件存儲在該 /var/lib/mysql 目錄中。因此,在部署之前,您需要設置一個 Docker Volume來持久化您的數據庫。否則,當容器重新啟動時,您的數據將丟失。
讓我們創建一個新Volume并將其命名為mysql-data。這將用于存儲您的所有數據庫信息。
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker volume create mysql-data
- mysql-data
您可以通過發出以下命令列出 Docker 已知的所有數據卷:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker volume ls
輸出
- DRIVER VOLUME NAME
- local mysql-data
如下圖:
如您所見,我們新創建的名為 Docker 的數據卷mysql-data在這里并準備好提供數據。然后可以將其附加到新創建的 MySQL 容器。
3. 運行一個 MySQL Docker 容器
現在您的機器上有 MySQL Docker 映像和一個用于保存數據的Volume,您可以部署一個容器。您還必須使用MYSQL_ROOT_PASSWORD環境變量為 MySQL root 用戶設置密碼。
現在,讓我們運行容器:
- 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 密碼從任何地方遠程訪問它。
為了讓事情更清楚,讓我們分解這個語法。以下是該命令中每個參數的含義:
- -d 將以分離模式運行此容器,以便它在后臺運行。
- --name 將名稱分配mysql-server給您的容器實例。如果不指定此項,Docker 將生成一個隨機名稱。
- -p 將 MySQL 容器端口綁定3306到主機上的相同端口。您將能夠 使用在您的主機上運行的MySQL 客戶端 ( )連接到 127.0.0.1端口。3306mysql
- -v 選項將容器卷 ( /var/lib/mysql)內的數據文件夾綁定到mysql-data您在上一步中創建的本地 Docker 卷 ( )。
- -e 設置環境變量。在這種情況下,MySQL 根密碼。
- mysql 是我們用來創建容器的映像的名稱。
您可以通過列出正在運行的容器來檢查容器是否正在運行:
- 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 命令行界面,因此您可以使用所有熟悉的命令和標志。
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker exec -it mysql-server mysql -u root -p
mysql 如果您的主機上預安裝了它,您還可以使用客戶端連接 MySQL Docker 實例 。
請注意,默認情況下,當您告訴 mysql 客戶端連接到 localhost. 所以一定要使用 127.0.0.1 而不是 localhost。
- linuxmi@linuxmi:~/www.linuxmi.com$ mysql -u root -h 127.0.0.1 -p
當然,您也可以使用基于 GUI 的客戶端(例如 MySQL Workbench)來連接數據庫。在 MySQL Workbench 中為“Hostname”指定啟動 Docker 容器的機器的 IP 地址。
相關:如何使用 MySQL Workbench 在 MySQL 中創建數據庫 (見:https://www.linuxmi.com/ubuntu-20-04-mysql-workbench.html )
當然,在上面顯示的主機名示例中,您可以使用 MySQL docker 容器所在機器的 IP 地址而不是127.0.0.1. 您可以通過運行ifconfig不帶任何參數的命令來找到該地址。
使用機器的 IP 地址可以讓您遠程訪問 MySQL 服務器。
5. 停止、啟動和重啟 MySQL 容器
此命令將暫時停止正在運行的 MySQL 容器(并且可以稍后恢復/重新啟動):
- 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
結論
如您所見,在 Docker 中運行 MySQL 比在本地安裝 MySQL Server 更快、更容易。如果您打算在 Docker 上使用 MySQL 進行測試以外的任何事情,還有很多事情需要考慮。有關更多信息,您可以查看Docker Hub 上的 MySQL 頁面和有關該主題的官方 MySQL 手冊。
如果您有任何問題或建議,請告訴我。