06、环境-使用vagrant快速创建linux虚拟机

好,接下来呢,我们就一起来搭建项目的开发环境。
    首先呢,我们这个项目中用到的一些环境,比如redis,MySQL,RabbitMQ等等,我们都是装在linux里面的。
    所以呢,我们先要安装一个linux虚拟机来简化开发,那这个LINUX虚拟机呢,大家可以使用 大家熟悉的VMware。当然,我呢推荐来安装我们这个VirtualBox。
    这个VirtualBox呢,他首先是开源的,我们去来搜索一下VirtualBox,来,点击第一个页面,把它下载并安装就行了。
【https://www.virtualbox.org/】

我们来,就来下载VirtualBox6.0,好,我们下载Windows版的,在这找Windows。然后呢,等待他下载完成。

好,当我们这个VirtualBox下载完成以后呢,我们直接双击进行安装。
    首先,VirtualBox要进行安装,我们需要呢,我们的CPU开启虚拟化。那么这个呢需要设置主板,在开机启动的时候呢,设置我们的(拜奥斯)里边的CPU。
【CPU Configurat ion】
    在CPU配置这一块儿,主要开启我们这个CPU虚拟化技术。把这一项呢,打开。
【Intel Virtualizat ion Technology    [Enabled]】
    打开以后重启电脑,再来安装我们这个VirtualBox。

好,我们来进行安装,下一步,推荐呢,把VirtualBox安装到其他盘。好,比如我们放在D盘,我点一个确定。
    下一步,好,我们直接下一步——是——安装。
    那么呢,把VirtualBox安装完成以后,我们就可以给VirtualBox里边安装虚拟的linux系统。
    好,这个VirtualBox安装完成,我们来点击完成。
    打开,我们刚才安装好的VirtualBox。
    当然,如果我们想要给我们的VirtualBox里边,新建一个linux虚拟机。那我们需要呢先在网上下载linux相关的镜像。然后点击新建,根据这个创建向导,来一步一步的创建虚拟机,这样呢,太麻烦了,我们呢,推荐大家使用我们一个新的技术,叫Vagrant,Vagrant呢,只要我们装了VirtualBox,Vagrant可以帮我们快速的创建出一个虚拟机。
    其实呢,Vagrant官方有一个叫镜像仓库。在这个镜像仓库里边呢,官方有好多的已经做好的镜像,比如centos/7,ubuntu/trusty64等等等等。我们只需要用Vagrant就能连接VirtualBox快速的从官方镜像里边创建出一个虚拟机。
【https://app.vagrantup.com/boxes/search】【Vareant官方镜像仓库】
【https://www.vagrantup.com/downloads】【Vareant下载】
    那好,我们接下来就使用Vagrant。我们来,先来搜索Vagrant,然后呢, 来到他的官方网站,他这块呢有一个下载页面【DOWNLOAD2.2.5】,我们点进它的下载页面,注意,下载我们Windows64位版本,当然我的系统呢是64位,咱这个下载呢比较慢,我已经将下载好的发给了大家,在我们的软件里边。我们只需要安装Vagrant就行了。

好,我们双击安装【vagrant_2.2.5_x86_64】,好,下一步,好,同意协议,下一步,然后呢,我们一般推荐呢,都把它安装在其他盘,好,我们来,下一步,我们进行安装。好Vagrant安装就完成了。
    然后我们来验证一下。是否安装成功,当然,Vagrant安装完成以后呢,我们要重启一下我们的系统。

刚刚,安装完成Vagrant,重启电脑以后呢,我们接下来验证一下,Vagrant是否安装完成。
    打开我们的CMD窗口,然后呢,我们来敲一个命令Vagrant
    【C:\Users\lfy>vagrant】 
    欸,如果他们有vagrant命令提示,那我们就相当于安装成功了。
   接下来呢,我们就可以使用Vagrant,帮我们快速的给VirtualBox里边创建一个linux虚拟机。怎么创建呢,只需要一个非常简单的命令,叫Vagrant init ,就是Vagrant初始化,初始化一个什么呢,centos/7系统,当然初始化,这个东西怎么写,那我们需要看Vagrant的官方镜像仓库,欸,之前给大家介绍过,在官方镜像仓库里面呢,做好了好多的镜像,其中有一个就叫centos/7,那这款名是什么,我们那块就写什么就行了。
    好,我们还是来到我们这个命令行窗口,当前在C盘下Users下,lfy下边使用这个命令:vagrant init centos/7,欸,因为我们这个镜像仓库里边他就叫centos/7。
    好,大家注意现在这个VirtualBox里边呢,它没虚拟机,好,我们来准备给它初始化一个。
【C:\Users\lfy>vagrant init centos/7】
    我们来等待它的初始化。这个化初始化呢,是一个非常快的过程,因为它相当于呢,是干什么,你看啊,这相当于说呢,有一个Vagrantfile已经呢,在我们这个目录下创建了。现在只创建了一个Vagrantfile文件,我们可以在这个目录下,来看一下。来打开C盘,来找到我们的电脑C盘,打开C盘里面用户,lfy,看在这个目录下呢,创建了一个vagrantfile。
    欸,有了这个vagrantfile以后呢,接下来怎么办,看我们这一块提示。接下来呢,我们就可以准备使用一个vagrant up来启动我们这个虚拟的环境。所以呢,我们只需要两步。
    首先vagrant init centos/7环境。接下来我们使用vagrant up,我们来启动我们的虚拟环境。
