Docker 安裝 MySQL
docker pull mysql
查找Docker Hub上的mysql鏡像
[root@iZbp15ynf8pjgvcr486szaZ ~]#docker search mysql
mysql
拉取官方的鏡像,標籤爲5.7.23
[root@iZbp15ynf8pjgvcr486szaZ ~]# docker pull mysql:5.7.23
sql
等待下載完成後,咱們就能夠在本地鏡像列表裏查到REPOSITORY爲mysql
[root@localhost ~]# docker imagesdocker
首先,建立目錄mysql,用於存放後面的相關東西。數據庫
runoob@runoob:~$ mkdir -p ~/mysql/data ~/mysql/logs ~/mysql/conf ~/mysql/sql
centos
查看老數據庫版本號
[root@iZbp15ynf8pjgvcr486szaZ ~]# mysql --version
socket
將數據庫導出sql文件格式
[root@iZbp15ynf8pjgvcr486szaZ ~]#mysql -e "show databases;" -uroot -p123456 | grep -Ev "Database|titan|information_schema|well_order" | xargs mysqldump -uroot -p123456 --databases > mysql_dump2.sql
ide
由於數據庫裏有個庫特別大,因此將庫過慮掉,grep -Ev "Database|titan|information_schema|well_order,就是將以上三個庫過慮掉centos7
將備份好的數據拷貝到剛纔建立好的目錄下/mysql/sql
[root@iZbp15ynf8pjgvcr486szaZ ~]# scp mysql_dump2.sql root@192.168.22.7:/root/mysql/sql
3d
使用mysql鏡像運行容器code
[root@localhost ~]# docker run --name mysql -p 3306:3306 --privileged=true -v /root/mysql/conf/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /root/mysql/sql:/docker-entrypoint-initdb.d -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7.23
說明docker運行成功
命令說明:
-p 3306:3306:將容器的 3306 端口映射到主機的 3306 端口。 -v /root/mysql/sql:/docker-entrypoint-initdb.d 將備份好的數據庫文件存放在此,docker啓動進會讀取些文件的內容,並將數據庫還原到docker -v /root/mysql/data:/var/lib/mysql :將主機當前目錄下的data目錄掛載到容器的 /var/lib/mysql 。 -v /root/mysql/conf/mysqld.cnf :將mysql配置文件掛載到docker容器裏 。 -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用戶的密碼。 --privileged=true 在docker run時給該容器加權限
注意:若是沒加權限的話會報錯:Permission denied
掛載配置文件的路徑要與容器裏的路徑一致。
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
#log-error = /var/log/mysql/error.log
#bind-address = 127.0.0.1
security risks
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
由於把宿主機的一個目錄掛載到容器中的一個目錄,當訪問容器中的這個目錄時,沒法訪問目錄,權限拒絕。該問題一般在centos7下出現。或者一個容器啓動成功後,裏面的服務沒法成功訪問。