收藏文章 楼主

云开发服务手册

版块:docker   类型:普通   作者:小绿叶技术博客   查看:1126   回复:0   获赞:0   时间:2020-09-01 10:08:24


修订版本 修订时间 修订说明

Cloud-paas-v1.2 2014年3月7日 云计算开发服务平台用户手册

Cloud-paas-v1.3 2015年11月8日 新增框架说明,增加框架结构图

Cloud-paas-v1.3.1 2016年1月18日 修订GRE网络下的PaaS平台搭建

Cloud-paas-v1.4 2016年4月12日 软件包修改mongodb和ActiveMQ安装脚本

Cloud-paas-v2.0 2016年12月15日 升级Docker作为服务平台底层

Cloud-paas-v2.1 2017年4月21日 Jenkins结合gogs实现持续化集成

Cloud-paas-v2.2 2018年2月5日 Docker升级、Rancher升级、RancherHA、新增数据卷、网络、监控、负载均衡案例




目  录

1、环境说明 5

1.1、系统简介 5

1.1.1、Docker简介 5

1.1.2、Docker平台组成 6

1.2、设备说明 8

1.2.1、软件版本说明 8

1.2.2、网络说明 8

1.2.3、基础环境配置 9

2、服务安装 12

2.1、安装Docker服务 12

2.2、部署Docker 仓库 12

2.2.1、上传仓库部署使用的镜像。 12

2.2.2、启动仓库容器服务 12

2.2.3、设置仓库地址 13

2.3、部署Rancher-Server服务 13

2.3.1、上传rancher-server镜像 13

2.3.2、启动rancher-server服务 14

2.3.3、通过网页访问,查看效果 15

2.3.4、设置Rancher服务对接的仓库地址。 15

3、应用模板部署 19

3.1、Gogs应用部署 19

3.2、Elasticsearch 2.x应用部署 21

3.3、Prometheus应用部署 22

4、Rancher-Server的HA部署 26

4.1、Server1节点部署Rancher-Server 26

4.2、Server2节点部署Rancher-Server服务 30

4.3、配置HA管理 31

4.4、添加client节点 32

5、容器数据卷共享 34

5.1、容器与主机之间映射共享卷 34

5.2、三个容器之间使用共享卷 34

6、自定义docker0网络 35

6.1、移除原有docker0网络 35

6.2、自定义新网络 36

6.3、使用新网络部署应用 37

7、Dockerfile构建容器镜像 37

7.1、上传资源到系统 37

7.2、编写Dockerfile文件 38

7.3、构建镜像 38

7.4、查询镜像 39

7.5、启动镜像 39

7.6、网页访问10.0.3.139:32770查看效果 40

7.7、进入容器获取登录密码再登录。 40

8、Docker容器实现Nginx的负载均衡 41

8.1、上传实验镜像 41

8.2、在宿主机创建发布目录 41

8.3、创建Tomcat1容器 42

8.4、创建Tomcat2容器 42

8.5、创建nginx容器 43

8.6、负载均衡配置 44

8.7、查看实现效果 46




1、环境说明

1.1、系统简介

1.1.1、Docker简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

一个完整的Docker有以下几个部分组成:

1)dockerClient客户端

2)Docker Daemon守护进程

3)Docker Image镜像

4)DockerContainer容器

Docker引擎Docker Engine是C/S架构,主要有以下部件组成:

服务器(Docker daemon):后台运行的Docker daemon进程。Daemon进程用于管理Docker对象,包括镜像(images)、容器(containers)、网络(networks)、数据卷(data volumes)。

REST接口:同daemon交互的REST API接口。

客户端(Docker client):命令行(CLI)交互客户端。客户端使用REST API接口同Docker daemon进行访问。Docker服务的架构图如图1-1所示。


图1-1 Docker服务的架构图

1.1.2、Docker平台组成


图1-2 Docker服务组成图

运行一个Docker服务,组成包括Docker daemon服务器、Docker Client客户端、Docker Image镜像、Docker Registry库、Docker Contrainer容器,如图1-2所示。

