docker安裝Mysql掛載數據卷 實現容器配置本地化


Docker快速創建MySQL實例

很多同學如果不會安裝MySQL或者懶得安裝MySQL,可以使用一下命令快速運行一個MySQL5.7實例,當然前提是你要有docker環境…

一.安裝docker

1.查看內核,版本必須高於3.10

uname -r

2.移除舊的版本

sudo yum remove docker*

3.yum 包更新到最新

sudo yum update

4.安裝需要的軟件包, yum-util 提供yum-confifig-manager功能,另外兩個是devicemapper驅動依賴的

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
5.設置yum源為阿里雲

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker- ce.repo

6.安裝docker

sudo yum -y install docker-ce

7.安裝后查看docker版本

docker -v

8.啟動 Docker 后台服務

sudo systemctl start docker

二、docker安裝MySQL

安裝前,先設置阿里雲鏡像加速,,強烈推薦....否則那個速度實在感人

注冊一個阿里雲賬號,進入阿里雲鏡像加速模塊

1.查找MySQL的可用鏡像

docker search mysql

或者去下面網址里查找版本

mysql hubdocker下載地址

獲取版本號


安裝5.7.31版本的mysql

mysql新建文件夾和配置文件

創建本地文件夾

mkdir -p $PWD/mysql57/conf && mkdir -p $PWD/mysql/data
或者
mkdir -p $PWD/mysql57/{conf,data,log} #推薦

新建配置文件

vim $PWD/mysql57/conf/my.cnf

內容如下:

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
lower_case_table_names=1 #實現mysql不區分大小(開發需求,建議開啟)
# By default we only accept connections from localhost
#bind-address   = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
default-time_zone = '+8:00'

# 更改字符集 如果想Mysql在后續的操作中文不出現亂碼,則需要修改配置文件內容
symbolic-links=0
character-set-server=utf8mb4
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4

創建 MySQL 容器並啟動

docker run --name mysql57 \
--restart always \
--privileged=true \
-p 3307:3306 \
-v $PWD/mysql57/log:/var/log/mysql \
-v $PWD/mysql57/conf/my.cnf:/etc/mysql/my.cnf \
-v $PWD/mysql57/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD="123456" \
-e MYSQL_USER="haima" \
-e MYSQL_PASSWORD="123456" \
-d mysql:5.7.31

解釋說明

--name:為容器指定一個名字
–restart always:開機啟動
–privileged=true:提升容器內為root權限
-v 宿主機里的log:容器里log : 掛載日志文件夾
-v 宿主機里的my.cnf:容器里的配置文件的my.cnf:掛載配置文件 
-v 宿主機里的數據目錄data:容器里的數據目錄data:掛載數據文件夾 
-e MYSQL_USER=”haima”:添加用戶
-e MYSQL_PASSWORD=”123456”:設置用戶的密碼為123456
-e MYSQL_ROOT_PASSWORD=”123456”:設置root賬號的密碼為123456
-d:后台運行容器,並返回容器 id

進入Docker容器內

docker exec -it mysql-service5.7 /bin/bash

登錄mysql

mysql -uroot -p123456

查看mysql字符集命令

show variables like '%char%';

mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

表示系統使用的時區

mysql> show VARIABLES like '%time_zone%'; system_time_zone :
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | +08:00 |
+------------------+--------+

查看確定Docker內 MySQL 文件相關路徑

查找Docker內,MySQL配置文件my.cnf的位置

mysql --help | grep my.cnf

退出mysql
exit

操作容器

docker restart mysql-service5.7
docker stop mysql-service5.7
docker start mysql-service5.7
docker rm mysql-service5.7 #容器停止時才能刪除

啟動navicat, 連接宿主機的公網IP ,指定端口為配置的33306,,賬戶root,密碼123456
這里的宿主機ip起始就是服務器(或者是虛擬機)的ip

至此已經mysql已經安裝成功了,mysql的數據和配置文件已經掛載到宿主機的/root/docker/mysql目錄里了,
即使刪除容器數據也不會丟了,
下次再重新掛載到宿主機的/root/docker/mysql目錄里了,數據就又回來了.


安裝mysql:8

下面嘗試同時啟動兩個mysql8的服務

啟動第一個服務

mkdir -p $PWD/mysql8one/{conf,data,log}
vim $PWD/mysql8one/conf/my.cnf

my.cnf的內容

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
secure_file_priv=/var/lib/mysql
default-time_zone = '+8:00'
# Custom config should go here
!includedir /etc/mysql/conf.d/


# 更改字符集 如果想Mysql在后續的操作中中文不出現亂碼,則需要修改配置文件內容

character-set-server=utf8mb4
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4

啟動服務

docker run \
--name mysql8one \
--restart=always \
--privileged=true \
-v $PWD/mysql8one/conf/my.cnf:/etc/mysql/my.cnf \
-v $PWD/mysql8one/log:/var/log/mysql \
-v $PWD/mysql8one/data/mysql:/var/lib/mysql  \
-p 13306:3306 \
-e MYSQL_USER="haima" \
-e MYSQL_PASSWORD="123456" \
-e MYSQL_ROOT_PASSWORD="123456" -d mysql

如果要外網連接,需要進入mysql里開權限

docker exec -it mysql bash
mysql -uroot -p

ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES; 

Navicat連接


到此已經ok了


啟動第二個服務

mkdir -p $PWD/mysql8two/{conf,data,log}
vim $PWD/mysql8two/conf/my.cnf

my.cnf里的內容和第一個服務的一樣

啟動服務

docker run \
--name mysql8two \
--restart=always \
--privileged=true \
-v $PWD/mysql8two/conf/my.cnf:/etc/mysql/my.cnf \
-v $PWD/mysql8two/log:/var/log/mysql \
-v $PWD/mysql8two/data/mysql:/var/lib/mysql  \
-p 13309:3306 \
-e MYSQL_USER="haima" \
-e MYSQL_PASSWORD="123456" \
-e MYSQL_ROOT_PASSWORD="123456" -d mysql

三.設置開機自動啟動容器

在運行docker容器時可以加如下參數來保證每次docker服務重啟后容器也自動重啟:

docker run --restart=always CONTAINER ID

如果已經啟動了,沒有設置開機啟動,則可以使用如下命令:

docker update --restart=always CONTAINER ID

參考文章

參考文章


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM