前言
這幾天在研究如何將服務器和數據庫遷移至docker容器
,中間遇到了許多問題,特此寫篇博客記錄一下。
提示:本篇文章主要講解如何在docker容器中構建及部署MySQL
一、docker中部署MySQL主要有哪幾種方式?
- 從 CentOS 鏡像中構建 MySQL 容器
- 從 MySQL 官方鏡像中構建容器
從 CentOS 鏡像中構建 MySQL 容器可以更好地控制操作系統(tǒng)的版本和配置,而從 MySQL 官方鏡像中構建容器則可以更方便地獲取最新版本的 MySQL。具體選擇哪個鏡像,可以根據自己的需求和實際情況來決定。
下面我們來嘗試上面兩種構建MySQL容器的方式
二、CentOS 鏡像中構建 MySQL 容器
1.編寫Dockerfile
Dockerfile(示例):
# 1. 鏡像基于centos7
FROM centos:7
# 2. 更改鏡像時區(qū)
RUN echo 'Asia/Shanghai' >/etc/timezone
MAINTAINER 作者
# 3. 安裝必要的軟件包
RUN yum -y install epel-release
RUN yum install initscripts -y
# 4. 安裝jdk
RUN yum install java-1.8.0-openjdk.x86_64 -y
# 5.安裝wget
RUN yum -y install wget
# 6. 安裝MySQL
## 6.1 wget下載MySQL5.7
RUN wget http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
注:【MySQL5.6地址】:http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
## 6.2 安裝MySQL5.7
RUN rpm -ivh mysql57-community-release-el7-7.noarch.rpm
注:【MySQL5.6包】:rpm -ivh mysql-community-release-el7-5.noarch.rpm
## 6.3 安裝MySQL5.7 所需秘鑰【MySQL5.6則無需秘鑰】
RUN rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
## 6.4 執(zhí)行安裝 && 賦予mysql安裝目錄訪問權限
RUN yum -y install mysql-community-server
RUN chown -R root:root /var/lib/mysql
# 7. 將數據庫初始化腳本放入鏡像
COPY ./mysqlinit/init.sql /usr/local/mysql/init.sql
# 8. 暴露端口
EXPOSE 80 3306 443 6379
# 9. 啟動服務
CMD ["/usr/sbin/init"]
2.初始化MySQL
1. docker build 生成MySQL鏡像
:
docker build -t 鏡像名稱 -f Dockerfile .
2. docker volume 創(chuàng)建數據卷
:
docker volume create mysql_data
3. docker run 運行容器
:
docker run --privileged=true -d --name 容器別名 -p 3306:3306 -v mysql_data:/var/lib/mysql 運行的容器ID
注: --privileged=true 參數的意思是以特權的身份去運行容器,否則在容器中運行MySQL【systemctl restart mysqld.service
】時會提示無權限
-v 參數的意思是將宿主機的目錄/數據卷和容器目錄進行掛載
4. 進入docker容器
:
docker exec -it 容器名/容器id bash
5. 啟動mysql
:
先使用命令查詢mysql是否運行
ps -ef|grep mysql
如果未啟動則執(zhí)行
systemctl restart mysqld.service
6. 查看mysql初始密碼
:
grep ‘temporary password’ /var/log/mysqld.log
7. 登錄mysql并修改密碼
:
1. 修改密碼
ALTER USER 'root'@'%' IDENTIFIED BY '你的密碼';
配置新賬號參考:
grant all privileges on *.* to 你的賬號@'%' identified by '你的密碼' with grant option;
2. 刷新密碼改動
flush privileges;
8. mysql一些常見指令
:
1. 創(chuàng)建數據庫
CREATE DATABASE IF NOT EXISTS 數據庫名稱 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
2. 開啟mysql語句執(zhí)行記錄【但是并不建議用戶開啟 需定期清理 否則會造成日志堆積】
set global general_log=1;
3. 找到日志存放目錄
show variables like 'general%';
三、MySQL 官方鏡像中構建容器
1. 拉取官方鏡像
docker pull mysql:5.7
2. 運行鏡像
創(chuàng)建數據卷
docker volume create mysql_data7
運行鏡像并掛載數據卷
docker run -d -e MYSQL_ROOT_PASSWORD=root --name mysql57 -d -p 13307:3306 -v mysql_data7:/var/lib/mysql -v /usr/local/docker/mysql5.7/log:/var/log/ mysql:5.7
3. 配置鏡像外網訪問
進入鏡像
docker exec -it mysql57 bash
登錄mysql設置允許外網訪問
use mysql;
update user set host = ‘%’ where user = ‘root’;
FLUSH PRIVILEGES;
注意:update user set host = ‘%’ where user = ‘root’; 這一行可能會報錯 但是不用管 依然會生效的
四、MySQL 容器初始化腳本
1. 將sql文件放入docker
docker build 構建容器時放入sql文件
COPY ./mysqlinit/init.sql /usr/local/mysql/init.sql
docker啟動后放入sql文件
docker cp init.sql 容器id:/usr/local/mysql/init.sql
2. 執(zhí)行sql文件
執(zhí)行文件前可以開啟sql執(zhí)行日志
set global general_log=1;
查詢sql執(zhí)行日志輸出目錄
show variables like 'general%';
執(zhí)行sql文件
mysql -uroot -p 數據庫名 < /usr/local/mysql/init.sql
五、MySQL 容器本地化部署
本地化部署含義:將MySQL鏡像(含數據)
打成包保存到本地,然后部署到需要這臺MySQL的服務器上。
要求MySQL鏡像、MySQL鏡像中的數據庫、mysql配置文件都部署到新服務器上。
我們來看看具體應該如何操作
1. 打包mysql鏡像
1. 打包鏡像
docker save -o <image_file_name>.tar <image_name>
比如執(zhí)行:
docker save -o mysql7.tar mysql7
就是將mysql7
這個鏡像打包成名稱為mysql7.tar
的壓縮包下
2. 找到鏡像掛載數據卷
docker volume inspect mysql_data7
注:什么是掛載
數據卷
?我們知道docker
鏡像每次重啟后數據是會重置的。但是MySQL
作為數據庫,對它的任何改動都應該是要被持久化的
,這個時候只需在宿主機創(chuàng)建一個數據卷
,然后通過-v
指令將容器映射到這個數據卷
上,這樣容器內MySQL
的改動就會保留到宿主機的數據卷
上,下次重啟容器時,改動就會被保留
3. 進入掛載目錄
cd /var/lib/docker/volumes/mysql_data7
4. 壓縮鏡像目錄
tar -czvf mysql7.tar.gz _data/
5. 找到原mysql配置文件 my.cnf
[mysqld]
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
# 表名大小寫不敏感,根據項目實際要求來配置即可
lower_case_table_names=1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
上述操作處理完生成三個文件 :6. 將這三個文件放入目標服務器
2. 部署MySQL鏡像
1. 加載鏡像
docker load -i mysql7.tar
加載后即可看到鏡像
2. 創(chuàng)建數據卷
docker volume create mysql_data7
3. 查詢數據卷目錄并進入
docker volume inspect mysql_data7
3.進入數據卷目錄
cd /var/lib/docker/volumes/mysql_data7
4. 復制備份壓縮包到目錄下 并解壓
tar -zxvf mysql7-volume.tar.gz
5.啟動docker鏡像
docker run -d -e MYSQL_ROOT_PASSWORD=root --name mysql7 -d -p 3306:3306 -v mysql_data7:/var/lib/mysql -v /root/my.cnf:/etc/my.cnf mysql7
-e MYSQL_ROOT_PASSWORD
代表mysql初始密碼--name
代表容器啟動別名 -d
代表后臺啟動 -p
代表端口映射-v
代表文件/數據卷映射 比如 -v mysql_data7:/var/lib/mysql 代表將宿主機的mysql_data7
數據卷映射到容器的/var/lib/mysql
目錄下文章來源:http://www.zghlxwxcb.cn/news/detail-768230.html
總結
以上就是今天要講的內容,本文主要介紹了如何使用docker構建及部署mysql5.7鏡像,后續(xù)會介紹更多的docker內容,如有疑問可以在評論區(qū)留言。文章來源地址http://www.zghlxwxcb.cn/news/detail-768230.html
到了這里,關于使用docker構建并部署MySQL5.7鏡像的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!