Docker 部署mysql8(arm64)

镜像地址:

Docker Hub

由于目标B服务器无法连接互联网,无法直接在线安装docker和下载镜像,所以需要一台可连接互联网的中转服务器A导出镜像。

1、在服务器A上安装docker

yum -y install docker
service docker start 或者 systemctl start docker

2、下载mysql镜像到服务器A

docker pull arm64v8/mysql

3、将镜像下载到服务器A本地目录:

docker save -o mysql.tar arm64v8/mysql:latest

4、目标B服务器离线安装docker

arm64版本docker 文件下载地址:

Index of linux/static/stable/aarch64/

这里选择版本:docker-20.10.9.tgz ,将文件下载后上传到服务器B。

docker安装配置参考如下博客:

离线安装Docker_洒家肉山大魔王的博客-CSDN博客_离线安装docker

如果需要手动修改docker安装目录,需要在docker.service配置,ExecStart=中添加

--graph /自定义目录

docker启停命令:

systemctl daemon-reload
systemctl start docker
systemctl stop docker
systemctl status docker
systemctl enable docker  #开机启动

5、目标B服务器导入镜像

将服务器A中导出的mysql.tar镜像上传到目标服务器。

然后执行镜像导入:

docker load -i mysql.tar

操作镜像命令:

docker images   #镜像列表
docker rmi 镜像id #删除镜像
docker rm 容器id  #删除容器

6、启动mysql容器

docker run --name docker-mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d arm64v8/mysql:latest --lower-case-table-names=1 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci

检查容器状态:

docker ps -a

如果容器未启动,可以尝试手动启动:
 

docker run -it docker-mysql

如果仍然未启动,可以查看日志,确定问题:

docker logs 容器id

配置容器随docker启动:
 

docker container update --restart=always 容器名称
-- docker container update --restart=no 容器名称 # 关闭

7、在容器中操作mysql

进入容器命令行:

docker exec -it docker-mysql /bin/bash

#检查Mysql的默认配置文件
cat /etc/mysql/my.conf

登录mysql:

mysql -uroot -p  #密码是刚刚设置的123456

修改mysql密码:

mysql> use mysql;
mysql> update user set Host='%' where User='root';
mysql> alter user 'root'@'%' identified by '新密码';
mysql> alter user 'root'@'localhost' identified by '新密码';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'; -- mysql8
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost'; -- mysql8
mysql> -- alter user 'root'@'%' identified with mysql_native_password by '新密码'; -- mysql5.7
mysql> flush privileges;

如果使用旧的客户端连接mysql8出现错误:mysql -h127.0.0.1 -uroot -p,

“ERROR 2061 (HY000): Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.”

如要执行如下SQL:

mysql> use mysql;
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH 'mysql_native_password' BY '123456';
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY '123456';
mysql> FLUSH PRIVILEGES;

然后使用命令行连接mysql使用如下:

mysql -h127.0.0.1 -uroot -p --ssl-mode=DISABLE

另操作容器相关命令:

docker container start 容器id前3位  
docker container stop 容器id前3位 
docker container rm 容器id前3位

8、补充:mysql数据备份及恢复

linux下操作:

# 查询mysql数据库大小
SELECT table_schema AS `Database`, ROUND(SUM(data_length + index_length)/1024/1024/1024,2) AS `Size`
FROM information_schema.TABLES
GROUP BY table_schema;
# 备份
nohup mysqldump -h127.0.0.1 -uroot -p'密码' --ssl-mode=DISABLE --opt -R --events --routines --single-transaction data_center >/data/download/data_center.bak &
# 恢复
nohup mysql -h127.0.0.1 -uroot -p'密码'  --ssl-mode=DISABLE data_center < data_center.bak &

docker下操作:

#备份
docker exec -it 容器id mysqldump  --all-databases -uroot -p123456 >/root/back.sql
#恢复
mysql > source /databak/data_center.bak

将linux系统下文件复制到容器目标目录:

docker cp /data/download/data_center.bak 容器id:/databak/
# 查看docker 的完整执行命令
docker ps -a --no-trunc|grep 容器名
#将宿主机上的文件复制到容器中:
docker cp /path/file container_name:/path/to
#将容器中文件复制到宿主机:
docker cp container_name:/path/to /path/file 

9、补充:docker的跨平台解释

docker容器所谓的“跨平台”其实跨的就是Linux发行版。只要的区别在于CPU架构,
通常有amd64和arm64,这些是指令集的区别,镜像是不一样的。

使用如下命令拉取:
docker pull --platform arm64 镜像名:版本号
如拉取es的7.9.0版本
docker pull --platform arm64 elasticsearch:7.9.3
如果出现--platform没有这个参数,并且配置无效时可以如下,从镜像的tag里找需要的版本:
docker pull mongo:lastest@sha256:xxxx

10、补充:docker run

#启动容器
# -d 后台运行
docker run -d -it --name 容器别名 -p 主机端口:容器端口  容器名称
#  -v 主机的目录 /data 映射到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest


#进入容器
docker attach 容器名称/id
#如果是通过 attach 进入的容器,在退出容器的时候,如果不想让容器停止运行的话,就不能使用exit命令或者Ctrl+D快捷键的形式退出,而是使用 Ctrl + P + Q 组合键退出容器。
docker exec -it 容器名称/id/bin/bash
#如果是通过 exec 命令进入的容器,在退出容器的时候,就可以使用exit或者Ctrl+D快捷键退出容器,同时容器不会停止运行,这也是exec与attach的最大区别。当然,你也可以使用Ctrl + P + Q 组合键退出容器,容器一样不会停止运行。

你可能感兴趣的:(Linux,docker,容器,运维)