前言
我在專案開發階段常使用 MySQL Docker,主要是好處,快速啟動、零安裝成本、版本切換,不污染本機系統(不喜歡本機裝一堆有的沒的,特別是有的只會用那麼一次)。而且如果在需要,任何時間、任何機器,都能還原相同 DB 環境。
註: 在測試也非常好用:
1.Unit / Integration Test 啟動臨時 MySQL
2.測試結束,可以將容器刪除
3.不影響正式資料
必要:
安裝 Docker Desktop
參看: https://docs.docker.com/desktop/setup/install/windows-install/
專案結構
|- docker/
| |- mysql/
| |─ docker-compose.yml
| |- init/
| |- schema.sql
實作
新增docker-compose.yml(MySQL)
services: mysql: image: mysql:8.4.7 container_name: dev-mysql restart: always ports: - "3306:3306" environment: # 建立 root 預設使用的密碼 MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: testdb # 建立新使用者並設定該使用者的密碼 MYSQL_USER: mysql MYSQL_PASSWORD: 123456 volumes: # 我本機上建立的資料目錄 - /Users/danny/mysql_data:/var/lib/mysql - ./init:/docker-entrypoint-initdb.d command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci新增schema.sql
DROP TABLE IF EXISTS users; CREATE TABLE users ( id bigint NOT NULL AUTO_INCREMENT, email varchar(255) NOT NULL, first_name varchar(255) NOT NULL, last_name varchar(255) DEFAULT NULL, password varchar(255) NOT NULL, username varchar(255) NOT NULL, PRIMARY KEY (id), CONSTRAINT username_unique UNIQUE (username), CONSTRAINT email_unique UNIQUE (email) );說明:
初始化新實例:(選項)
當容器首次啟動時,如需要建立一個具有指定名稱的新資料庫,並進行初始化。它將執行位於指定目錄下、副檔名為 .sql 的檔案/docker-entrypoint-initdb.d。文件將按字母順序執行。
資料儲存:(選項)
在主機系統上建立資料目錄,並將其掛載到容器內部可存取的目錄。這樣,資料庫檔案就會位於主機系統上建立資料
啟動 / 停止
# 啟動,如果之前會 pull mysql image過,會需要pull image
docker compose up -d
# 查看狀態,已成功啟動。
docker compose ps
檢視相關狀態。
查看 Docker Desktop,可以看到 Containers 已有剛建立的 dev-mysql
使用mysql client 工具連線,可以看到剛初始建立的table users
文章到此結束。謝謝!
:-( 怎沒半個粉