(1)Docker镜像:

是一个只读模板,用于创建Docker容器,由Dockerfile文本描述镜像的内容。镜像定义类似“面对对象的类”,从一个基础镜像(Base Image)开始。构建一个镜像实际就是安装、配置和运行的过程,Docker镜像基于UnionFS把以上过程进行分层(Layer)存储,这样更新镜像可以只更新变化的层。Docker的描述文件为Dockerfile,Dockerfile是一个文本文件,基本指令包括:

FROM:定义基础镜像。

MAINTAINER :作者或维护者。

RUN:运行linux 命令。

ADD:增加文件或目录。

EVN:定义环境变量。

CMD:运行进程。

(2)Docker容器:

是一个镜像的运行实例。容器有镜像创建,运行过程例如:

运行ubuntu操作系统镜像,-I 前台交互模型,运行命令为/bin/bash

$ docker run -i -t ubuntu /bin/bash

拉(pull)镜像,Docker Engine 检查ubuntu  镜像是否存在,如果本地已经存在,使用该镜像创建容器,如果不存在,Docker Engine从镜像库拉镜像。

使用该镜像创建新容器。

分配文件系统,挂载一个读写层,在读写从加载镜像。

分配网络/网桥接口,创建一个网络接口,让容器和主机通信。

从可用的IP池选择IP地址,分配给容器。

执行命令/bin/bash。

捕获和提供执行结果。

(3)Docker 仓库:

Docker仓库是Docker镜像库。Docker Registry也是一个容器。Docker Hub是Docker公司提供的互联网公共镜像仓库。可以构建自己本地的镜像仓库,国内有些公司也构建了镜像仓库。包括阿里云、新浪等。Docker 集群服务:Docker集群服务运行承租的Docker节点一起工作。目前支持swarm模式。

一个 Docker Registry 节点中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

一般而言,一个仓库包含的是同一个软件的不同版本的镜像,而标签则用于对应于软件的的不同版本。可以通过 <仓库名>:<标签> 的格式来指定具体是哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

以 Ubuntu 镜像 为例,ubuntu 是仓库的名字,其内包含有不同的版本标签,如,14.04, 16.04。可以通过 ubuntu:14.04,或者 ubuntu:16.04 来具体指定所需哪个版本的镜像。如果忽略了标签,比如ubuntu,那将视为 ubuntu:latest。


1.2、设备说明

1.2.1、软件版本说明

安装运行环境系统要求为Centos7, 内核版本不低于3.10

Docker版本不低于1.12.6

Rancher-Server版本1.6.5

1.2.2、网络说明

安装PaaS的VM的网络IP采用IaaS的外部IP,IP设置成静态IP。网络架构如下:

节点角色 主机名 内存 硬盘 Ip

仓库节点 server 4G 40G 10.0.3.137

Server节点 server 4G 40G 10.0.3.137

Client client 4G 40G 10.0.3.138

设备名:

1)Server节点

主要作为系统的运行指令的发送节点

server:10.0.3.137

2)Client节点

主要为服务运行的节点,可以使用一个或者多个均可

client:10.0.3.138

3)Registry节点

主要作为系统所有的运行的镜像仓库节点

registry:10.0.3.137

1.2.3、基础环境配置

本次实验环境采用server+client两个节点部署,client节点可以根据需求自主扩展。下面的基础环境1-4步骤在两个节点均要设置,不能遗漏。

1.关闭selinux

# vi /etc/sysconfig/selinux

SELINUX=disabled

# getenforce

Disabled

2.关闭防火墙

# systemctl stop firewalld.service

3.删除iptables防火墙规则

# iptables –F

# iptables –X

# iptables –Z

# /usr/sbin/iptables-save

4.修改系统内核

打开内核转发功能。

编辑配置文件/etc/sysctl.conf,将以下内容添加:

net.ipv4.ip_forward = 1

net.ipv4.conf.default.rp_filter = 0

net.ipv4.conf.all.rp_filter = 0

修改完成后使用命令生效。

# sysctl –p

5.修改主机名、配置域名解析

server节点:

#hostnamectl set-hostname server

#bash

# vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.0.3.137 server

10.0.3.138 client

# ping client

PING client (10.0.3.138) 56(84) bytes of data.

64 bytes from client (10.0.3.138): icmp_seq=1 ttl=64 time=1.02 ms

64 bytes from client (10.0.3.138): icmp_seq=2 ttl=64 time=0.400 ms

client节点:

# hostnamectl set-hostname client

# bash

# vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.0.3.137 server

10.0.3.138 client

# ping server

PING server (10.0.3.137) 56(84) bytes of data.

64 bytes from server (10.0.3.137): icmp_seq=1 ttl=64 time=0.531 ms

64 bytes from server (10.0.3.137): icmp_seq=2 ttl=64 time=0.327 ms

6.配置yum源

将我们的XianDian-PaaS-v2.2.iso通过CRT上传到系统中,然后挂载到/mnt,拷贝出mnt里面所有的文件夹到/opt上。

# mount -o loop XianDian-PaaS-v2.2.iso /mnt

# cp -rvf * /opt

# mv /etc/yum.repos.d/* /media/

# vi /etc/yum.repos.d/docker.repo 

[docker]

name=docker

baseurl=file:///opt/docker 

gpgcheck=0

enabled=1

7.安装vsftpd服务

# yum install -y vsftpd

# vi /etc/vsftpd/vsftpd.conf 

anon_root=/opt //添加这行,设置共享目录。

# systemctl restart vsftpd 

# systemctl enable vsftpd

# vi /etc/yum.repos.d/docker.repo 

[docker]

name=docker

baseurl=ftp://10.0.3.137/docker //这个源是指向我们的docker的yum源

gpgcheck=0

# yum clean all

# yum list 

能看到列表即表示yum源配置成功

Client节点yum源配置同Server节点一样。

2、服务安装

2.1、安装Docker服务

所有节点安装docker环境

# yum install -y docker

# systemctl restart docker

# systemctl enable docker

2.2、部署Docker 仓库

2.2.1、上传仓库部署使用的镜像。

# ll

-rw-r--r-- 1 root root   33918976 Oct 17 10:20 registry_latest.tar

# docker load -i registry_latest.tar

# docker images

REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE

docker.io/registry   latest              c9bd19d022f6        15 months ago       33.27 MB

2.2.2、启动仓库容器服务

# docker run -d -p 5000:5000 --restart=always --name registry docker.io/registry:latest

20a07207bf28256d13fbc53cf2a1d978a4827bf8f360b32a8106d996f024c001

# docker ps -a

CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                    NAMES

20a07207bf28        docker.io/registry:latest   "/entrypoint.sh /etc/"   8 seconds ago       Up 3 seconds        0.0.0.0:5000->5000/tcp   registry

2.2.3、设置仓库地址

# vi /etc/sysconfig/docker //添加下面两行

ADD_REGISTRY='--add-registry 10.0.3.137:5000'

INSECURE_REGISTRY='--insecure-registry 10.0.3.137:5000'

# systemctl daemon-reload

# systemctl restart docker

# docker info 

注意:两个节点都要添加仓库地址。

# docker images

# docker tag c9bd19d022f6 10.0.3.137:5000/registry:latest

# docker push 10.0.3.137:5000/registry:latest

至此仓库就建立好了,我们需要将所有镜像全部推送到仓库中,提供给其他节点使用。

2.3、部署Rancher-Server服务

2.3.1、上传rancher-server镜像

# ll

-rw-r--r-- 1 root root 1000050176 Jan 29 06:23 rancher_server_v1.6.5.tar

# docker load -i rancher-server_v1.6.5.tar

# docker images

REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE

<none>                     <none>              f89070da7581        3 weeks ago         984.9 MB

10.0.3.137:5000/registry   latest              c9bd19d022f6        15 months ago       33.27 MB

docker.io/registry         latest              c9bd19d022f6        15 months ago       33.27 MB

# docker tag f89070da7581 10.0.3.137:5000/rancher/server:v1.6.5

