docker是十分方便的開(kāi)發(fā)環(huán)境,可以節(jié)約大量的環(huán)境配置時(shí)間,讓開(kāi)發(fā)者更加專注于代碼部分,而不是環(huán)境配置問(wèn)題。但是在實(shí)際的使用過(guò)程中依然還是會(huì)有很多問(wèn)題存在,比如:Linux的docker版本服務(wù)器優(yōu)化后缺少ping工具,缺少ifconfig工具等。
1、安裝ping工具
比如常用的網(wǎng)絡(luò)連通測(cè)試工具ping,就被精簡(jiǎn)掉了。
如何再安裝上呢?請(qǐng)使用下面的命令:
apt-get install inetutils-ping
2、安裝ifconfig工具
如何再安裝上ifconfig呢?請(qǐng)使用下面的命令:
apt-get install net-tools
3、使用docker部署MySQL并配置
(1)拉鏡像
docker pull mysql/mysql-server
如果想要安裝5.8版本的,可以執(zhí)行以下命令:
docker pull mysql/mysql-server:5.8
等待之后,安裝成功,我們查看在本地存儲(chǔ)的鏡像。
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql/mysql-server latest 467687877063 1 weeks ago 305MB
接下來(lái)執(zhí)行創(chuàng)建容器的命令。
(2)創(chuàng)建容器
注意:配置環(huán)境變量MYSQL_ROOT_PASSWORD。
docker run --name mysql1 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql/mysql-server:latest
在這里要注意-p 33306:3306,前面是宿主機(jī)端口,后面是容器Linux本地端口;還有注意最后的:latest,這個(gè)是可省略的。如果剛才安裝的是指定版本,比如5.8,那么我們就需要執(zhí)行以下命令了:
docker run --name mysql1 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql/mysql-server:5.8
好了,安裝完成,進(jìn)行連接測(cè)試了。
(3)配置mysql
如提示下錯(cuò)誤:
Host '172.17.0.1' is not allowed to connect to this MySQL server
那么我們需要登錄mysql進(jìn)行修改權(quán)限。
首先是登錄mysql,密碼就是我們?cè)O(shè)置的123456:
$ docker exec -it mysql1 mysql -uroot -p
Enter password:
然后執(zhí)行如下命令:
use mysql;
update user set host = '%' where user = "root";
flush privileges;(運(yùn)行后,mysql緩存數(shù)據(jù)會(huì)更新。)
連接測(cè)試,發(fā)現(xiàn)就正常了。
(4)查看mysql版本號(hào)
在命令行登錄mysql,即可看到mysql的版本號(hào)
$ docker exec -it mysql1 mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 268
Server version: 8.0.22 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,使用select查詢:
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.8.1 |
+-----------+
1 row in set (0.01 sec)
(5)mysql版本過(guò)高認(rèn)證失敗
mysql 安裝了最新版本8.0.11后創(chuàng)建用戶并授權(quán)后,授權(quán)的用戶連接數(shù)據(jù)庫(kù)提示
The server requested authentication method unknown to the client
查閱一些相關(guān)的資料后發(fā)現(xiàn)是由于新版本的mysql賬號(hào)密碼解鎖機(jī)制不一致導(dǎo)致的
(6)MySQL的相關(guān)配置信息
找到MySQL的數(shù)據(jù)目錄,以及配置文件my.cnf、錯(cuò)誤日志的位置。
mysql> show variables like 'datadir%';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.03 sec)
mysql> show variables like 'log_error';
+---------------+---------------------+
| Variable_name | Value |
+---------------+---------------------+
| log_error | /var/log/mysqld.log |
+---------------+---------------------+
1 row in set (0.01 sec)
mysql>
[root@XXXX ~]$ whereis my.cnf
my: /etc/my.cnf
(6)給數(shù)據(jù)庫(kù)做個(gè)備份
以備不時(shí)之需。當(dāng)然,你也可以用其它方式備份。
[root@XXXX ~]$ service mysqld stop
Redirecting to /bin/systemctl stop mysqld.service
[root@XXXX ~]$ cp -rp /var/lib/mysql /tmp/coldbackup
解決辦法:
方法1
刪除創(chuàng)建的用戶和授權(quán),找到mysql配置文件并加入
default_authentication_plugin=mysql_native_password
變?yōu)樵瓉?lái)的驗(yàn)證方式,然后從新創(chuàng)建用戶并授權(quán)即可
方法2
$ mysql -uroot -p
> use mysql;
> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密碼';
4、使用docker部署配置常見(jiàn)問(wèn)題
(1)docker傳輸文件
docker cp thinksaas1:/var/www/html/ /thinksaas_data/
直接使用cp命令,從指定容器內(nèi):指定目錄,拷貝到本地目錄。
(2)docker掛載本地目錄
docker run --name thinksaas -v /thinksaas_data/html:/var/www/html -it -p 80:80 thinksaas/thinksaas /bin/bash
直接使用-v參數(shù),把本地目錄:掛載到docker目錄下。
(3)docker掛載本地目錄后沒(méi)有權(quán)限
docker run --name thinksaas -v /thinksaas_data/html:/var/www/html --privileged=true -it -p 80:80 thinksaas/thinksaas /bin/bash
直接使用--privileged=true參數(shù),給docker本地目錄權(quán)限。