简介
相信很多小伙伴都或多或少听过或者用过Docker,这里先做一下简单科普:
Docker是一个装有各种应用程序的容器,我们在Docker中运行的程序称为镜像(Images),镜像在拉取后就可以直接运行了,省去了我们配置各种环境的麻烦,同时开发好的项目可以直接封装成镜像,在任何一台装有Docker的机器上运行,十分方便~
Docker里面可以运行的程序很多,包括Java等各种语言写的项目、数据库、Redis缓存、消息队列等,还可以运行Ubantu、Centos等操作系统。接下来的教程就是如何通过Docker拉取镜像,运行多个服务器,并且部署成分布式节点。
开发环境
腾讯云学生机 1核2G Centos7
Docker的使用
首先安装docker,安装命令
yum install docker
安装好之后如图所示
首先我们需要拉取镜像,可以选择使用ubuntu或者Centos,因为大多数服务器都采用Centos作为更稳定的操作系统,所以这里采用Centos演示。
首先查看可用的Centos版本,执行命令
或者直接访问镜像库
Docker Hubhub.docker.com
可以看到各种镜像,并且按照Stars数从高到低排序
接下来拉取指定版本的镜像,这里以安装Centos7为例,冒号后面称为Tag,同一仓库源可以有多个 Tag,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
查看下载的镜像
由于一个Docker中只能存在一个版本的镜像,我们要实现多节点服务器的话必须同时启动多个容器,因此我们可以再使用相同的方法下载一个Centos8和一个ubuntu镜像。
这样我们需要的三个节点容器就已经准备好了,下一步就是分别进入三个容器做一些网络配置和环境安装。
分布式节点的配置
运行命令进入Centos7容器
docker run -itd --name centos-test centos:centos7
- -i 交互式操作
- -t 终端
- -d 默认不进入容器,进入需要使用docker exec
这条指令的意思是,以centos-first的名字启动,之后在docker中的名字就为centos-first。启动的镜像名为centos,tag名为centos7,终端交互式操作,并且启动后立刻进入终端。可以看到我们已经进入了容器的bash中。
首先测试一下容器的网络状态,ping一下度娘,发现网络是连通的,同理跟宿主机也是连通的。
退出容器
查看容器的信息
可以看到容器的ip地址。
Docker在启动时会得到一个ip地址,然而容器在每次启动时,会由Docker分配一个ip地址,并且按启动顺序递增。这就导致了容器的ip地址可能会发生变化,我们希望做的服务器集群最好是固定的ip地址,否则每次启动都要重新配置。
Docker可以在容器启动时选择网络模式,默认的有3种模式
bridge:桥接网络
默认情况下启动的Docker容器,都是使用 bridge,Docker安装时创建的桥接网络,每次Docker容器重启时,会按照顺序获取对应的IP地址,这个就导致重启下,Docker的IP地址就变了
none:无指定网络
使用 --network=none ,docker 容器就不会分配局域网的IP
host: 主机网络
使用 --network=host,此时,Docker 容器的网络会附属在主机上,两者是互通的。
例如,在容器中运行一个Web服务,监听8080端口,则主机的8080端口就会自动映射到容器中。
除了以上三种系统默认的网络类型,我们还可以自定义网络类型,同样可以使用--network参数启动,从而达到指定ip地址的目的。但是默认的网络类型不支持指定ip地址,所以我们必须自定义网络类型。
首先,创建自定义网络mybridge,子网地址为172.30.0.0/16
以固定地址172.30.0.2启动centos容器
可以看到容器的ip地址固定成功了
最后,以同样的方法启动另外两个节点,分别固定ip为172.30.0.3和172.30.0.4
至此,分布式节点的准备工作已经就绪了,我们启动了3台Linux容器,分别固定了IP地址。
centos-first 172.30.0.2 centos-second 172.30.0.3 ubuntu 172.30.0.4