# docker push 10.0.3.137:5000/rancher/server:v1.6.5

2.3.2、启动rancher-server服务

# docker run -d --restart=unless-stopped -p 8080:8080 rancher/server:v1.6.5;

2ff52cf39d6f2637ac300e7d430dc828fba99cef4ec118793e91e9d680a16509

# docker ps -a

CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                              NAMES

2ff52cf39d6f        rancher/server:v1.6.5       "/usr/bin/entry /usr/"   18 seconds ago      Up 6 seconds        3306/tcp, 0.0.0.0:8080->8080/tcp   modest_turing

20a07207bf28        docker.io/registry:latest   "/entrypoint.sh /etc/"   39 minutes ago      Up 38 minutes       0.0.0.0:5000->5000/tcp             registry


2.3.3、通过网页访问

Rancher-server的访问地址是:serverIP:8080,访问结果如图2-1所示。


图2-1访问rancher-server服务

2.3.4、Rancher服务设置。

1.选择ADMIN-Access Controller,选择LOCAL进行认证设置,如图1-1、图1-2所示。


图1-1 Access Controller设置


图2-2 认证设置

2.选择ADMIN-Settings,下拉到最下面,找到Advanced Settings,如图2-3、图2-4所示。


图2-3 Settings设置


图2-4 Advanced Settings设置

3.打开Advanced Settings,下拉到最后设置仓库地址,如图2-5所示。


图2-5 仓库设置

4.选择右下方的语言,可以进行中文切换,如图2-6所示。


图2-6 中文切换

5.选择Default-环境管理,点击添加环境,选择Cattle环境模板,环境名称自定义,如图2-7、图2-8、图2-9所示。


图2-7 环境管理


图2-8 添加环境

 

图2-9 添加环境

6.查看建立的环境状态,Active状态为正常,如图2-10所示。


图2-10 添加环境成功

7.切换到新建的环境,如图2-11所示。


图2-11 切换环境

8.添加环境内的主机

添加主机之前要确保仓库中有agent服务的相关镜像,没有的话需要提前传到私有仓库中,clinet节点配置好私有仓库地址即可直接拉取。

# docker images

REPOSITORY                                                  TAG                 IMAGE ID            CREATED             SIZE

10.0.3.137:5000/rancher/server                              v1.6.5              f89070da7581        2 days ago          984.9 MB

10.0.3.137:5000/rancher/scheduler                           v0.8.2              690ef14a99b7        6 months ago        241.9 MB

10.0.3.137:5000/rancher/agent                               v1.2.5              ef5fea38dbe6        7 months ago        237.1 MB

10.0.3.137:5000/rancher/network-manager                     v0.7.4              787fc137ac53        7 months ago        248.8 MB

10.0.3.137:5000/rancher/metadata                            v0.9.2              d46f30a656e0        7 months ago        251.5 MB

10.0.3.137:5000/rancher/net                                 v0.11.3             9495baae8faf        7 months ago        267.3 MB

10.0.3.137:5000/rancher/dns                                 v0.15.1             af5509fe436b        8 months ago        239.8 MB

10.0.3.137:5000/rancher/healthcheck                         v0.3.1              10710b438de7        9 months ago        383.9 MB

10.0.3.137:5000/rancher/net                                 holder              665d9f6e8cc1        10 months ago       267.2 MB

10.0.3.137:5000/registry                                    latest              c9bd19d022f6        15 months ago       33.27 MB

docker.io/registry                                          latest              c9bd19d022f6        15 months ago       33.27 MB

上传镜像到私有仓库完成后,点击添加主机,如图2-12所示。



图2-12 添加主机

9.设置client节点的ip,并点击复制到粘贴板到client节点执行,如图2-13所示。


图2-13 设置ip

10.切换到应用-基础环境,等待基础设施应用自动部署成功,如图是基础设施应用部署成功的效果,如图2-14所示。


图2-14 基础环境部署成功

3、应用模板部署

3.1、Gogs应用部署

3.1.1、点击应用商店,在搜索框中输入Go,查找Gogs应用服务,如图3-1所示。