【C:\Users\lfy>vagrant up】
    当然这个up呢,是一个很漫长的过程。他先要从官方去来一步步的下载镜像, 然后呢按照这个镜像,帮我们来启动一个虚拟容器。我们来稍等,它的这个下载。好,这一块呢已经下载完了。接下来呢,它开始准备帮我们导入咱们这个容器,那这一块呢就已经有了咱们这个centos/7,好,来等待他的整个完成工作。 这块创建完成以后呢,它也会自动的帮我们来启动这个虚拟环境。我们可以看到,这些呢都正在启动的过程。
    好,当我们启动完成以后呢。我们会看到这个,欸,我们同步了什么什么文件夹【default:Rsyncing folder: /cygdrive/c/Users/lfy/ => /vagrant】,当然这个呢,我们暂时不用看。
    我们怎么连上我们这个虚拟机呢。vagrant也帮我们在创建虚拟机的时候,帮我们已经创建好了SSH连接。默认呢,用的是vagrant这个账号。当然,我们想要连接呢,非常简单。
    我们先ctrl+c把这一块儿停掉。因为我们这一块儿已经启动好了。
    接下来我们只需要用一个命令叫vagrant ssh,那么呢就会默认连上我们这个虚拟机。而且使用的时vagrant这个账户,回车。
    好,我们现在呢看到这一块儿的命令【[vagrant@10~]$】,那就是连上虚拟机了。
    我们呢,连上虚拟机,可以直接,在我们的这个cmd窗口这,敲linux的相关命令,比如我看一下,我们当前是哪个用户,whoami。
【[vagrant@10~]$ whoami】
    好我们当前呢,是vagrant用户连上来了。
    包括ls /
【[vagrant@10~]$ ls /】
    我们来看一下当前虚拟机根目录里边的所有目录,好,等等等等。当然,我们想要退出我们跟虚拟机的连接,我们只需要用一个命令exit:好,我们来退出。
【[vagrant@10~]$ exit:】
    当然想要停止这个创建好的虚拟机,我们直接可以在我们的VirtualBox里边,右键——退出,我们让他正常关机,正常关机。
    包括呢,比如我们下一次,欸,我们第二天打开电脑,我们想要开机并连上这个虚拟机,我们可以在他身上右键,让他启动。
    当然我们也可以使用vagrant命令,我们直接Windows R,cmd。
    那当我们只要这个虚拟机创建好了以后,我们以后就不用vagrant init初始化了,我们只需要用一个命令,叫vagrant up,欸我们之前用过,就是把我们的这个环境启动起来。当然,要使用这个vagrant up命令,得先确保我们确实当前cmd窗口所在的这个文件夹下,来到我们的这个用户文件夹,在C盘,我们来找C盘,C盘呢,我们这个用户,lfy里边儿,得确保我们这个文件夹下有一个vagrantfile,欸,我们之前创建好的东西。欸,接下来我们就可以使用vagrant命令,vagrant up来启动这个虚拟机,当然我们用这个命令启动,跟他在身上点右键启动都是一样的效果。
【C:\Users\lfy>vagrant up】
    也就是说,当第二天我们开机以后呢,我们想要启动虚拟机,只需要vagrant up,当虚拟机启动了以后呢, 我们等待它启动,只要出现了,这块儿命令,说同步某一个文件夹【default:Rsyncing folder: /cygdrive/c/Users/lfy/ => /vagrant】,那我们这个虚拟机就启动了。
    启动了以后呢我们只需要vagrant ssh 连上我们这个虚拟机。好,我们vagrant ssh,好,连接。
【C:\Users\lfy>vagrant ssh】
    那连接上虚拟机呢,我们就可以直接在我们命令行这进行操作,我们都无需去来装连虚拟机的相关客户端等等等等。好,我们直接可以在这想做什么操作都可以,ls、pwd等等等等。
    好,我们来退出。
【[vagrant@10~]$ exit:】
    退出。
    这就是我们vagrant创建一个虚拟机,并每次链接操作的过程。
    另外呢,我们补充的一点是,我们这个VirtualBox,这个软件呢,可能与我们电脑的一些软件冲突,比如呢,我们在这举了一些例子,比如你的电脑,安装了红蜘蛛、360、净网大师等等这些软件。可能有冲突,所以呢,如果大家VirtualBox安装起来,虚拟机启动不起来,有报错,那,大家需要呢将这些冲突的软件,先进行卸载,然后呢重启电脑,再来尝试启动我们的虚拟机。

07、环境-虚拟机网络设置

前面呢,我们使用Vagrant快速的帮我们创建了一个虚拟机,但这个虚拟机默认的网络,它使用的是我们这个,我们来看一下,网络地址转换和端口转发的方式。
【Oracle VM VirtualBox——虚拟机——设置——网络——网络地址转换】 
    这种方式呢对于我们后来的开发很不方便,什么是端口转发呢,可以给大家简单的看一下,比如呢,我们这是我们的Windows系统,欸,这是我们当前电脑,我们给里边呢装了一个VirtualBox, 这个里边呢是一个LINUX系统,那么这个虚拟机里面呢后来我们会装好多的软件。比如MySQL、Redis、那么MySQL呢,他有自个的默认的端口3306,比如Redis呢叫6379,大家想要访问咱们这个Redis或者MySQL,如果是使用端口转发的方式,那就相当于,我们得在VirtualBox的那块设置里边设置。我们VirtualBox里边,相当于我们Linux虚拟机里边的3306端口跟我们本机Windows的3333端口,比如进行绑定。那相当于别人只要访问过这个机器的3333,就相当于访问到了我这个VirtualBox里面的MySQL 3306。
    当然这样的话,我们每在Linux里面装一个软件,那都要做一个端口映射, 这个端口映射呢我们就需要不停的在我们这边,网络这边。
