簡介
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