图3-1 查找Gogs应用

3.1.2、查看Gogs的查看详情,选择默认模板版本v0.11.34,如图3-2所示。


图3-2 Gogs版本

3.1.3、自定义应用名称,设置端口,选择不被占用的端口,设置Mysql的密码,如图3-3所示。


图3-3 服务配置

3.1.4、下来Gogs部署设置,点击最下方的预览,查看具体的服务配置,如图3-4所示。


图3-4 Gogs的rancher-compose

3.1.5、点击预览下面的启动按钮,进行Gogs服务自动化部署,部署完成后点击应用,查看Gogs服务部署结果,如图3-5所示。


图3-5 Gogs服务部署成功

3.1.6、点击Gogs服务的访问端口8080,进行初始化设置,数据库的ip是对应db容器的ip,设置完生效后重新访问Gogs服务的8080端口,查看效果如图3-6、图3-7所示。


图3-6 Gogs初始化设置


图3-7 访问Gogs服务

3.2、Elasticsearch 2.x应用部署

3.2.1、上传镜像

# docker images

REPOSITORY                                   TAG                 IMAGE ID            CREATED             SIZE

10.0.3.138:5000/elasticsearch                2.4.3-alpine        

10.0.3.138:5000/rancher/elasticsearch-conf   v0.5.0              3d2a05b62289        21 months ago       20.46 MB

10.0.3.138:5000/rancher/kopf                 v0.4.0              f3e805a34ebd        2 years ago         182 MB

3.2.2、在应用商店查找Elasticsearch 2.x,如图3-8所示。


图3-8 查找Elasticsearch 2.x

3.2.3、配置Elasticsearch 2.x服务,如图3-9所示。


图3-9 配置Elasticsearch 2.x

3.2.4、启动自动化部署,如图3-10所示。


图3-10 自动化部署

3.2.5、通过网页访问Elasticsearch 2.x服务,端口是80,如图3-11所示。


图3-11 访问Elasticsearch 2.x

3.2.6、查看集群的各节点详情,如图3-12所示。


图3-12 节点详情

3.3、Prometheus应用部署

3.3.1、镜像上传

# docker images

REPOSITORY                                                  TAG                 IMAGE ID            CREATED             SIZE

10.0.3.137:5000/google/cadvisor                             latest              75f88e3ec333        7 weeks ago         62.18 MB

10.0.3.137:5000/prom/node-exporter                          latest              ff5ecdcfc4a2        7 weeks ago         22.8 MB

10.0.3.137:5000/infinityworks/graf-db                       11                  2c4fd7c7333a        9 months ago        4.531 MB

10.0.3.137:5000/prom/prometheus                             v1.6.0              c351d5f42485        9 months ago        75.29 MB

10.0.3.137:5000/infinityworks/prom-conf                     19                  ece6596a4ee7        9 months ago        3.985 MB

10.0.3.137:5000/grafana/grafana                             4.2.0               8c4ef64b4ad1        10 months ago       277.9 MB

10.0.3.137:5000/infinityworks/prometheus-rancher-exporter   v0.22.52            43b3ae5364ea        12 months ago       23.72 MB

3.3.2、应用商店查找Prometheus应用服务,如图3-13所示。


图3-13 查找Prometheus应用服务

3.3.3、Prometheus应用服务配置,然后启动自动化部署,如图3-14所示。


图3-15 Prometheus应用自动化部署

3.3.4、通过9090端口访问Prometheus应用,如图3-16所示。


图3-16 访问Prometheus应用

3.3.5、通过Prometheus应用查看go_memstats_heap_objects数据,如图3-17所示。


图3-17 数据展示

3.3.6、通过3000端口访问Grafana应用服务,如图3-18所示。


图3-18 访问Grafana应用

3.3.7、点击Sign up注册用户,输入Email地址注册,如图3-19所示。


图3-19 Grafana注册邮箱

3.3.8、设置用户名和密码,然后自动重新登录,如图3-20所示。


图3-20 Grafana注册用户

3.3.9、进入Grafana应用服务主页面,监控容器状态,如图3-21所示。