【Oracle VM VirtualBox——虚拟机——设置——网络——高级——端口转发】  
    每装好一个软件呢,我们都在网络这边来进行端口转发,设置好。设置好什么呢,比如我们本机的端口。
【端口转发——主机端口】
    欸,这就是我们的Windows端口,比如我们的3333,转发到我们这个Linux里面的3306。
【端口转发——子系统端口】
    这样呢才可能能访问到MySQL。
【端口转发——名称】
    但这样做呢,还是太麻烦了,所以说呢,我们希望呢,我们能给虚拟机一个固定的IP地址, 然后呢Windows可以跟虚拟机呢互相ping通,这样的话呢我们虚拟机里面装好一个软件,我们直接拿它的IP地址来访问就行了。
    要完成这件事情呢也非常简单,当然呢,可以有两种办法。
    第一种办法呢,大家当然想到,我呢可以进我的虚拟机里边,比如我们使用vagrant ssh跟我们的虚拟机建立起连接。
【C:\Users\lfy>vagrant ssh】
    好,我们现在呢,进虚拟机里边,我们在这里面呢来改网卡的这些信息,但这样呢,都太麻烦了,我们这个虚拟机呢,是使用vagrant创建的,而vagrant呢,它默认是使用我们这个,在我们用户文件夹下有一个叫vagrantfile,这个文件里边呢,它是根据这个文件帮我们创建出虚拟机信息的,而这个文件里面呢,就有关于网络的一些配置。那我们呢,只需要非常简单的在这个文件里边,修改一个,欸,我把这行复制来,比如呢我们这个网络呢,我们就使用私人网络,欸,我们给虚拟机给一个IP地址,那这1块的IP地址,到底要给成什么,我们是要简单的分析一下的,好,我们首先呢,来到我们这个vagrantfile里边,我们一直找来找我们这个私有网络,把这一段的配置给它打开,而这一块的IP地址写什么呢, 我们来到Windows的cmd窗口,我们使用ipconfig这个命令,来看我们这个Windows主机的这些地址,主要呢,看这,这有一个叫VirtualBox Host-Only Network: 这是我们VirtualBox的,咱们这个虚拟网卡,这个网卡呢,他的这个地址是56.1,那么我们这里边的地址就要写56.几,比如我就写56.10,改完这个配置呢我们接下来重启虚拟机,可以使用vagrant进行快速的重启,我们只需要一个命令,将vagrant reload,欸,我们让他重启一下。
【C:Users\lfy>vagrant reload】
    vagrant就会给我们重新启动,这个虚拟机,而且启动的时候呢,是根据我们这一块配置文件的配置,来改变我们虚拟机里面的内部行为,来等待它重新启动,好,在这启动完成以后呢,接下来我们来连接上虚拟机,我们来看一下他的这个地址,我们使用vagrant ssh。
【C:Users\lfy>vagrant ssh】
好,我们虚拟机,在我们这个虚拟机里边呢,我们使用命令ip addr。
【[vagrant@10~]$ ip addr】
好,那现在呢看到虚拟机现在呢,这个网络地址192.168.56.10,我们来测试一下,主机和虚拟机,是否互相能ping的通。我们呢,再来打开一个,Windows的cmd窗口,我们先来看一下,我们Windows的这个IP地址,我们Windows系统的IP地址呢,是192.168.3.3,而我们这个虚拟机的地址呢,我们已经改成56.10,那我们两个互相ping一下,我们先从Windows系统来ping我们的虚拟机,192.168.56.10。
【C:Users\lfy>ping 192.168.56.10】
    我们现在发现呢,这一块是ping的通的,那同样我们从虚拟机里边,再来ping Windows的地址,那Windows的地址呢,我们看到在这一块儿呢是3.3,好,我们来ping一下,ping 192.168.3.3。
【[vagrant@10~]$ ping 192.168.3.3】
    走,发现呢,这一块儿,也可以ping的通,那我们这一块儿呢IP地址就设置好了。

08、环境-linux安装docker

好,前面呢, 我们安装配置了Linux虚拟机,接下来呢,我们就给虚拟机里面安装docker。
    以后我们所有的环境,比如MySQL,Redis我们都使用docker的方式,进行快速的安装部署,那docker是什么呢,如果还不知道同学,欸,我们简单的在这来提一下。
    首先呢,我们来说docker呢,它是一个虚拟化容器技术,那这个虚拟化容器技术解决什么痛点呢,来考虑一下,以前呢我们在虚拟机上装软件的时候,比如装MySQL,装Redis,步骤超级复杂,我们按照源码编译一步一步走, 编译好以后再执行运行开启服务等,一大堆流程,非常多,并且麻烦,而且呢, 我们某个软件在运行期间如果出现了问题,并且影响了Linux系统,有可能呢,我们这个Linux系统里边,安装的其他环境,比如MySQL 都会出现问题。
    那有了docker呢,这些问题都能轻松应付,那docker是怎样的工作思想呢,我们可以来说一下。
    docker呢它是基于镜像,可以秒级启动各种容器,而且呢,每种容器都是一个完整的运行环境,容器之间,互相隔离。
    那这句话是什么意思呢,我举一个例子,我们以前装Windows系统的时候,我们可以用官方的方式,买一个Windows的正版盘,然后呢,对我们系统的磁盘先进行分区一点一点装,装好Windows以后呢,接下来我们再给Windows里面装上QQ,装上微信,装上我们的OFFICE,等1系列软件,装好以后呢,我们整个Windows就能用了。
    如果某一天Windows出现了问题。那我们可能要重装系统。那从头到尾这一套流程。再走过来。非常麻烦。那。为了简化的Windows的安装。我们都去网上下载。人家做好的Windows镜像。比如我们有一个win10镜像,那下载来以后呢,我们直接用镜像工具,Client工具,然后将这个镜像,读取,并且安装到我们电脑上,而且是一切都是自动化的,无人指使的,非常快。
    那我们这docker呢,就类似于我们这个Client工具,它呢,就可以去从网上,获取一些软件的镜像,然后呢,把这些镜像拿来以后,直接基于这个镜像,docker呢可以启动一个容器,那这个容器呢,其实就是,这个镜像的完整运行环境,就相当于win10的镜像,给我们完整启动了一个win10系统。
    所以呢,我们以后想要装某种环境,我们只需要呢,给Linux里边安装上docker,让docker呢,去镜像市场去来下载这些软件的镜像,那docker的这个镜像仓库,比如它镜像市场呢,在我们这个网站,docker hub。
