使用 Docker 運行 MySQL 資料庫服務

簡介

Docker 是一個容器編排工具(Container Orchestration Tool),透過稱作 Docker Engine 的虛擬機器管理程式,可以將服務運行和部署在一個與底層作業系統隔離的 Docker Container 中。

在現代的程式開發過程中,適當地使用容器技術可以快速地進行疊代,而 Docker 除了可以在開發過程中使用之外,我們也能將服務部署於容器中,這篇文章將會說明如何使用 Docker 運行 MySQL 資料庫服務,以及一些基本的操作。

運行 MySQL 容器

# search and pull docker image of MySQL
$ docker search mysql
$ docker pull mysql

# inspect docker images
$ docker images
$ docker inspect mysql

# run MySQL as docker container
$ docker container run --name mysql-831 \
    -e MYSQL_ROOT_PASSWORD=P@ssw0rd \
    -p 3306:3306 \
    -d mysql:latest
    
$ docker container inspect-831
$ docker container ps

# remove MySQL container
$ docker container stop mysql-831
$ docker container rm -fv mysql-831
$ docker container ps
Bash

基本容器操作

容器日誌

MySQL 日誌文件十分重要,因為它記錄了每一則警告和錯誤訊息,而了解日誌檔案的位置並在故障排除期間去檢視它,絕對是每一個資料庫管理人員的必備技能。

在 Docker 中,可以 docker container logs 命令來讀取日誌文件:

$ docker container logs mysql-831
Bash

端口映射

我們一般稱運行 Docker 容器的主機,為該容器的宿主(Host);對於 Docker 容器而言,它只能將內容暴露給其宿主,而不能直接被外界訪問,如果要從宿主之外訪問容器的話,我們需要將宿主的連接埠與容器進行映射:

$ docker container run --name mysql-831 \
    -e MYSQL_ROOT_PASSWORD=P@ssw0rd \
    -p 3306:3306 \
    -d mysql:latest

$ sudo netstat -ntlp
$ pidof mysqld
Bash

命令操作

由於 MySQL 被運行於容器之中,無法直接透過宿主操作,我們可以使用 docker container exec -it 命令,將 Docker 容器的標準輸入輸出綁定到宿主機上。

比如我們可以這樣來新增 MySQL 中的使用者:

$ docker container exec -it mysql-831 bash
$ mysql -u root -p

> CREATE USER bob IDENTIFIED BY 'P@ssw0rd';
> GRANT ALL PRIVILEGES ON *.* TO bob WITH GRANT OPTION;
> FLUSH PRIVILEGES;
Bash