图3-21监控容器状态

4、Rancher-Server的HA部署

这里我们要是实现Rancher-Server的HA部署,需要两台server节点和一台client,仓库可以使用上节部署的私有仓库,具体网络分配如下。

节点 Ip 角色 功能

Server1 10.0.3.137 Rancher-server1 Rancher-server、仓库、haproxy、数据库服务

Server2 10.0.3.138 Rancher-server2 Server服务

Client 10.0.3.139 Rancher-agent 代理


4.1、Server1节点部署Rancher-Server

4.1.1、安装Docker服务

#  yum install -y docker

# systemctl restart docker

# systemctl enable docker

4.1.2、添加私有仓库

ADD_REGISTRY='--add-registry 10.0.3.137:5000'

INSECURE_REGISTRY='--insecure-registry 10.0.3.137:5000'

# systemctl daemon-reload

# systemctl restart docker

4.1.3、安装、配置数据服务

# yum install -y mariadb  mariadb-server

# systemctl enable mariadb

# systemctl restart mariadb

# mysql_secure_installation 


NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB

      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!


In order to log into MariaDB to secure it, we'll need the current

password for the root user.  If you've just installed MariaDB, and

you haven't set the root password yet, the password will be blank,

so you should just press enter here.


Enter current password for root (enter for none): 

OK, successfully used password, moving on...


Setting the root password ensures that nobody can log into the MariaDB

root user without the proper authorisation.


Set root password? [Y/n] y

New password: 

Re-enter new password: 

Password updated successfully!

Reloading privilege tables..

 ... Success!



By default, a MariaDB installation has an anonymous user, allowing anyone

to log into MariaDB without having to have a user account created for

them.  This is intended only for testing, and to make the installation

go a bit smoother.  You should remove them before moving into a

production environment.


Remove anonymous users? [Y/n] 

 ... Success!


Normally, root should only be allowed to connect from 'localhost'.  This

ensures that someone cannot guess at the root password from the network.


Disallow root login remotely? [Y/n] 

 ... Success!


By default, MariaDB comes with a database named 'test' that anyone can

access.  This is also intended only for testing, and should be removed

before moving into a production environment.


Remove test database and access to it? [Y/n] 

 - Dropping test database...

 ... Success!

 - Removing privileges on test database...

 ... Success!


Reloading the privilege tables will ensure that all changes made so far

will take effect immediately.


Reload privilege tables now? [Y/n] 

 ... Success!


Cleaning up...


All done!  If you've completed all of the above steps, your MariaDB

installation should now be secure.


Thanks for using MariaDB!

4.1.4、创建公用数据库

# mysql -uroot -p000000

Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MariaDB connection id is 10

Server version: 5.5.56-MariaDB MariaDB Server


Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS cattle COLLATE = 'utf8_general_ci' CHARACTER SET = 'utf8';

Query OK, 1 row affected (0.01 sec)


MariaDB [(none)]> GRANT ALL ON cattle.* TO 'cattle'@'%' IDENTIFIED BY 'cattle';

Query OK, 0 rows affected (0.00 sec)


MariaDB [(none)]> GRANT ALL ON cattle.* TO 'cattle'@'localhost' IDENTIFIED BY 'cattle';

Query OK, 0 rows affected (0.00 sec)


MariaDB [(none)]> exit

Bye

4.1.5、启动server节点的Rancher-server服务

#docker run -d --restart=unless-stopped -p 8080:8080 -p 9345:9345 10.0.3.137:5000/rancher/server:v1.6.5 --db-host 10.0.3.138 --db-port 3306 --db-user cattle --db-pass cattle --db-name cattle --advertise-address 10.0.3.137

启动完成之后通过网页访问,如图4-1所示。


图4-1 访问Rancher-Server服务

点击ADMIN-High Availability,查看高可用主机,如图4-2所示。


图4-2 高可用主机

4.2、Server2节点部署Rancher-Server服务

4.2.1、安装Docker服务

#  yum install -y docker

# systemctl restart docker

# systemctl enable docker

