在Mac的Docker執行MySQL 8容器並連線。
範例環境:
- macOS Catalina
- Docker 19.03.12
MySQL的Docker Hub。在Tags頁籤可找到不同版本的tag,本範例以版本mysql:8
為image。
在終端機執行docker pull mysql:8
指令下載MySQL 8的image。冒號後面的是MySQL版本。
$ docker pull mysql:8
8: Pulling from library/mysql
6ec7b7d162b2: Pull complete
fedd960d3481: Pull complete
7ab947313861: Pull complete
64f92f19e638: Pull complete
3e80b17bff96: Pull complete
014e976799f9: Pull complete
59ae84fee1b3: Pull complete
ffe10de703ea: Pull complete
657af6d90c83: Pull complete
98bfb480322c: Pull complete
9f2c4202ac29: Pull complete
a369b92bfc99: Pull complete
Digest: sha256:365e891b22abd3336d65baefc475b4a9a1e29a01a7b6b5be04367fcc9f373bb7
Status: Downloaded newer image for mysql:8
docker.io/library/mysql:8
MySQL image下載完後執行docker images
檢視。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 8 ab2f358b8612 8 days ago 545MB
在使用者目錄新增一資料夾mysql-docker-data
,此用來保存MySQL container的資料。
使用docker run
啟動
輸入
docker run -d -v ~/mysql-docker-data:/var/lib/mysql -it --name mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345 -e MYSQL_DATABASE=mydb mysql:8 --default-authentication-plugin=mysql_native_password
。
docker run
參數說明:
-d
:同--detach
,以背景模式執行。-v
:同--volume
,掛載host目錄到container目錄,也就是host的~/mysql-docker-data
會保存container/var/lib/mysql
的資料。-it
:同--interactive
加--tty
,作用為運行container時可登入其bash操作。--name mysql8
,命名container名稱為mysql8
。-p
:同--publish
。作用為將container的3306 port對映到"主機(host)"的3306 port-e
:同--env
,設定環境變數。MYSQL_ROOT_PASSWORD
設定MySQL root帳號的登入密碼為12345
,MYSQL_DATABASE
設定資料庫名稱為mydb
。mysql:8
:mysql
為image名稱,8
為image tag。所以運行的是mysql:8
的image。--default-authentication-plugin=mysql_native_password
:把儲存密碼的方式改為MySQL 5的mysql_native_password
,因為MySQL 8的儲存方式預設為caching_sha2_password
,但一些免費的MySQL client圖形工具如Sequel Pro,Navicat等會無法連線,所以設定此參數。
$ docker run -d -v ~/mysql-docker-data:/var/lib/mysql -it --name mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345 -e MYSQL_DATABASE=mydb mysql:8 --default-authentication-plugin=mysql_native_password
9b3282f611a9c891d7a2c7a98e60fc0296c3863351f4ee6e31cd69949a0e24ea
使用Docker Compose啟動
除了用docker run
啟動外,也可用Docker Compose的方式啟動。
在工作目錄新增一docker-compose.yml
檔內容如下。
docker-compose.yml
version: "3.8"
services:
mysql8: # 自訂的service
image: mysql:8
container_name: mysql8
volumes:
- ~/mysql-docker-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 12345
MYSQL_DATABASE: mydb
ports:
- "3306:3306"
docker-compose.yml
設定說明:
version
:設定檔使用的版本。services
:定義要啟動的container服務services.mysql8
:services下自訂的服務services.mysql8.image
:指定container的imageservices.mysql8.volumes
:設定container的掛載目錄services.mysql8.environment
:container的環境變數services.mysql8.port
:container對外暴露的port號。
可以看出docker-compose.yml
中的設定效果同上面docker run
的參數設定。
然後在docker-compose.yml
所在目錄輸入docker-compose up -d
指令便可啟動MySQL container。
$ docker-compose up -d
Starting mysql8 ... done
連線
輸入docker ps
檢視運行中的container。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9b3282f611a9 mysql:8 "docker-entrypoint.s…" 8 minutes ago Up 8 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql8
然後利用docker exec mysql8 mysql -u root -p
進入container的mysql command line。
docker exec
指令的作用為在運行的container執行指令,所以意思就是在mysql8
這個container執行mysql -u root -p
的指令。
輸入的密碼為上面執行mysql image時設定的12345
。
$ docker exec -it mysql8 mysql -u root -p
Enter password:12345
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.21 MySQL Community Server - GPL
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
在mysql command line下輸入SHOW VARIABLES WHERE variable_name = 'default_storage_engine';
來查看預設的MySQL引擎。
mysql> SHOW VARIABLES WHERE variable_name = 'default_storage_engine';
+------------------------+--------+
| Variable_name | Value |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+
1 row in set (0.01 sec)
MySQL 8預設引擎為InnoDB。
在mysql command line下輸入SELECT @@character_set_database, @@collation_database;
來查看字元集編碼。
mysql> SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8mb4 | utf8mb4_0900_ai_ci |
+--------------------------+----------------------+
1 row in set (0.01 sec)
字元集編碼預設為utf8mb4
。
用MySQL workbench連線設定如下。
停止container輸入docker stop mysql8
。
$ docker stop mysql8
mysql8
刪除container輸入docker rm mysql8
。
$ docker stop mysql8
沒有留言:
張貼留言