目錄結構 mysql 目錄下的 data 為數據目錄,mysql 的數據表、二進位日誌文件就在這裡。.env 文件包含了一些變數,這些變數可以在 docker compose.yml 文件中通過 ${variable_name} 來引用。 當然也可以把 mysql 的目錄放到其它地方,這裡圖個方便, ...
目錄結構
.
│ .env
│ docker-compose.yml
│
└─mysql
├─config
│ my.cnf
│
└─data
mysql 目錄下的 data 為數據目錄,mysql 的數據表、二進位日誌文件就在這裡。.env 文件包含了一些變數,這些變數可以在 docker-compose.yml 文件中通過 ${variable_name} 來引用。
當然也可以把 mysql 的目錄放到其它地方,這裡圖個方便,直接放在 yml 文件同級目錄了。
.env 文件
MYSQL_ROOT_PASSWORD=root
MYSQL_ROOT_HOST=%
MYSQL_DIR=./mysql
MySQL 配置文件 my.cnf
[mysqld]
character-set-server=utf8mb4
default-time-zone='+8:00'
innodb_rollback_on_timeout='ON'
max_connections=500
innodb_lock_wait_timeout=500
如果使用預設配置,這個文件可以省略。
docker-compose.yml
version: '3'
services:
mysql-db:
container_name: mysql-docker # 指定容器的名稱
image: mysql:8.0 # 指定鏡像和版本
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_ROOT_HOST: ${MYSQL_ROOT_HOST}
volumes:
- "${MYSQL_DIR}/data:/var/lib/mysql" # 掛載數據目錄
- "${MYSQL_DIR}/config:/etc/mysql/conf.d" # 掛載配置文件目錄
Environment 變數
MYSQL_ROOT_PASSWORD
:這個不用解釋,root 用戶的密碼。MYSQL_USER
,MYSQL_PASSWORD
:這兩個變數為可選,創建一個新用戶,這個用戶在MYSQL_DATABASE
變數指定的資料庫上擁有超級用戶許可權。MYSQL_DATABASE
:指定一個資料庫,在容器啟動時創建。MYSQL_ALLOW_EMPTY_PASSWORD
:設置為 yes 允許 root 用戶的密碼為空。(不推薦)MYSQL_RANDOM_ROOT_PASSWORD
:設置為 yes 將在容器啟動時為 root 用戶生成一個隨機的密碼,密碼會顯示到標準輸出流(GENERATED ROOT PASSWORD:......
)。MYSQL_ONETIME_PASSWORD
:字面意思就是一次性密碼,為 root 用戶設置,第一次登錄後必須修改密碼(僅支持 5.6 以上的版本)。
運行容器
在 docker-compose.yml 目錄下執行:
> docker-compose up
如果要在後臺運行,使用 docker-compose up -d
。
停止容器:
> docker-compose down
如果是前臺運行的,使用:Ctrl + C 停止。這兩種方式在停止後都會刪除容器,下次啟動必須使用 up 命令。
停止但不刪除容器:
> docker-compose stop
使用 stop 停止後,再次啟動使用 start 命令即可。