4.2.2、配置私有仓库

# vi /etc/sysconfig/docker

ADD_REGISTRY='--add-registry 10.0.3.137:5000'

INSECURE_REGISTRY='--insecure-registry 10.0.3.137:5000'

# systemctl daemon-reload

# systemctl restart docker

4.2.3、启动server2节点Rancher-server服务

# docker run -d --restart=unless-stopped -p 8080:8080 -p 9345:9345 10.0.3.137:5000/rancher/server:v1.6.5 --db-host 10.0.3.138 --db-port 3306 --db-user cattle --db-pass cattle --db-name cattle --advertise-address 10.0.3.138

启动完成之后通过网页访问,如图4-3所示。


图4-3访问Rancher-Server服务

点击ADMIN-High Availability,查看高可用主机,如图4-4所示。



图4-4 高可用主机

4.3、配置HA管理

haproxy服务最好安装在单独节点,这里资源紧张,所以我们就直接部署在server2节点上。

4.3.1、安装haproxy服务

# yum install -y haproxy

4.3.2、重写haproxy.cfg文件

[root@server1]# vi /etc/haproxy/haproxy.cfg 

global

  maxconn 4096

  ssl-server-verify none


defaults

  mode http

  balance roundrobin

  option redispatch

  option forwardfor


 timeout connect 5s

  timeout queue 5s

  timeout client 36000s

  timeout server 36000s


frontend http-in

  mode tcp

  #bind *:443 ssl crt /etc/haproxy/certificate.pem

  bind *:80 //监听的端口

  default_backend rancher_servers


 acl is_websocket hdr(Upgrade) -i WebSocket

  acl is_websocket hdr_beg(Host) -i ws

  use_backend rancher_servers if is_websocket


backend rancher_servers

  server websrv1 10.0.3.137:8080 weight 1 maxconn 1024 //Rancher server IP:Port

  server websrv2 10.0.3.138:8080 weight 1 maxconn 1024 //Rancher server IP:Port

4.3.3、启动haproxy服务管理,访问server2:80,结果如图4-5所示。

[root@server1 v2.2]# haproxy -f /etc/haproxy/haproxy.cfg &

[1] 30956


图4-5 访问haproxy服务

4.3.4、测试高可用性

首先停止server1节点的Rancher-server容器,然后访问server2:80,如图4-6所示。

# docker stop d749f1bfacd9 


图4-6 访问haproxy服务

这里可以发现,即使我们两个server节点中的其中一个节点down掉,只要我们的haproxy正常运行,我们还是可以正常访问rancher-server服务的。

4.4、添加client节点

4.4.1、点击添加主机,如图4-7所示。


图4-7 添加主机

4.4.2、选择Custom,添加client节点的ip,复制黏贴键到client节点运行,如图4-8所示。


图4-8 设置ip

4.4.3 client节点正常运行,如图4-9所示。


图4-9 添加主机成功

5、容器数据卷共享

5.1、容器与主机之间映射共享卷

5.1.1、创建共享卷

mkdir /root/html

cd /root/html

echo "I am your host volume HTML." > /root/html/index.html 

5.1.2、启动web容器

docker run -itd --name web -p 81:80 -v /root/html:/usr/share/nginx/html 10.0.3.137:5000/nginx:latest

5.1.3、网页访问效果,如图5-1所示。


图5-1网页访问效果

5.2、三个容器之间使用共享卷

5.2.1、启动web1容器

docker run -itd --name web1 -p 81:80 -v /usr/share/nginx/html 10.0.3.137:5000/nginx:latest

5.2.2、启动web2容器,连接web1共享卷

docker run -itd --volumes-from web1 --name web2 -p 82:80  10.0.3.137:5000/nginx:latest

5.2.3、启动web3容器,连接web1共享卷

docker run -itd --volumes-from web1 --name web3 -p 83:80 10.0.3.137:5000/nginx:latest

5.2.4、修改web1共享卷内容

docker exec -it web1 /bin/bash

echo "Welcome,I am web1." > /usr/share/nginx/html/index.html

