如何在Docker中部署MySQL數據庫?
Docker為部署和測試應用程序和數據庫提供了許多優勢,這些應用程序和數據庫是應用程序不可或缺的一部分,因此很值得學習如何在Docker容器中部署和運行數據庫。
本文中,我們會重點關注如下重點:
為MySQL Docker容器創建Docker Compose YAML文件。
使用各種方法連接到在容器上運行的MySQL數據庫。
在Docker容器中創建并運行多個MySQL版本。
接下來,我們會逐一介紹這些。
1.為MySQL Docker容器創建Docker Compose YAML文件
首先,我們創建一個目錄——db-docker,然后在這個目錄中創建一個文件——docker-compose.yml。
- mkdir db-docker
- cd db-docker
- touch docker-compose.yml
基本上,在這里,我們將指定我們將要使用的服務并設置與這些服務相關的環境變量。
我們將在本文中多次更改此文件。
在我們剛剛創建的docker-compose.yml文件中添加以下內容:
- version: '3'
- services:
- mysql-development:
- image: mysql:8.0.17
- environment:
- MYSQL_ROOT_PASSWORD: helloworld
- MYSQL_DATABASE: testapp
- ports:
- - "3308:3306"
我們將MySQL容器的名稱指定為mysql-development,要使用的Docker鏡像是mysql:8.0.17。 如果不將tag指定為8.0.17,則將采用最新的tag。
接下來我們需要指定的是環境變量,即用戶,密碼和數據庫。 如果您未指定用戶,則默認情況下它將為root。
我們將使用helloworld作為密碼,使用testapp作為數據庫。
另一個重要的是端口映射。 3308:3306表示在端口3306的容器中運行的MySQL映射到端口3308的主機的本地主機。您也可以使用不同的端口。
現在,在創建.yml文件之后,我們需要在.yml文件所在的同一目錄中運行以下命令:
- docker-compose up
這將拉取Docker鏡像(如果鏡像在本地不存在,它將從Docker Hub拉出)然后運行容器。
我們可以通過如下命令查看狀態:
- docker-compose ps

這將顯示容器的名稱,命令和容器的狀態,例如,它顯示容器正在運行。 它還顯示了端口映射。
在下一步中,我們將連接到此MySQL容器并運行一些命令。
2.連接到Container中運行的MySQL數據庫
我們將討論在Docker容器中運行的MySQL上連接和運行SQL命令的兩種方法。
第一種方法是使用像MySQL Workbench這樣的工具(也可以使用DataGrip)。
現在我們得MySQL容器映射到宿主機得端口為3308,我們可以使用如下配置參數連接:

由于端口映射,只能通過宿主機的端口3308進行連接。
如果我們想連接到容器化的MySQL,不通過映射端口,即來自在同一個Docker網絡上運行的另一個應用程序,我們必須使用像Adminer這樣的工具,這是我們的另一種方法。
Adminer是一個基于PHP的Web應用程序,用于訪問數據庫。
現在,我們將在docker-compose.yml文件中添加另一項服務——Adminer。 但是,在我們進行更改之前,我們需要停止運行容器并使用以下命令將其刪除:
- docker-compose down
讓我們在docker-compose.yml文件中添加以下內容:
- version: '3'
- services:
- mysql-development:
- image: mysql:8.0.17
- environment:
- MYSQL_ROOT_PASSWORD: helloworld
- MYSQL_DATABASE: testapp
- ports:
- - "3308:3306"
- admin:
- image: adminer
- ports:
- - "8080:8080"
現在,我們再次啟動Docker 容器:
- docker-compose up
運行此操作后,將拉取Adminer的鏡像,并啟動MySQL和Adminer的容器。
我們可以使用docker-compose ps檢查狀態。
現在,我們可以訪問我們的瀏覽器并轉到localhost:8080 來訪問Adminer。 由于Adminer運行在與MySQL相同的Docker網絡上,它可以通過端口3306(或簡單地通過容器名稱)訪問MySQL容器。
注意:我們無法在Adminer中通過端口3308訪問MySQL容器,因為這將嘗試訪問Docker Compose網絡的端口3308,而不是宿主機上的3308端口。

我們還可以在MySQL命令行界面中輸入以下命令:
- docker-compose exec mysql-development mysql -uroot -phelloworld testapp
3.在Docker容器中創建并運行MySQL的
- version: '3'
- services:
- mysql-development:
- image: mysql:8.0.17
- environment:
- MYSQL_ROOT_PASSWORD: helloworld
- MYSQL_DATABASE: testapp
- ports:
- - "3308:3306"
- admin:
- image: adminer
- ports:
- - "8080:8080"
- mysql-old:
- image: mysql:5.7.27
- environment:
- MYSQL_ROOT_PASSWORD: helloworld
- MYSQL_DATABASE: coolapp
- ports:
- - "3309:3306"
總結
上述是個簡單得MySQL容器化小案例。希望給大家帶來點啟發。