【https://hub.docker.com/】
    好,这个网站里边呢,集合了非常多的镜像,比如我们来搜nginx,我们现在想要装nginx,我们搜一个nginx,这就列举出了所有nginx的镜像,那么呢,这些镜像有一些是官方的,比如official,这都是官方做的镜像,也有一些个人做的镜像,包括呢,我们想要装redis,我们搜redis,等等,各种软件呢,基本在这都有镜像,那么找到这个镜像呢,我们就可以让docker,去这些软件仓库里边,将我们这个镜像,下载过来,那下载到我们本机以后呢,docker就可以非常方便的,基于这个镜像直接启动起它的这个容器。而且呢这些容器,就是我们当前软件的完整运行环境,每一个容器跟容器之间,都是互相隔离的,某一个的运行环境出现了问题,比如这个Redis的镜像,我在这启动了两个,相当于我运行了两个Redis,有一个出现问题,也并不会影响其他容器,这就相当于做 到了容器之间的互相隔离,每一个容器,都是一个完整的运行环境。那好,接下来呢我们就给虚拟机里面安装上docker。
    我们现在呢,已经连线了虚拟机,想要安装docker呢,可以参照docker的官方文档。
【https://www.docker.com/】
    好,我们先进入docker的官方网站,在这一块呢Resources里边有docs它的文档,我们想要安装docker,这有Get Docker,获取Docker。Docker呢它分为Docker Engine-Community和Docker Enterprise两个版本,Docker Engine-Community呢是社区版,是免费的开源的,Docker Enterprise企业版,是需要收费的,而我们使用Docker Engine-Community就够了。
    好,我们现在呢找到Linux,我们是在CentOS下边,找到我们这个文档以后呢,我们往下翻,想要安装呢,我们可以按照这个步骤。
【Uninstall old versions】
    第一步,先来卸载我们旧版本的一些内容,怎么卸载呢,用yum remove docker这一对,我们把这一堆命令直接复制来,在这【虚拟机】运行,但是呢,大家注意,由于我们当前这个用户whoami,由于我们这个,当前这个用户呢,他不是root用户,所以说呢,我们想要执行这些命令,是不可以的,我们可以看一下,也就是说这个命令呢,是被拒绝的,那我们需要呢ROOT用户,那我们就把完整命令复制来,sudu以超级管理员的方式来运行。

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

    好,这是我们第一步, 先把这些卸载,由于我们之前没有安装过什么,所以这一块儿呢,就不存在什么卸载。
    那想要安装呢,那我们接下来,继续往下走,要做的第一件事,先来设置我们docker的这个地址,在设置之前呢,先要安装一些,我们必须依赖的这些包,好,我们把这个这个命令复制来,在这粘贴,走,我们来等待它安装完成,好,稍等呢我们这个就安装成功了。

$ sudo yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2

    接下来呢,我们接下来进行第二步,我们要告诉Linux,我们docker去哪里装,docker的这些地址,所以呢,我们接下来用这个命令。

$ sudo yum-config-manager \
    --add-repo \
    https://downlo ad.docker.com/linux/centos/docker-ce.repo

    好,我们来粘贴,这个命令呢。运行的非常快,好,粘贴完了以后呢,接下来我们想要安装docker,下来的步骤呢,Optional 这是可选的,我们就不用做了,接下来想要安装docker,运行sudo yum install ,我们安装docker的ce,docker的引擎,以及docker,操作docker的客户端,以及他的这个容器,好,复制。

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

回车
    好,我们来稍等,安装完成,我们一路确认就行了。好,到这呢,我们的docker就安装完成了。
    当然,这个docker刚安装完,还没有启动,我们可以启动docker,如何启动呢,我们继续往下走,Start Docker,我们使用sudo systemctl start docker来启动docker服务。

$ sudo systemctl start docker

    好,复制,粘贴过来,回车,那docker呢就启动起来了,docker启动起来呢,我们可以检查一下,比如先docker -v。
【docker -v】
    我们先看一下docker的版本。
    再使用docker的命令,比如docker images。
【docker images】
而且这个命令呢,现在是权限不足,我们使用超级管理员。好,sudo docker images
【sudo docker images】
    好,现在呢,我们这个命令就是来检查,我们当前,虚拟机里边,到底有没有下载哪些镜像,这一块呢整个是个空列表。
    好,接下来呢,我们再来给docker设置开机自启动,因为这个docker呢,默认装好以后,不是开机自启的,每一次呢,Linux启动起来以后,大家都需要重新运行一遍,sudo systemctl start docker。很麻烦,所以呢,我们让他开机自启,怎么开机自启呢,很简单,只需要sudo systemctl,我们呢,以前是start,这是启动docker服务,我们接下来呢,给他enable,启用docker,这个启用呢,就是启用它的开机自启。
