首先本篇博客搭建的是先电的paas服务,即我们的docker容器
。
那么首先简单介绍一下本次环境
CentOS-7-x86_64-DVD-1511.iso 即我们linux操作系统的所用镜像文件
XianDian-PaaS-v2.2.iso 这个是先电的镜像
安装运行环境系统要求为Centos7, 内核版本不低于3.10
Docker版本不低于1.12.6
Rancher-Server版本1.6.5
虚拟机使用的平台环境是Virtual Box虚拟机管理器
用的网络模式为仅主机模式
网卡和网络类型这里可以参考博客
https://blog.csdn.net/qq_28513801/article/details/90138491
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.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.2、网络说明
安装PaaS的VM的网络IP采用IaaS的外部IP,IP设置成静态IP。网络架构如下:
如上图所示,这是我们的网络架构
设备名:
主要作为系统的运行指令的发送节点
server:10.0.3.137
主要为服务运行的节点,可以使用一个或者多个均可
client:10.0.3.138
主要作为系统所有的运行的镜像仓库节点
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 //这个源是指向我们的docker的本地yum源,当然如果可以的话,最好是在IAAS层新建两个虚拟机,然后使用FTP服务进行获取YUM源
gpgcheck=0
enabled=1
7.安装vsftpd服务
# yum install -y vsftpd
# vi /etc/vsftpd/vsftpd.conf
anon_root=/opt //添加这行,设置共享目录。
# systemctl restart vsftpd
# systemctl enable vsftpd
# yum clean all
# yum list
能看到列表即表示yum源配置成功
Client节点yum源配置同Server节点一样。
# vi /etc/yum.repos.d/docker.repo
[docker]
name=docker
baseurl=ftp://10.0.3.137/docker
gpgcheck=0
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
至此仓库就建立好了,我们需要将所有镜像全部推送到仓库中,提供给其他节点使用。
下面演示下我们的所有镜像全部都推送过去后的页面
[root@server ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.3.137:5000/rancher/server v1.6.5 f89070da7581 11 months ago 984.9 MB
10.0.3.137:5000/tomcat latest a92c139758db 12 months ago 557.4 MB
10.0.3.137:5000/centos latest ff426288ea90 12 months ago 207.2 MB
10.0.3.137:5000/nginx latest 3f8a4339aadd 13 months ago 108.5 MB
10.0.3.137:5000/mysql 8.0 26bd364f80bf 13 months ago 342.5 MB
10.0.3.137:5000/google/cadvisor latest 75f88e3ec333 13 months ago 62.18 MB
10.0.3.137:5000/prom/node-exporter latest ff5ecdcfc4a2 13 months ago 22.8 MB
10.0.3.137:5000/gogs/gogs 0.11.34 290bc4df94f2 14 months ago 139.1 MB
10.0.3.137:5000/gogs/gogs latest 6ab1773c26bc 14 months ago 138.7 MB
10.0.3.137:5000/rancher/lb-service-haproxy v0.7.9 774f6505bd28 17 months ago 311.8 MB
10.0.3.137:5000/rancher/scheduler v0.8.2 690ef14a99b7 18 months ago 241.9 MB
10.0.3.137:5000/rancher/agent v1.2.5 ef5fea38dbe6 18 months ago 237.1 MB
10.0.3.137:5000/rancher/network-manager v0.7.4 787fc137ac53 19 months ago 248.8 MB
10.0.3.137:5000/rancher/metadata v0.9.2 d46f30a656e0 19 months ago 251.5 MB
10.0.3.137:5000/rancher/net v0.11.3 9495baae8faf 19 months ago 267.3 MB
10.0.3.137:5000/rancher/dns v0.15.1 af5509fe436b 20 months ago 239.8 MB
10.0.3.137:5000/rancher/healthcheck v0.3.1 10710b438de7 21 months ago 383.9 MB
10.0.3.137:5000/infinityworks/graf-db 11 2c4fd7c7333a 21 months ago 4.531 MB
10.0.3.137:5000/prom/prometheus v1.6.0 c351d5f42485 21 months ago 75.29 MB
10.0.3.137:5000/infinityworks/prom-conf 19 ece6596a4ee7 21 months ago 3.985 MB
10.0.3.137:5000/rancher/net holder 665d9f6e8cc1 21 months ago 267.2 MB
10.0.3.137:5000/grafana/grafana 4.2.0 8c4ef64b4ad1 22 months ago 277.9 MB
10.0.3.137:5000/infinityworks/prometheus-rancher-exporter v0.22.52 43b3ae5364ea 2 years ago 23.72 MB
10.0.3.137:5000/elasticsearch 2.4.3-alpine f3f4e44ce229 2 years ago 142.9 MB
10.0.3.137:5000/registry latest c9bd19d022f6 2 years ago 33.27 MB
docker.io/registry latest c9bd19d022f6 2 years ago 33.27 MB
10.0.3.137:5000/rancher/elasticsearch-conf v0.5.0 3d2a05b62289 2 years ago 20.46 MB
10.0.3.137:5000/rancher/kopf v0.4.0 f3e805a34ebd 3 years ago 182 MB
[root@server ~]#
下面的client端
[root@client ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.3.137:5000/rancher/server v1.6.5 f89070da7581 12 months ago 984.9 MB
10.0.3.137:5000/mysql 8.0 26bd364f80bf 13 months ago 342.5 MB
10.0.3.137:5000/google/cadvisor latest 75f88e3ec333 13 months ago 62.18 MB
10.0.3.137:5000/prom/node-exporter latest ff5ecdcfc4a2 14 months ago 22.8 MB
10.0.3.137:5000/gogs/gogs 0.11.34 290bc4df94f2 14 months ago 139.1 MB
10.0.3.137:5000/rancher/lb-service-haproxy v0.7.9 774f6505bd28 18 months ago 311.8 MB
10.0.3.137:5000/rancher/scheduler v0.8.2 690ef14a99b7 18 months ago 241.9 MB
10.0.3.137:5000/rancher/agent v1.2.5 ef5fea38dbe6 19 months ago 237.1 MB
10.0.3.137:5000/rancher/network-manager v0.7.4 787fc137ac53 19 months ago 248.8 MB
10.0.3.137:5000/rancher/metadata v0.9.2 d46f30a656e0 19 months ago 251.5 MB
10.0.3.137:5000/rancher/net v0.11.3 9495baae8faf 19 months ago 267.3 MB
10.0.3.137:5000/rancher/dns v0.15.1 af5509fe436b 20 months ago 239.8 MB
10.0.3.137:5000/rancher/healthcheck v0.3.1 10710b438de7 21 months ago 383.9 MB
10.0.3.137:5000/infinityworks/graf-db 11 2c4fd7c7333a 21 months ago 4.531 MB
10.0.3.137:5000/prom/prometheus v1.6.0 c351d5f42485 21 months ago 75.29 MB
10.0.3.137:5000/infinityworks/prom-conf 19 ece6596a4ee7 21 months ago 3.985 MB
10.0.3.137:5000/rancher/net holder 665d9f6e8cc1 22 months ago 267.2 MB
10.0.3.137:5000/grafana/grafana 4.2.0 8c4ef64b4ad1 22 months ago 277.9 MB
10.0.3.137:5000/infinityworks/prometheus-rancher-exporter v0.22.52 43b3ae5364ea 2 years ago 23.72 MB
10.0.3.137:5000/elasticsearch 2.4.3-alpine f3f4e44ce229 2 years ago 142.9 MB
10.0.3.137:5000/registry latest c9bd19d022f6 2 years ago 33.27 MB
10.0.3.137:5000/rancher/elasticsearch-conf v0.5.0 3d2a05b62289 2 years ago 20.46 MB
10.0.3.137:5000/rancher/kopf v0.4.0 f3e805a34ebd 3 years ago 182 MB
[root@client ~]#
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.3.4、Rancher服务设置。
1.选择ADMIN-Access Controller,选择LOCAL进行认证设置,如图1-1、图1-2所示。
图2-2 认证设置
2.选择ADMIN-Settings,下拉到最下面,找到Advanced Settings,如图2-3、图2-4所示。
3、应用模板部署
3.1.1、点击应用商店,在搜索框中输入Go,查找Gogs应用服务,如图3-1所示。
3.1.2、查看Gogs的查看详情,选择默认模板版本v0.11.34,如图3-2所示。
3.1.3、自定义应用名称,设置端口,选择不被占用的端口,设置Mysql的密码,如图3-3所示。
图3-3 服务配置
3.1.4、下来Gogs部署设置,点击最下方的预览,查看具体的服务配置,如图3-4所示。
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.2、Elasticsearch 2.x应用部署
3.2.1、上传镜像
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.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.2.6、查看集群的各节点详情,如图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.3.6、通过3000端口访问Grafana应用服务,如图3-18所示。
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监控容器状态
这里我们要是实现Rancher-Server的HA部署,需要两台server节点和一台client,仓库可以使用上节部署的私有仓库,具体网络分配如下。
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所示。
点击ADMIN-High Availability,查看高可用主机,如图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.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.3.4、测试高可用性
首先停止server1节点的Rancher-server容器,然后访问server2:80,如图4-6所示。
# docker stop d749f1bfacd9
这里可以发现,即使我们两个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.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.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网页访问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 install -y java unzip
ENV LC_ALL en_US.UTF-8
ADD apache-tomcat-7.0.56.zip /root/apache-tomcat-7.0.56.zip
RUN unzip /root/apache-tomcat-7.0.56.zip -d /root/
EXPOSE 8081
RUN chmod u+x /root/apache-tomcat-7.0.56/bin/*
ADD jenkins.war /root/apache-tomcat-7.0.56/webapps/ROOT.war
ENV CATALINA_HOME /root/apache-tomcat-7.0.56
CMD ${CATALINA_HOME}/bin/catalina.sh run
7.3、构建镜像
# docker build -t web:v1.0 .
Sending build context to Docker daemon 60.07 MB
Step 1 : FROM 10.0.3.137:5000/centos:latest
Trying to pull repository 10.0.3.137:5000/centos ...
latest: Pulling from 10.0.3.137:5000/centos
af4b0a2388c6: Pull complete
Digest: sha256:7e94d6055269edb455bcfb637292573117e4a8341e9b9abbc09b17d8aafe8fbe
---> ff426288ea90
Step 2 : MAINTAINER Xiandian
。。。。。
Step 13 : ADD jenkins.war /root/apache-tomcat-7.0.56/webapps/ROOT.war
---> 86f12bcb34e5
Removing intermediate container 7c3e4b171027
Step 14 : ENV CATALINA_HOME /root/apache-tomcat-7.0.56
---> Running in 583cce60f1b6
---> 9356da9a6cc0
Removing intermediate container 583cce60f1b6
Step 15 : CMD ${CATALINA_HOME}/bin/catalina.sh run
---> Running in fc5e797276b2
---> 1884a340e0cd
Removing intermediate container fc5e797276b2
Successfully built 1884a340e0cd
7.4、查询镜像
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
web v1.0 929a538a8b44 About a minute ago 520.7 MB
10.0.3.137:5000/centos latest ff426288ea90 3 weeks ago 207.2 MB
7.5、启动镜像
# docker run -itdP web:v1.0
ccfb7f2f7e10e361d761fb78816b871d8dc8f8964669b05ab6034ab829cc341
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ac2df200990b web:v1.0 "/bin/sh -c '${CATALI" 35 seconds ago Up 27 seconds 0.0.0.0:32770->8081/tcp jovial_northcutt
7.6、网页访问效果
查看10.0.3.139:32770,查看我们启动得容器,如图7-1所示。
7.7、进入容器获取登录密码再登录
7.7.1、进入容器查找密码
# docker exec -it ac2df200990b /bin/sh
sh-4.2# cat /root/.jenkins/secrets/initialAdminPassword
fe1a16527f704ffa9190695e32f9ceb8
7.7.2、输入密码,登录jenkins服务,如图7-2所示。
图7-2 登录jenkins
7.7.3、选择Install suggested plugins,然后continue,设置用户名和密码,设置完以后点击Save and Finish如图7-3所示。
7.7.4、设置完用户名之后,进入Getting Started设置,点击Started using Jenkins,如图7-4所示。
图7-4 设置完成
7.7.5、基本的设置完成以后,我们就可以正常使用Jinkens服务了,如图7-5所示
8、Docker容器实现Nginx的负载均衡
8.1、上传实验镜像
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.3.137:5000/tomcat latest a92c139758db 8 days ago 557.4 MB
10.0.3.137:5000/nginx latest 3f8a4339aadd 5 weeks ago 108.5 MB
8.2、在宿主机创建发布目录
创建www1、www2目录,并写一个默认欢迎页面。
# cd /
# mkdir www1 www2
# cd www1
# cat index.jsp
<html>
<head>
<title>Tomcat1</title>
</head>
<body>
<%
out.println("this is Tomcat1");
%>
</body>
</html>
# cd www2
# cat index.jsp
<html>
<head>
<title>Tomcat2</title>
</head>
<body>
<%
out.println("this is Tomcat2");
%>
</body>
</html>
8.3、创建Tomcat1容器
8.3.1、启动Tomcat1容器
# docker run -ti -d -P -h tomcat1 -v /root/www1:/usr/local/tomcat/webapps/ROOT 10.0.3.137:5000/tomcat:latest /bin/bash
8.3.2、查询Tomcat1容器
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
610c47554b61 tomcat:latest "/bin/bash" 13 hours ago Up 13 hours 0.0.0.0:32768->8080/tcp jovial_leakey
8.3.3、进入tomcat1容器,启动web服务,访问如图8-1所示。
# docker exec -it 610c47554b61 /bin/bash
root@tomcat1:/usr/local/tomcat# cd bin/
root@tomcat1:/usr/local/tomcat/bin# startup.sh
8.4、创建Tomcat2容器
8.4.1、启动tomcat2容器
# docker run -ti -d -h tomcat2 -P -v /root/www2:/usr/local/tomcat/webapps/ROOT 10.0.3.137:5000/tomcat:latest /bin/bash
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dafb7bbc5160 tomcat:latest "/bin/bash" 13 hours ago Up 13 hours 0.0.0.0:32769->8080/tcp distracted_galileo
610c47554b61 tomcat:latest "/bin/bash" 13 hours ago Up 13 hours 0.0.0.0:32768->8080/tcp jovial_leakey
8.4.2、进入tomcat2容器,启动web服务,访问结果如图8-2所示。
# docker exec -it dafb7bbc5160 /bin/bash
root@tomcat2:/usr/local/tomcat# bin/startup.sh
8.5、创建nginx容器
创建nginx容器的时候注意端口80是不是被占用,如果被占用可以选择使用其他端口。
# docker run -itd -p 80:80 --name nginx nginx:latest /bin/bash
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dafb7bbc5160 docker.io/tomcat:latest "/bin/bash" 13 hours ago Up 13 hours 0.0.0.0:32769->8080/tcp distracted_galileo
610c47554b61 docker.io/tomcat:latest "/bin/bash" 14 hours ago Up 14 hours 0.0.0.0:32768->8080/tcp jovial_leakey
b595781ab635 docker.io/nginx:latest "/bin/bash" 14 hours ago Up 38 minutes 0.0.0.0:80->80/tcp nginx
# docker exec -it b595781ab635 /bin/bash
# /usr/sbin/nginx
8.6、负载均衡配置
8.6.1、在宿主机新建一个nginx.conf文件
# vi nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
//这个是定义Tomcat服务的负载均衡
upstream wei {
server 10.0.3.139:32768;
server 10.0.3.139:32769;
}
server {
listen 80;
server_name 10.0.3.139;//宿主机ip
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
//这个是调用Tomcat服务的负载均衡
location / {
proxy_pass http://wei;
}
}
}
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b595781ab635 docker.io/nginx:latest "/bin/bash" 14 hours ago Up 45 minutes 0.0.0.0:80->80/tcp nginx
# ll
-rw-r--r-- 1 root root 922 Feb 1 00:43 nginx.conf
8.6.2、将nginx.conf配置拷贝到nginx容器中
# docker cp /root/nginx.conf b595781ab635:/etc/nginx/nginx.conf
8.6.3、重启nginx容器,nginx服务。
# docker restart b595781ab635
# docker exec -it b595781ab635 /bin/bash
# /usr/sbin/nginx
8.7、查看实现效果
8.7.1、查询haproxy容器的输出
# for i in `seq 1 3`;do curl 10.0.3.139;done
<html>
<head>
<title>Tomcat1title>
head>
<body>
this is Tomcat1
body>
html>
<html>
<head>
<title>Tomcat2title>
head>
<body>
this is Tomcat2
body>
html>
<html>
<head>
<title>Tomcat1title>
head>
<body>
this is Tomcat1
body>
html>
8.7.2、网页访问nginx的haproxy代理,如图8-3、8-4所示
图8-3 访问nginx代理
通过访问的结果可以看出,我们访问nginx代理站点,能够访问Tomcat1和Tomcat2的服务,实现的负载均衡的效果。
以上便是docker容器在centos7环境下的部署搭建过程,以及Elasticsearch 2.x和Gogs以及Prometheus部署。
还有简单的docekr命令操作。