镜像地址:
Docker Hub
由于目标B服务器无法连接互联网,无法直接在线安装docker和下载镜像,所以需要一台可连接互联网的中转服务器A导出镜像。
yum -y install docker
service docker start 或者 systemctl start docker
docker pull arm64v8/mysql
docker save -o mysql.tar arm64v8/mysql:latest
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 #开机启动
将服务器A中导出的mysql.tar镜像上传到目标服务器。
然后执行镜像导入:
docker load -i mysql.tar
操作镜像命令:
docker images #镜像列表
docker rmi 镜像id #删除镜像
docker rm 容器id #删除容器
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 容器名称 # 关闭
进入容器命令行:
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位
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
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
#启动容器
# -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 组合键退出容器,容器一样不会停止运行。