5.2.5、网页访问web1,效果如图5-2所示


图5-2网页访问web1

5.2.6、网页访问web2,如图5-3所示


图5-3 网页访问web2

5.2.7、网页访问web3,如图5-4所示


图5-4网页访问web3

6、自定义docker0网络

6.1、移除原有docker0网络

6.1.1、安装btctl命令

# yum install -y bridge-utils

6.1.2、查询网桥信息

# brctl  show                

bridge name     bridge id               STP enabled     interfaces

docker0         8000.024292c9c6e7       no

6.1.3、关闭docker服务

# systemctl stop docker

6.1.4、停止docker0网桥

#sudo ip link set dev docker0 down

6.1.5、删除docker0网桥

#sudo brctl delbr docker0

6.1.6查询所有网桥信息

# brctl show

bridge name     bridge id               STP enabled     interfaces

6.2、自定义新网络

6.2.1、创建新网桥bridge0

# sudo brctl addbr bridge0

6.2.2查询创建的bridge0

# brctl show

bridge name     bridge id               STP enabled     interfaces

bridge0         8000.000000000000       no

6.2.3、设置新网桥的网络段地址

# sudo ip addr add 192.168.5.1/24 dev bridge0

6.2.4、启动bridge0网桥

# sudo ip link set dev bridge0 up

6.2.5、查询bridge0网桥信息

# ifconfig bridge0

bridge0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.5.1  netmask 255.255.255.0  broadcast 0.0.0.0

        inet6 fe80::583e:86ff:fe9b:5254  prefixlen 64  scopeid 0x20<link>

        ether 5a:3e:86:9b:52:54  txqueuelen 0  (Ethernet)

        RX packets 0  bytes 0 (0.0 B)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 8  bytes 648 (648.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

6.2.6、添加新网桥到配置文件

#  vi /etc/sysconfig/docker

OPTIONS='-b=bridge0'

6.2.7、加载配置文件,重启docker服务

# systemctl daemon-reload

# systemctl restart docker

6.3、使用新网络部署应用

6.3.1、创建一个nginx容器

# docker run -itd 10.0.3.137:5000/nginx:latest

6.3.2、查看容器的状态

# docker ps -a

CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS               NAMES

89ac3183748a        10.0.3.137:5000/nginx:latest   "nginx -g 'daemon off"   49 seconds ago      Up 43 seconds       80/tcp              tender_bardeen

6.3.3、查看容器的bridge

# docker inspect -f {{.NetworkSettings.Networks.bridge}} 89ac3183748a

{<nil> [] [] 71395d9b6fd02c4bd49973e63de3296b62f76adeacf737bbcf27fa310a353cc7 ad19393d4b4aaf205121dbd1952ed5b585f6f31320b62597c4ba35f05ea8e07a 192.168.5.1 192.168.5.2 24   0 02:42:c0:a8:05:02}


7、Dockerfile构建容器镜像

7.1、上传资源到系统

# pwd

/opt/web

[root@localhost web]# ll

[root@server web]# ll

total 146832

-rw-r--r-- 1 root root  7453955 Jan 31 03:00 apache-tomcat-7.0.56.zip

-rw-r--r-- 1 root root      589 Feb  2 00:58 Dockerfile

-rw-r--r-- 1 root root 74292096 Jan 31 04:30 jenkins.war

-rw-r--r-- 1 root root       67 Feb  2 00:48 local.repo

-rw-r--r-- 1 root root 68597387 Feb  2 00:37 yum.tar

说明:这次主要是做一个容器化Tomcat发布站点,发布内容是Jenkins工具。Dockerfile是我们要构建镜像的基础文件,yum.tar是yum源软件包,local.repo是yum源文件,这里根据自己的实际需求自行修改。

7.2、编写Dockerfile文件

# vi Dockerfile 

FROM 10.0.3.138:5000/centos:latest

MAINTAINER Xiandian

RUN rm -fv /etc/yum.repos.d/*

ADD local.repo /etc/yum.repos.d/

ADD yum.tar /opt/

RUN yum clean all

RUN yum inst