简单Docker集群搭建

Posted by gjx on 2020-01-02 00:00:00

安装CentOs7

操作系统安装略过,百度有很多教程。

安装docker

官网:https://www.docker.com/

在该选项中有几种不同的安装方法,可根据自己需要进行安装,我这里常用的安装方式是下面这个:

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh

启动docker registry

新建目录:mkdir /home/registry

docker run -d -p 5000:5000 -v /home/registry:/var/lib/registry -u 0 --restart=always --name registry registry

在/etc/hosts中添加dns解析记录

10.83.3.120  s01.ycrh.jsyt
10.83.3.121  s02.ycrh.jsyt
10.83.3.123  s03.ycrh.jsyt

添加/etc/docker/daemon.json文件

{
        "insecure-registries": ["s01.ycrh.jsyt:5000","10.83.3.120:5000"]
}

重启docker服务

service docker restart

Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。
docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile。
例:

docker build -f /path/to/a/Dockerfile

下面是一个Dockerfile的例子

# This my first nginx Dockerfile
# Version 1.0
# Base images 基础镜像
FROM centos
#MAINTAINER 维护者信息
MAINTAINER tianfeiyu 
#ENV 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH
#ADD  文件放在当前目录下,拷过去会自动解压
ADD nginx-1.8.0.tar.gz /usr/local/  
ADD epel-release-latest-7.noarch.rpm /usr/local/  

#RUN 执行以下命令 
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
RUN useradd -s /sbin/nologin -M www
#WORKDIR 相当于cd
WORKDIR /usr/local/nginx-1.8.0 
RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
RUN echo "daemon off;" >> /etc/nginx.conf
#EXPOSE 映射端口
EXPOSE 80
#CMD 运行以下命令
CMD ["nginx"]

配置docker代理

因为部分网络环境下是无法访问外网下载镜像的,所以需要配置代理进行镜像的下载

vi /lib/systemd/system/docker.service

在 Service 部分下 增加 Environment 变量,配置成你自己的代理地址,如下

[Service]
Environment="HTTP_PROXY=http://[proxy-addr]:[proxy-port]/" "HTTPS_PROXY=https://[proxy-addr]:[proxy-port]/"
重启 docker

启动portainer

Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。

docker volume create portainer_data 
docker run -d -p 8000:8000 -p 9000:9000 --restart=always v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

启动完成后就可以通过http://10.83.3.120:9000/进行访问了

建立docker swarm集群

[root@manager-node ~]# docker swarm init --advertise-addr 10.83.3.120
Swarm initialized: current node (39efft8yudtdpwmnenxewlt4r) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-5mci820jcs7dard6jrp19gjduj562kimptqmbfgd6omurkxa36-92jgt38tfowrsmo1wdzojtnde \
    10.83.3.120:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

[root@manager-node ~]

在其他主机上执行上面打印的命令

docker swarm join \
    --token SWMTKN-1-5mci820jcs7dard6jrp19gjduj562kimptqmbfgd6omurkxa36-92jgt38tfowrsmo1wdzojtnde \
    10.83.3.120:2377

即可加入到该集群,此处需要注意防火墙的配置。

查看当前集群节点信息

docker node ls

创建集群服务

此处编写可查阅docker-compose相关内容。

此处创建完成后就可在service界面看到bfis-server服务,

该界面显示了服务新建的服务共设置了三个实例并且都在正常运行,当其中一台实例挂掉后,swarm集群会自动在可用资源中重启实例,使应用服务始终保持指定数量运行和负载。

version: '3.7'
services:
    bfis-server:
        image: s01.ycrh.jsyt:5000/bfis-app-dev:20191104112514
        networks:
           - ycrh-network
        deploy:
             replicas: 3
        ports:
            - 8080:8080
networks:
  ycrh-network:
    external:
      name: ycrh-network

此处是用docker-compse创建服务,下面列举用命令行创建docker服务

创建网络

docker network create --driver overlay test

创建服务

docker service create --replicas 3 --network test  -p xx:xx --name 服务名 镜像名

新增副本,根据你服务器的压力进行伸缩

docker service scale 服务名称=3

其余命令根据下面提示使用:

docker swarm默认采用的是 vip 负载均衡模式,vip模式,就是docker swarm为每一个启动的service分配一个vip,并在DNS中将service name解析为该vip,发往该vip的请求将被自动分发到service下面的诸多active task上(down掉的task将被自动从vip均衡列表中删除)。