使用 docker 安裝多版本的 MySQL
阿新 • • 發佈:2018-11-22
首先從 docker 官網下載安裝 docker。
檢查 docker 安裝是否成功,出現類似下面的資訊就是安裝好了
$ docker version
Client: Docker Engine - Community
Version: 18.09.0
API version: 1.39
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:47:43 2018
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.0
API version: 1.39 (minimum version 1.12)
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:55:00 2018
OS/Arch: linux/amd64
Experimental: true
從 docker hub 上找到 MySQL 的映象,查詢得到 MySQL 的版本主要有 5.6 5.7 和 8.0。
下面我們分別拉取映象進行啟動
docker pull mysql:5.6
docker pull mysql:5.7
docker pull mysql:8.0
mysql 是官方的映象,冒號後面跟的是版本號。為了方便,我們把三個 mysql 的容器分別叫做 mysql56, mysql57, mysql80
docker run -p 3316:3306 --name mysql56 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
docker run -p 3317:3306 --name mysql57 -e MYSQL_ROOT_PASSWORD= 123456 -d mysql:5.7
docker run -p 3318:3306 --name mysql80 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0
-p 3316:3306 是把容器的3306埠對映到本機的3316埠
–name 是給執行的容器一個別名
-e MYSQL_ROOT_PASSWORD=123456 是初始化 MySQL 的密碼
這樣的話我們連線 MySQL 的命令就是下面的
mysql --port 3316 -uroot -h127.0.0.1 -p123456
mysql --port 3317 -uroot -h127.0.0.1 -p123456
mysql --port 3318 -uroot -h127.0.0.1 -p123456
但是這樣可能不太行。
因為直接從外面連 MySQL 可能是沒有許可權的
我們先進入容器
docker exec -it mysql80 bash
這樣就相當於進入了容器中的 bash
mysql -uroot -p123456
進入 MySQL
update mysql.user set host="%" where user="root";
flush privileges;
這樣就可以了。
一般情況下 MySQL5.6 和 MySQL5.7 應該是沒問題了,但是 MySQL8.0 的密碼驗證方式變了,我們應該要改一下
update mysql.user set host="%" where user="root";
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;
這樣就大功告成
$ mysql --port 3318 -uroot -h127.0.0.1 -p123456
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 49
Server version: 8.0.13 MySQL Community Server - GPL
Copyright (c) 2000, 2017, 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> select version();
+-----------+
| version() |
+-----------+
| 8.0.13 |
+-----------+
1 row in set (0.01 sec)
最後我們看一下 docker 其他常用的命令
命令 | 功能 |
---|---|
docker ps | 檢視正在執行的容器 |
docker ps -a | 檢視所有的容器 |
docker stop mysql56 | 停止 mysql56 這個容器 |
docker start mysql56 | 啟動 mysql56 這個容器 |
docker images | 檢視 docker 所有映象 |
docker image list | 同上 |
docker rm mysql56 | 刪除 mysql56 這個容器 |
docker rmi mysql:5.6 | 刪除 mysql 5.6 版本的 image |
原文連結
https://notes.0xl2oot.cn/docker/2018/11/21/docker-mysql.html