基于阿里云ECS服务器,CentOS 8操作系统,安装Docker,并利用MySQL镜像创建实例化容器,实现远程连接

1.Docker的安装

在安装新的Docker之前,首先要检查一下电脑中有无已经安装好的docker,如果有,需要先将其删除,再进行安装。
老版本的Docker叫docker或者docker-engine,我们可以通过下面的指令去进行卸载:

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

如果你的电脑提示没有安装这些软件或者删除完毕,就可以进行接下来的操作。

安装方法有三种:通过设立Docker仓库进行安装,通过直接下载软件包进行安装,通过脚本进行安装。
这里我介绍如何通过Docker仓库(Dcoker repository)进行安装。

输入以下指令,安装仓库管理程序

$ sudo yum install -y yum-utils

在这里插入图片描述
在这里插入图片描述
之后咱们要设置仓库源,这里推荐阿里的镜像源,输入以下指令进行设置:

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

或者可以设置Docker官方给出的源仓库地址,用它替换掉上面指令后面的网址部分:

https://download.docker.com/linux/centos/docker-ce.repo

仓库源设置完毕后,我们就可以开始安装Docker了,输入以下指令安装Docker:

$ sudo yum install docker-ce docker-ce-cli containerd.io

这里其实是安装的三个不同的东西docker-ce docker-ce-cli containerd.io,相当于Docker的配套设施,各自有不同的版本,因此有可能出现其中某个软件在仓库源中版本过高或者过低(一般默认是选择这三个软件各自最高的版本),导致三者并不能兼容,就会出现我下图所示的这种情况
在这里插入图片描述
这时候我们需要按照错误信息给出的提示,在命令后面加上“- -nobest”:

$ sudo yum install docker-ce docker-ce-cli containerd.io --nobest

这样它就会自动寻找可以进行搭配的最新版本:
在这里插入图片描述
下载完毕后,会让你再次确认:
在这里插入图片描述
确认完毕,安装完成:

在这里插入图片描述
接下来输入指令,来启动Docker:

$ sudo systemctl start docker

在这里插入图片描述
之后我们通过运行hello-world镜像,检查docker是否安装正确:

$ sudo docker run hello-world

这个命令会先在你机器上下载hello-world镜像,并用这个镜像创建一个容器,当容器运行时,会显示出一些信息文字,然后退出:
(我这里是第二次运行,第一次运行的时候会有下载提示)
在这里插入图片描述
这样我们就成功安装Docker了!

2.安装MySQL镜像

首先输入指令来查看MySQL镜像可用版本:

$ docker search mysql

在这里插入图片描述
接着输入指令来下载MySQL镜像:

$ docker pull mysql

该指令后面本来应该有版本号这个参数,不加的话,默认下载最新版本
在这里插入图片描述
安装完毕后,我们可以用指令查看已经下载好的镜像:

$ docker images

在这里插入图片描述

3.创建容器,实现远程连接

在创建容器之前,首先确认一点,该主机是否已经启动了mysqld进程(mysql daemon)
docker通过MySQL镜像产生的容器可以认为是一个独立的完整可运行软件,当你启动容器的时候,相当于启动一个新的完整MySQL。
如果你的本机已经存在MySQL,并且mysqld进程处于运行状态(本机mysql服务处于开启状态),这时再启动容器中新的mysql服务,可能会出现内存溢出的问题或者软件冲突,导致你的容器一运行就stackoverflow并关闭,或者提示你的容器无法找到并启动mysqld进程,进而启动容器失败。
因此我们需要先输入以下指令查看本机mysqld进程是否开启:

$ sudo systemctl status mysqld

在这里插入图片描述
如果是上面这种情况,说明本机mysqld进程处于开启状态,因此我们需要输入以下指令将其关闭:

$ sudo systemctl stop mysqld

之后再输入上面提到过的指令,再次检查该进程状态:
在这里插入图片描述
可以看到图标灰了,Active一行也显示“inactive”,表明这个进程已经结束,现在可以用docker中的MySQL镜像创建docker容器了。

接下来还有一步查看CentOS防火墙状态,我们要确保防火墙开启,并打开接下来想要对docker容器设置端口映射的端口,否则远程可能无法连接,具体原因解释这里给个链接:https://ask.csdn.net/questions/796782
关于CentOS 8防火墙的操作看我之前写的文章:CentOS 8 安装MySQL 8,并在局域网内可访问

完成了操作系统防火墙的设置,不要忘了去服务器安全组件那里开放端口:
在这里插入图片描述
通过自定义的方式,把端口映射所需主机端口开放。

之后我们便可以输入以下指令创建MySQL容器:

$ docker run -itd --name 容器名 -p 主机端口:容器端口 -e MYSQL_ROOT_PASSWORD=根用户密码 mysql

我先来解释一下这段指令是什么意思:
-i:表示交互式操作
-t:表示开启终端
-d:daemon,表示后台持续运行
后面的部分例如:
-p:表示端口映射设置,假如我设置3200:3306,表示对主机3200端口的请求会被映射到容器3306端口进行处理
-e:表示设置环境变量
环境变量有很多,MYSQL_ROOT_PASSWORD只是其中一种,用来设置根用户密码。

当你输入完指令,创建容器后,会出现一段容器ID。
输入如下指令,会出现正在运行的容器ID:

$ docker ps

在这里插入图片描述
还可以通过输入下面的指令查看所有容器ID:

$ docker ps -a

之后要做的事情是进入容器:
输入:

$ docker exec -it 容器ID bash

这里稍微解释一下这个指令,-i-t已经解释过了,后面跟的bash表示打开bash操作界面。
进入容器后,我们就可以输入mysql登录用的语句进行登录了
在这里插入图片描述
登录之后如何创建远程登录用户见我之前写的文章:CentOS 8 安装MySQL 8,并在局域网内可访问
用户设置完成,退出mysql,容器也要退出,因为我们要关闭容器并重新启动(相当于重启整个mysql服务)
在这里插入图片描述
输入以下指令:

$ docker stop 容器ID
$ docker start 容器ID

接下来就是保持容器处于运行状态,然后尝试进行登录。

尝试在自己的电脑进行登录:
注意: 确认连接端口时要用大写的字母P,我之前用的小写字母,一直报错
在这里插入图片描述
成功登录!

我们成功通过CMD命令行登录了远程的数据库,这意味着我们同样可以用MySQL Workbench进行登录,不妨来试试:
在这里插入图片描述
按照要求填写信息:
在这里插入图片描述
发现可以成功连接!
在这里插入图片描述
之后我们可以远程连接进入MySQL:
在这里插入图片描述
可以查看到服务器信息:
在这里插入图片描述

PS:关于docker查错的一些操作:

如下图所示,我遇到了一些问题:
在这里插入图片描述
当我们操作容器遇到一些问题的时候,可以先查看一下该容器的运行日志,输入以下指令查看日志:

$ docker logs 容器ID

可以看到下面会蹦出一系列状态信息,我们可以根据状态信息推断一下哪里出了问题。
细心一点会发现容器内有一个以容器名创建的.err文件,状态信息说会将一些错误记录在里面(实际查看后发现里面任何有用的信息都没有),不妨去看看这个文件在哪里。

然而我们直接按照它给的路径去查找该文件是行不通的,根本无法找到(这其实是个相对路径,坑得很
它给你的路径是整个容器所在位置大文件下的相对路径,如果想找到这个文件,必须找到存储容器的文件在哪里。
但是你又会发现,存储容器的文件你根本就找不到(能把人整死

这时就需要利用docker的cp指令去解决这个问题:

docker cp 容器ID:/容器内文件夹名 /要拷贝到的主机目录名/

这是一个拷贝指令,会将指明的容器内文件夹拷贝到指明的主机目录。
例如我输入:

docker cp a632e14f213e:/var /containermysql/

表明我要将容器a632e14f213e文件目录下的var文件夹整个拷贝到主机containermysql文件夹下
之后再根据之前状态信息提供的路径,我们就能找到a632e14f213e.err文件了

在这里插入图片描述
个人认为,整个容器文件就好像一个系统,好比我用的CentOS 8,容器文件内也有etc,var等文件夹,只不过根据所利用的镜像不同,里面存储的东西不太一样。
比如我用的mysql镜像,假如按照平时mysql普通安装在主机上我想修改my.cnf文件,首先要进入目录etc中的mysql文件夹,然后找到my.cnf文件,容器中也一样,先将容器中的etc文件拷贝出来,再进行修改,最后拷贝回去就OK
在这里插入图片描述
拷贝回去所用的指令还是cp,只不过顺序反了过来:

docker cp /containermysql/etc a632e14f213e:/etc
PS:关于MySQL中my.cnf文件的一些解释:

这是一个MySQL配置文件,通过该文件我们可以设置MySQL服务的各种特性,该文件一般会存在于(如果是Linux系统)/etc/mysql文件夹下。
此文件内一般有很多参数,而且会分成许多不同配置部分,每个部分用[]标注进行分离。
关于文件中参数的解释,这里也是推荐上网去搜搜,目前感觉没有一篇是比较完整的,都是东拼西凑出来的,但是了解一下这个文件的概念还是很重要的。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值