【sudo systemctl enable docker】
好,这样呢,以后docker就开机自启了,只要linux虚拟机一启动,他自动启动,不用我们再来运行这个命令,那至此呢,我们docker整个就安装完成了,我们再来检查一下,docker的这些命令,好docker images。
【sudo docker images】
    好,检查一下,我们现在没有任何镜像。

09、环境-配置docker阿里云镜像加速

好,接下来呢,我们再来为docker,配置上镜像加速,因为呢,咱们这个docker默认要下载镜像,他是从多Docker Hub里边来下载的,而Docker Hub呢,我们刚才看了,这是一个国外的网站,我们想要下载Redis之类的,从这来下载是比较慢的,那我们可以配置一个国内的镜像加速,那以后docker想在这,下载这些镜像,那就非常快了,那这个镜像加速呢,我们推荐大家使用的是阿里云,那阿里云呢,我们先进入到阿里云的官方网站,我们需要首先来登录,登录呢,我们需要进行支付宝扫码登录,如果大家没有登录过阿里云,第一次扫码登录会进行一些绑定流程,好,我们来稍等他登录成功,进入到阿里云以后呢,我们来到,阿里云的控制台,在控制台里边呢,来找到,左侧菜单,我们来找产品与服务,里边呢有容器镜像服务,来点近来,在容器镜像服务里边呢,有一个叫镜像加速器,好,我们点进来,在这个镜像加速器里面,我们来找CentOS,我们使用的是他,然后呢,依照这些命令,执行完,我们就可以拥有镜像加速功能,好,首先呢,我们第一条命令。
【sudo mkdir -p /etc/docker】
    好,sudo mkdir,创建一些目录,好,我们直接粘贴运行,走。
    接下来第二条命令,sudo,注意,从这开始到EOF结束,

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors":["https://82m9ar63.mirror.aliyuncs.com"]
}
EOF

在这配置镜像加速器地址,好,我们来复制,直接粘贴,回车。
    接下来第三条命令,我们来重启咱们这docker的伴随线程。
【sudo systemctl daemon-reload】
    好,启动docker的,重启docker的后台限制。
    我们再来重启docker的服务。
【sudo systemctl restart docker】
    好,那这做完了,我们docker就拥有了镜像加速功能,以后呢,docker hub里边,收到的所有软件,我们想要下载,那他都是通过阿里云镜像,加速,给我们进行下载。就不会访问的特别慢了。

10、环境-docker安装mysql

好,那接下来呢,我们就使用docker安装上我们后来开发要用的MySQL,以及Redis环境,首先呢,我们连接上虚拟机,那虚拟机呢我上次关机,现在已经停止了,我们把它开机,启动,我们用无界面方式启动,好,虚拟机呢,在后台慢慢启动,等他启动成功以后呢,我们快速的,可以使用vagrant ssh,就能连上虚拟机。我们来稍等一下。
【vagrant ssh】——【[vafrant@10~]$】
    这块呢大概看到虚拟机正在启动的过程。
    好,我们现在呢,去来连接上虚拟机,那连接上虚拟机以后呢,我们想要用docker的方式安装软件,那么它的步骤呢,我们先是让docker去镜像仓库里边下载这个软件的镜像,那我们想要安装MySQL我们就来镜像仓库,我们来搜索一下MySQL, MySQL呢这有官方镜像official,这都是官方镜像,来 点进来,所以呢,我们就可以下载这个镜像就行了,那个下载这个镜像呢,其实用一个非常快的命令,我们叫docker pull,那docker pull呢,就是docker从镜像仓库里边帮我们来下载,下载谁呢,如果我们来写MySQL,它会下载最新的MySQL,因为每一个镜像呢,我们来看这有个叫TAGS,叫标签,每个镜像的后边,比如latest这就是他的标签,8.0.17这是啥 它的标签,如果我们想要下载指定版本的,比如我们下5.7的MySQL,那我们就需要这样写,MySQL:5.7,那我们呢就已5.7的MYSQL为例,先来下载MySQL的镜像。
【docker pull mysql:5.7】
    当然我们现在呢,必须使用sudo的方式,docker pull mysql:5.7。
【sudo docker pull mysql:5.7】
    好,我们让它进行来下载,好,我们这个镜像呢,就下载完成了,我们可以检查一下,我们当前下载镜像使用sudo docker images命令来检查当前所有的镜像。
【sudo docker images】

我们下载了一个镜像叫MySQL,他的版本呢是5.7,包括当前镜像的ID,有了这个镜像以后呢,我们就可以直接让我们的docker,按照我们这个MySQL镜像,帮我们启动一个MySQL容器,只要呢启动一个容器呢,我给大家的文档里边,有这么一条命令,叫docker run, docker启动一个容器 -p 3306:3306。

docker run -p 3306:3306 --name mysql\
-v /mydata/mysql/log:/var/log/mysql\
-v /mydata/mysql/data:/var/lib/mysql\
-v /mydata/mysql/conf:/etc/mysql\
-e MTSQL_ROOT_PASSWORD=root\
-d mtsql:5.7

    这个呢,叫端口映射,是将我们容器的3306端口,映射到主机的3306端口,当然,我们一会会详细解释这个。
    那么--name,是为我们当前启动的这个容器,取一个名,比如我们叫MySQL、 MySQL01等等都行, 然后呢-v这一堆,就是目录挂载,我们一会儿解释,-e呢就是在启动容器的时候呢,给我们MySQL设置一些参数,设置什么参数呢,首先调整MySQL的root的密码,默认呢MySQL是使用root账户,密码是什么呢,我们在这一块我们自己写上root,那以后就拿root root就能访问MySQL了,接下来这一块重要的,-d,-d呢,就是以后台方式运行,这一块的MySQL5.7,指的是呢,我们是用哪个镜像启动的这个容器,因为我们之前呢有一个镜像,我们下载来的这个镜像,是,MySQL他的这个标签呢是5.73,相当于使用这个镜像来启动的容器,中间的这些斜杠呢,那都是换行标志,好,我们可以直接把这个命令粘贴去运行,但这个命令的目前不是root用户,也需要root用户的权限, 那每次sudo太麻烦,我们可以直接切换到root用户,su root。
