基于docker创建mysql容器
基礎環境
Server: Docker Engine - CommunityEngine:Version: 20.10.9選擇鏡像
- 好用、可靠
不好用:DOCKER OFFICIAL IMAGE mysql
好用?: VERIFIED PUBLISHER bitnami/mysql
部署容器
配置優先
不區分大小寫
啟動容器前進行配置
**注意:**如果是配置填寫格式有問題,容器是啟動不了的
- 創建自定義配置文件
- 掛載路徑:/your_host_path/my_custom.cnf:/opt/bitnami/mysql/conf/bitnami/my_custom.cnf
lower_case_table_names=0 表名存儲為給定的大小和比較是區分大小寫的
 lower_case_table_names = 1 表名存儲在磁盤是小寫的,但是比較的時候是不區分大小寫
 lower_case_table_names=2 表名存儲為給定的大小寫但是比較的時候是小寫的
 unix,linux下lower_case_table_names默認值為 0 .Windows下默認值是 1 .Mac OS X下默認值是 2
鏈接:【MySQL】lower_case_table_names參數詳解 - 簡書 (jianshu.com)
# 進入mysql命令行 執行以下任一語句查看: show variables like 'lower_case_table_names'; select @@lower_case_table_names;關閉only_full_group_by(可選)
**注意:**如果是配置填寫格式有問題,容器是啟動不了的
- 報錯日志
- 調整配置后,重啟生效
注意:如果是在數據庫中進行調整,重啟之后就恢復原樣,因為 ONLY_FULL_GROUP_BY 更加符合 SQL 標準,所以不建議關掉。
[mysqld] sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION創建橋接網絡
docker network create app-tier --driver bridge方式一:基于命令啟動容器
- 指定容器名稱
- 加載自定義配置文件:my_custom.cnf
- 設置環境變量,指定數據庫root初始化密碼
- 為容器綁定已經創建的網絡類型
- 建立本地路徑與容器路徑之間的映射
- 建立本地端口與容器端口之間的映射
- 指定鏡像名稱
- 后臺運行
- 默認支持遠程主機連接,密碼插件是:caching_sha2_password
運行連接數據庫的容器
執行SQL,還是走容器靠譜
- 退出時自動刪除容器(已踩坑就是它)
- 繼續執行一個初始化SQL(可選)
- 非容器的初始化SQL方法(可選)
坑:以下方式不行
一、進入dev-mysql容器后,使用如下命令登錄會失敗或者成功,現象這是這樣,暫不知道為什么
docker exec -it dev-mysql bash mysql -h172.24.0.2 -uroot -p123456或者 docker exec -it <CONTAINER_ID> mysql -uroot -p123456開啟遠程訪問
Docker MySQLAccess denied for user ‘’@’172.17.0.1’(using password: YES) - Many Minds - Medium
MySQL8.0允許外部訪問_lemon_cake的博客-CSDN博客_mysql8 遠程連接
Docker部署Mysql8.0報錯 Access denied for user ‘root‘@‘localhost‘ (using password: YES)_蕭道子的博客-CSDN博客
update user set host='%' where user ='root'; #設置密碼 #PASSWORD EXPIRE NEVER 密碼永不過期 #將默認的插件【caching_sha2_password】修改成【mysql_native_password 】加密插件 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456' PASSWORD EXPIRE NEVER; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;驗證命令
select user,host,plugin from user; select version();Docker Compose
Compose file versions and upgrading | Docker Documentation
兼容性矩陣
Compose 文件格式有多個版本 – 1、2、2.x 和 3.x
此表顯示了哪些 Compose 文件版本支持特定的 Docker 版本。
| Compose specification | 19.03.0+ | 
| 3.8 | 19.03.0+ | 
| 3.7 | 18.06.0+ | 
| 3.6 | 18.02.0+ | 
| 3.5 | 17.12.0+ | 
| 3.4 | 17.09.0+ | 
| 3.3 | 17.06.0+ | 
| 3.2 | 17.04.0+ | 
| 3.1 | 1.13.1+ | 
| 3.0 | 1.13.0+ | 
| 2.4 | 17.12.0+ | 
| 2.3 | 17.06.0+ | 
| 2.2 | 1.13.0+ | 
| 2.1 | 1.12.0+ | 
| 2.0 | 1.10.0+ | 
v2 和 v3 聲明
注意: 指定要使用的 Compose 文件版本時,請確保同時指定主要版本號和次要版本號。如果沒有給出次要版本,則默認使用 0 而不是最新的次要版本。因此,將不支持后續版本中添加的功能。例如:
version: "2"相當于:
version: "2.0"方式二:基于yaml文件,啟動容器
創建mysql數據存儲目錄
注意:由于這是一個非根容器,因此安裝的文件和目錄必須具有 UID 1001 的適當權限。若權限不對,無法正常運行容器,會卡死
NOTE: As this is a non-root container, the mounted files and directories must have the proper permissions for the UID 1001.
mkdir -p /opt/docker/mysql/data #賦權 chown 1001:1001 /opt/docker/mysql/data編寫yaml配置文件
version: '3' services: mysql-service:image: bitnami/mysql:8.0.25hostname: mysqlcontainer_name: dev-mysqlvolumes:- /opt/docker/mysql/data:/bitnami/mysql/data- /opt/docker/mysql/home:/home- /opt/docker/mysql/home/my_custom.cnf:/opt/bitnami/mysql/conf/bitnami/my_custom.cnf:roports:- 3306:3306environment:MYSQL_ROOT_PASSWORD: '123456'networks:- app-tier networks:app-tier:driver: bridge啟動容器
# --force-recreate Recreate containers even if their configuration and image haven't changed. # 即使容器的配置和圖像沒有改變,也可以重新創建容器。 docker-compose up --force-recreate其它
- 理解 docker 容器中的 uid 和 gid - sparkdev - 博客園 (cnblogs.com)
- 大白話 Docker (新手入門必讀) | Server優質外文翻譯 | Server 運維論壇 (learnku.com)
- 什么是 Docker - Docker — 從入門到實踐 (gitbook.io)
總結
以上是生活随笔為你收集整理的基于docker创建mysql容器的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: photoshop常出错,归纳一下,头都
- 下一篇: pd.fjs分片下载的介绍2:分片下载d