【su root】
    那接下来呢,写root用户的密码,因为我们这个vagrant创建的这个虚拟机,默认的root用户的密码, 也叫vagrant,我们就直接来输vagrant。回车,好,我们现在呢看一下。whoani。
【whoam i】
    我们现在呢,切换到root用户,那可以直接把这个命令拿来运行,我们来复制过来,给这呢进行粘贴。
【docker run -p 3306:3306 --name mysql\
-v /mydata/mysql/log:/var/log/mysql\
-v /mydata/mysql/data:/var/lib/mysql\
-v /mydata/mysql/conf:/etc/mysql\
-e MTSQL_ROOT_PASSWORD=root\
-d mtsql:5.7】
    粘贴以后呢,我们来准备好,回车,我们看到呢,这有一串,很长串的标志,那说明我们这个容器,就启动起来了,也就是呢,我们的MySQL就装好了,怎么看他装好了呢,我们可以使用命令叫docker ps,查看我们docker现在正在运行中的容器。
【docker ps】
    我们现在呢,这看到,我们把这个放大,重新来查一下,我们现在呢看到CONTAINER ID 这是一个唯一的ID,然后IMAGE,我们是使用这个镜像启动的,启动时用的命令,什么时候创建的等等,这还有一个叫PORTS,端口号,3306映射到3306,包括这个NAMES名叫MySQL,相当我们就启动了一个MySQL,只要别人呢,去来连3306,就能访问我们的MySQL了,大家可以呢拿自己的MySQL客户端连接工具,来测试连。
    那我来启动我的SQLyog,这是我们连MySQL的客户端,由于我们呢,这个虚拟机的地址是56.10,所以我写成56.10,我呢直接用root, root 3306我来连我们刚才启动的MySQL,看行不行,我点一个测试连接,诶,我们发现呢Connection successful!,MySQL呢就装好了,是不是很快。
    当然,我们解释一下,这些命令是什么意思,打开我们给大家发的这个PPT图,我们可以看到下面,这有一个docker的容器文件挂载,与咱们这个端口映射,我们刚才呢就是使用这个命令,启动起来的MySQL容器。
    首先呢来说一点,每docker,run一下那我们就会启动一个容器,而且我们之前说过docker的概念,容器跟容器之间互相隔离的,而且每一个容器都是一个完整的运行环境,相当于我们刚才启动的这个MySQL容器,来看一下docker ps。
【docker ps】
    我们启动的这个MySQL容器,它是一个MySQL完整的运行环境,怎么体现它完整呢,因为MySQL是装在Linux里边,所以这个容器呢,其实就是一个完整的Linux。
    我们可以验证一下,我们可以进到我们这个MySQL容器内部,怎么进呢,使用这个命令docker exec -it已交互模式。我们进哪个容器呢,我们可以写容器的ID,欸,我们写前几位,前三位都行,只要能跟别人表示出不一样就行,我们写容器的ID,或者呢,写容器的名字,MySQL,这个呢,names,这个表格对应这MySQL容器的名字,这都行,我们想要进入这个容器,然后呢,我们进入他的bin/bash,欸,我们进入他的linux的bash,控制台,
【docker exec -it mysql /bin/bash】
    好,相当于呢,我们现在看来这一块呢root  @2009870e21c3,我们相当于呢,以root用户访问到了我们这个容器内部,而不是我们这个虚拟机,我们虚拟机是vagrant,好,现在呢我们进入到,相当于MySQL容器内部,我们给他ls /看一下。
【ls /】
    我们列举一下整个目录结构,我们会发现呢,这个目录结构其实就是一个完整的Linux目录结构,我们的MySQL相当于就被装在了这个Linux里边,相当于呢,我们有一个小小的Linux,MySQL容器就是一个Linux,被装到了这里边,那我们可以看一下他装在哪里了呢,我们使用这个命令,whereis mysql。
【whereis mysql】
    好,我们能检查到跟mysql相关的目录,都在这,相当于呢,我们验证了一下,我们mysql容器确实是一个完整linux,那知道这个以后呢,我们接下来说一句话。
    首先呢MySQL装到了MySQL容器里边, 那MySQL默认就会有一个端口,MySQL叫3306,但是呢,这个端口相当于是在在这个容器内部用的端口,如果我们想要访问MySQL呢,我们需要把3306映射到我们的Linux里边,所以我们这一句 -p 3306:3306意思就是,我们Linux的3306端口,跟我们docker容器内部的3306端口,一一对应,相当于访问Linux 3306,那就能访问到我们这个容器内部,装的MySQL的这个端口了,好,那我们-p,就是端口映射就做完了。
    接下来呢,我们再来看, --name,这都是给当前容器取一个名,叫MySQL,我们之前一直看我们的这个容器的名字,来,往上翻, docker ps看这个容器的名字叫mysql,没问题,这个呢。
    接下来我们来看,主要这一块-v,这些-v呢都叫目录挂载,目录挂载是什么呢,首先我们知道,我们的MySQL是被装在这个容器内部的,whereis  MySQL在我们2009870e21c3这个容器内部,我们装了MySQL,那MySQL的配置文件呢,是在etc/mysql下,相当于呢,我们容器内部的etc/mysql下都是跟mysql有关的一些配置文件等等,包括呢,我们容器的,var目录下的log下有我们mysql相关的日志,我们也可以看一下。
    cd到我们的当前容器内部的var目录里边的log目录。
【cd /var/log】
【ls】
    ls,来看一下这专门有一个MySQL。
【cd mysql/】
【ls】
    然后呢 MySQL里边呢,最终所有日志,都会被记在这个MySQL文件夹下,相当于呢,我们装好的MySQL都在这个容器内部,有对应的文件夹,但是呢,为了方便修改,比如我们想要修改MySQL的配置,难道每次都要进到容器内部,etc/mysql下边我们来改mysql配置吗,太麻烦了,所以呢,我们希望,将容器内部的这些,我们经常要看的,这些文件夹包括一些内容,我们映射到Linux的目录里边。
    所以说呢,我们现在呢,这个-v命令就是这个样子,-v呢,mydata/mysql/log:的意思就是,在我Linux目录下,创建一个mydata文件夹下的mysql的log文件夹,这个文件夹呢,冒号,冒号就是与容器内部的var/log/mysql文件夹,进行挂载,所谓的挂载,就是容器内部我们MySQL运行,只要给文件夹里面产生了日志,那我们Linux外边,就能看到这个日志,这个呢,相当于就是一个,嗯,我们之前做的快捷方式一样,诶,相当于把我们容器内部的MySQL这个文件夹,快捷方式放到我们Linux外部的这个位置,那相当于我们只需要在Linux外部的这个文件夹就能实时的观察到MySQL容器内部我们感兴趣的文件夹里面的内容。
    所以呢,我挂载了三个文件夹,第一个把我们MySQL容器内部,MySQL这个日志文件挂载到Linux虚拟机的外边,创建了快捷方式,以后我们看日志,在我们这个目录下看。
    我还挂在了一个叫etc/mysql,相当于把我们 MySQL容器里边我们装的这个,MySQL的相关的一些配置信息,欸,我们挂载到我们外部的mydata/mysql/conf:目录下,相当于我们如果以后想改MySQL的配置,只需要到Linux,进Linux这个虚拟机里边,我们来到这个目录下,找我们MySQL配置,改了,那我们容器里边也就跟着改了,因为这两个文件夹是挂载的,建起超链接的。
    好,接下来呢,我还挂载了一个目录,叫var/lib/mysql,相当于呢, 把我们MySQL运行期间的一些数据,MySQL数据库,啊,他要持久化,保存的这些数据、文件呢,我都挂载到外部mysql/data:,相当于呢,我们先要备份MySQL数据库的这些文件等等等等,我们直接去来,我们Linux的外部的MySQL下的data文件夹,就能看到我们整个MySQL运行期间的这些数据。
    好,接下来这个-e呢我们就不说了,这是改变我们MySQL的一些参数等等等等。
    主要呢,我们就来看一下我们这个端口映射,文件挂载,包括呢这两种方式在我们以后启动任何容器的时候,包括我们要启动Redis等等等等,我们都要常用,我们把容器里边装的Redis这个端口,我们映射到我们外边,映射到外边我们虚拟机能进行访问的,包括呢我们redis的一些配置文件,我们也挂载到外边,我们一改Linux,Redis也就改了,这样就方便,所以呢,我们来看一下我们最终运行的效果,刚才呢,进入到了这个容器内部,我们现在退出容器。
【exit;】
    我们现在来到我们这个Linux虚拟机,我们是[root@10 vagrant]#,
    好,我们刚才在目录挂载的时候呢,我们创建了mydata文件夹mysql/log等等,那我们现在来看一下有没有。我们cd到mydata文件夹。
【[root@10 vafrant]# cd /mydata/】
【ls】
    欸,我们发现了这里边有MySQL。
    包括呢,MySQL里边有我们三个目录。
【[root@10 mydata]# cd mysql/】
【ls】
    那以后呢,我们MySQL容器内部,有什么变化,我们在这一块都能反映到,包括呢,我们修改我们外部的,比如我们修改配置。
【[root@10 mysql]# cd conf/】
【ls】
    配置文件呢,这个文件夹,比如里边呢,有一个配置文件,我们在这修改了以后呢,我们容器内部,也会有变化。
    好,那正好呢,我们就在这修改一下MySQL的配置文件,那这个配置文件呢,我们主要把MySQL的这个字符编码,我们来改一下,因为MySQL默认是拉丁的,那我们现在都改成utf8,那怎么修改呢。

[client]
dafault-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

    这一块都是MySQL配置文件里边的内容,大家复制来,我们呢,只需要用一个命令vi,我们来,在我们的外部挂载的目录,mydata/mysql/conf/my.cnf,来修改这个文件,把内容复制进去,当然我们现在conf目录里边,现在还没有任何文件,我们vi my.cnf。
【[root@10 conf]# vi my.cnf】
    好,然后呢,敲i,然后进入这个插入模式,然后我们把这个粘贴过来,那这一块呢主要就是我们MySQL的字符编码,那修改完以后呢,wq退出,我们需要重启一下MySQL容器,才能应用到配置,怎么重启呢我们先来看docker ps。
【docker ps】
    这是我们正在运行中的MySQL,想要重启呢,我们可以用docker restart。让docker帮我们来重启一个谁呢,MySQL,回车。
【docker restart mysql】
    好,那稍等呢,我们MySQL就重启起来了,包括呢MySQL也会用到我们指定的配置,我们这个配置呢,也会映射到容器内部,当然我们可以看一下,docker exec -it,我们以交互模式,进入到MySQL的bin/bash操作台。
【docker exec -it mysql /bin/bash】
    好,进来以后呢,我们接下来看一下,因为我们MySQL的配置文件,我们是映射到这的,来看一下,我们是把MySQL,容器内部的etc/mysql/conf,是关联的,所以我们只需要看容器内部的cd 进到,etc/mysql里边。
【cd /etc/mysql/】
【ls】
    ls,我们会发现,诶,这有个my.cnf,我们直接cat my.cnf。
【cat my.cnf】
    好,我们能看到呢,我们这个conf里边的内容,跟我们当时是,改的是一模一样的,那至此呢我们这个MySQL配置文件修改也就结束了,我们整个mysql就可以使用了。
【exit;】

2.谷粒商城6-10文字版相关推荐

  1. 2022谷粒商城学习笔记(二十二)rabbitMQ学习

    前言 本系列博客基于B站谷粒商城,只作为本人学习总结使用.这里我会比较注重业务逻辑的编写和相关配置的流程.有问题可以评论或者联系我互相交流.原视频地址谷粒商城雷丰阳版.本人git仓库地址Draknes ...

  2. 2022谷粒商城学习笔记(二十三)分布式事务

    前言 本系列博客基于B站谷粒商城,只作为本人学习总结使用.这里我会比较注重业务逻辑的编写和相关配置的流程.有问题可以评论或者联系我互相交流.原视频地址谷粒商城雷丰阳版.本人git仓库地址Draknes ...

  3. 1.谷粒商城1-5文字版

    01.简介-项目介绍 我这个架构图呢 我先快速的给大家过一遍 大家知道将会学到什么就行了 ,那我们后来呢会有详细的去来介绍, 首先呢,我们除了常规的业务开发 , 比如我们开发后台管理系统也好,开发其他 ...

  4. 谷粒商城分布式基础篇1-个人版

    基础篇 1 项目简介 1.1 项目背景 1.2 电商模式 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O 1.2.1 B2B 模式 B2B(Business to Business ...

  5. M5(项目)-01-尚硅谷谷粒商城项目分布式基础篇开发文档

    M5(项目)-01-尚硅谷谷粒商城项目分布式基础篇开发文档 分布式基础篇 一.环境搭建 各种开发软件的安装 虚拟机: docker,mysql,redis 主机: Maven, idea(后端),Vs ...

  6. 谷粒商城-分布式高级篇[商城业务-检索服务]

    谷粒商城-分布式基础篇[环境准备] 谷粒商城-分布式基础[业务编写] 谷粒商城-分布式高级篇[业务编写]持续更新 谷粒商城-分布式高级篇-ElasticSearch 谷粒商城-分布式高级篇-分布式锁与 ...

  7. 谷粒商城开发踩坑及部分知识点大总结

    谷粒商城开发BUG踩坑及部分知识点大总结 基本上bug的出现位置和时间线都能够匹配 如果对你有帮助的话就点个赞哈 2022.6.28 github设置ssh免密登陆,以下代码在git bash上面输入 ...

  8. 【谷粒商城】ElasticSearch、上架与检索

    笔记-基础篇-1(P1-P28):https://blog.csdn.net/hancoder/article/details/106922139 笔记-基础篇-2(P28-P100):https:/ ...

  9. 分布式项目-谷粒商城。

    分布式项目 一,分布图 二,环境搭建 1.安装linux 2.安装docker 1 卸载系统之前的docker sudo yum remove docker \docker-client \docke ...

  10. Day442443444445446447448.K8s -谷粒商城

    K8s 分布式编排管理集群的系统 一.K8s快速入门 1.简介 kubernetes简称k8s.是用于自动部署,扩展和管理容器化应用程序的开源系统. 中文官网:https://kubernetes.i ...

最新文章

  1. 【BZOJ】4430: [Nwerc2015]Guessing Camels赌骆驼
  2. A/B测试:概念 ≠ 执行
  3. 代码分析 公用类库
  4. RMSE均方根误差学习笔记
  5. php xdebug安装配置与调试php技巧
  6. cocoapods的安装(这真是一个神奇的东西,每次安装的方法都不一样,而且很容易出现各种各样的错误)...
  7. java setr()_Java RPr.setRFonts方法代码示例
  8. 第三天,编码设置,主键设置与删除,无关子查询,相关子查询,表与表之间的关系...
  9. linux 读写权限
  10. OpenCV-图像NaN处理
  11. 再谈new functionName
  12. JavaScript 高级程序设计 笔记
  13. windows服务获取登录用户名
  14. 专题开发十三:JEECG微云高速开发平台-附录
  15. 【秀米教程5】点击动作
  16. 印章仿制工具_PS仿制图章工具怎么使用?仿制图章工具使用方法图解
  17. Window10 磁盘如何分区(压缩卷操作)
  18. 400+考研 北京航空航天大学6系计算机学院961计算机专业技术基础资料合辑
  19. 周志华《机器学习》习题1.2
  20. 移动端h5图片下载-前端小白初长成

热门文章

  1. 郑轻OJ:1153: 简易版最长序列
  2. EPT和VPID简介
  3. 计算机支架式教学案例,万紫千红总是春--支架式教学(网友来稿)
  4. css3 3d 过 锯齿,css3 3d旋转 出现锯齿_html/css_WEB-ITnose
  5. ActiveMQ源码解析(三)Failover机制
  6. 全面理解面向对象的 JavaScript
  7. SpringCloud Alibaba微服务实战一 基础环境准备
  8. Oracle锁机制深度分析
  9. SSH-keygen linux教程
  10. Ubuntu ssh-keygen远程登录