搜索
您的当前位置:首页正文

先电云计算开发服务平台用户手册-XianDian-Paas-v2.1

来源:爱go旅游网


南京第五十五所技术开发有限公司

云计算开发服务平台

用户手册

版本:先电 paas-v2.1 发布日期:2017年4月21日

南京第五十五所技术开发有限公司

南京第五十五所技术开发有限公司

版本修订说明

修订版本 Cloud-paas-v1.2 Cloud-paas-v1.3 修订时间 2014年3月7日 修订说明 云计算开发服务平台用户手册。 2015年11月8日 新增框架说明,增加框架结构图。 Cloud-paas-v1.3.1 2016年1月18日 修订GRE网络下的PaaS平台搭建 Cloud-paas-v1.4 Cloud-paas-v2.0 2016年4月12日 软件包修改mongodb和ActiveMQ安装脚本 2016年12月15日 升级Docker作为服务平台底层 Cloud-paas-v2.0.5 2017年3月13日 更新国际化 Cloud-paas-v2.1 2017年4月21日 Jenkins结合gogs实现持续化集成

南京第五十五所技术开发有限公司

目 录

1、

Docker基础架构与环境说明 ................................................................................................................. 6

1.1 Docker架构及基本组件 ....................................... 6 1.2、系统要求 ................................................. 10 1.3、设备说明 ................................................. 10

1.3.1、网络说明 ............................................ 11 1.3.2、基础环境配置 ........................................ 11

2、容器服务管理平台Rancher安装搭建 ............................................................................................................. 12

2.1、Docker软件包安装配置 ...................................... 12 2.2、配置Docker 配置文件 ...................................... 12 2.3、启动服务 ................................................. 12 2.4、配置镜像仓库 .............................................. 12 2.5、镜像、容器服务基本操作 ..................................... 13

2.5.1 获取镜像操作 ......................................... 13 2.5.2 容器操作 ............................................. 15 2.5.3 终止容器 ............................................. 18 2.5.4 进入容器 ............................................. 18 2.5.5 容器内部操作 ......................................... 19 2.5.6 查看容器日志及相关操作 ................................ 20 2.5.7 导出和导入容器 ....................................... 23 2.5.8 删除容器 ............................................. 24 2.6、下载镜像 ................................................. 24

2.6.1 Server节点 .......................................... 24 2.6.2 client节点 .......................................... 24 2.7、启动容器服务 .............................................. 24

3、访问站点服务 ................................................................................................................................................... 24

3.1、浏览器访问 ................................................ 24 3.2、添加账号 ................................................. 25 3.3、添加主机 ................................................. 26

南京第五十五所技术开发有限公司

4、应用模板部署 ................................................................................................................................................... 27

4.1、内容管理系统(CMS) ....................................... 28

4.1.1、通过主页选择应用..................................... 28 4.1.2、启动服务 ............................................ 29 4.1.3、等待应用部署完成..................................... 29 4.1.4、部署完成后的修改..................................... 29 4.2、博客系统 ................................................. 33

4.2.1、部署Ghost .......................................... 33 4.2.2、部署Wordpress ...................................... 34 4.3、Git系统 .................................................. 35

4.3.1、通过主页选择应用..................................... 35 4.3.2、启动服务 ............................................ 35 4.3.3、服务安装完成 ........................................ 36 4.3.4、完成安装 ............................................ 36 4.4、仪表盘系统 ................................................ 38

4.4.1、通过主页选择应用..................................... 38 4.4.2、启动服务 ............................................ 38 4.4.3、等待应用部署完成..................................... 39 4.5、Jekins系统 ............................................... 40

4.5.1、通过主页选择应用..................................... 40 4.5.2、启动服务 ............................................ 40 4.5.3、等待应用部署完成..................................... 41 4.6、云网盘系统 ................................................ 41

4.6.1、通过主页选择应用..................................... 41 4.6.2、启动服务 ............................................ 41 4.6.3、等待应用部署完成..................................... 42 4.6.4、修改端口 ............................................ 42 4.6.5、访问服务 ............................................ 42 4.7、聊天系统 ................................................. 43

4.7.1、通过主页选择应用..................................... 43

南京第五十五所技术开发有限公司

4.7.2、启动服务 ............................................ 43 4.7.3、等待应用部署完成..................................... 43

5、Dockerfile定制镜像 .......................................................................................................................................... 45

5.1、利用 Commit 理解镜像构成 .................................. 45 5.2、使用 Dockerfile 定制镜像 .................................. 50

6、Jenkins结合gogs实现持续化集成 .................................................................................................................. 52

6.1.、部署环境 ................................................ 52

6.1.1、部署环境 ............................................ 52 6.1.2、Jenkins服务安装插件 ................................. 52 6.2、配置Gogs ................................................. 53

6.2.1、设定环境 ............................................ 53 6.2.2、创建名称为xiandian的仓库。 .......................... 54 6.2.3、克隆仓库到本地 ...................................... 54 6.3、部署jenkins .............................................. 54

6.3.1、配置系统管理远程连接SSH ............................. 54 6.3.2、创建项目 ............................................ 55 6.3.3、配置项目源码管理..................................... 55 6.3.4、配置触发器 .......................................... 55 6.3.5、构建环境 ............................................ 56 6.4、构建主机配置 .............................................. 56

6.4.1、创建工作目录 ........................................ 56 6.4.2、编写Dockerfile ..................................... 56 6.4.3、本地克隆镜像 ........................................ 57 6.5、测试环境 ................................................. 58

6.5.1、Jenkins持续集成测试 ................................. 58 6.5.2、重新提交代码查看效果 ................................. 59

南京第五十五所技术开发有限公司

1、 Docker基础架构与环境说明

1.1 Docker架构及基本组件

Docker是开发、测试、部署、运行应用的一个开放平台,目的让应用快速交付,快速上线。Docker遵循开源Apache 2.0协议。

Docker提供一个安全隔离用于打包和运行应用的轻量级环境—容器(Container),一个宿主机可以同时运行很多容器(数量远远超过虚拟机VM的方式)。

1)Docker引擎

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进行访问。

南京第五十五所技术开发有限公司

图1.1 Docker服务的架构图

2)Docker平台组成

图1.2 Docker服务组成图

运行一个Docker服务,组成包括Docker daemon服务器、Docker Client客户端、Docker Image镜像、Docker Registry库、Docker Contrainer容器。

南京第五十五所技术开发有限公司

(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。

最常使用的 Registry 公开服务是官方的 Docker Hub,这也是默认的 Registry,并拥有大量的高质量的官方镜像。除此以外,还有 CoreOS 的 Quay.io,CoreOS 相关的镜像存储在这里;Google 的 Google Container Registry,Kubernetes 的镜像使用的就是这个服务。

由于某些原因,在国内访问这些服务可能会比较慢。国内的一些云服务商提供了针对 Docker Hub 的镜像服务(Registry Mirror),这些镜像服务被称为加速器。常见的有 阿里云加速器、DaoCloud 加速器、灵雀云加速器等。

除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry。Docker 官方提供了 Docker Registry 镜像,可以直接使用做为私有 Registry 服务。在后续的相关章节中,会有进一步的搭建私有 Registry 服务的讲解。

开源的 Docker Registry 镜像只提供了 Docker Registry API 的服务端实现,足以支持 docker 命令,不影响使用。但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能。在官方的商业化版本 Docker Trusted Registry 中,提供了这些高级

南京第五十五所技术开发有限公司

功能。

除了官方的 Docker Registry 外,还有第三方软件实现了 Docker Registry API,甚至提供了用户界面以及一些高级功能。比如,VMWare Harbor 和 Sonatype Nexus。

1.2、系统要求

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

1.3、设备说明

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

图:网络架构图

南京第五十五所技术开发有限公司

1.3.1、网络说明

设备名: 1) Server节点

主要作为系统的运行指令的发送节点。 server:10.0.6.80 2) Client节点

主要为服务运行的节点,可以使用一个或者多个均可。 client1:10.0.6.81 client2:10.0.6.82 3) Registry节点

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

1.3.2、基础环境配置

在配置完网络接口之后,重启启动网络服务使更改生效: 1) 配置yum源

yum源使用centos7和提供的docker目录的yum源,如: [root@registry ~]# vi /etc/yum.repos.d/docker.repo [centos] name=centos

baseurl=file:///opt/centos gpgcheck=0 enabled=1 [docker] name=docker

baseurl=file:///opt/docker/ gpgcheck=0 enabled=1

2) 删除iptables防火墙规则

南京第五十五所技术开发有限公司

# iptables –F iptables –X iptables –Z

/usr/sbin/iptables-save 3) 修改系统内核 打开内核转发功能。

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

net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.all.rp_filter = 0 修改完成后使用命令生效。 # sysctl –p

2、容器服务管理平台Rancher安装搭建

2.1、Docker软件包安装配置

所有节点安装docker环境。 # yum -y install docker-io

2.2、配置Docker 配置文件

所有节点配置/etc/sysconfig/docker文件修改如下配置: ADD_REGISTRY='--add-registry 10.0.6.83:5000'

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

2.3、启动服务

# systemctl start docker.service systemctl enable docker.service

2.4、配置镜像仓库

将提供的软件包拷贝到镜像注册节点,而后进行如下操作:

南京第五十五所技术开发有限公司

首先切换到镜像存放目录

镜像仓库导入镜像。

# docker load < registry_latest.tar # docker images查询上传的image id)

#docker run -d -p 5000:5000 --restart=always --name registry registry:latest(只做一遍)

# docker tag c9bd19d022f6(此处为上一步查看的上传镜像的ID值) 10.0.6.83:5000/registry:latest

(默认提供的镜像导入格式为 文件名_版本号.tar格式,例如rancher_server_v1.1.4-xd.tar

此镜像导入后修改的名称为

10.0.6.83:5000/rancher/erver:1.1.4-xd, registry_latest.tar镜像导入后的结果为10.0.6.83:5000/registry:latest)

# docker push 10.0.6.83:5000/registry:latest 以此类推上传其他的镜像到私有仓库内。 注:

或者我们可以根据提供的install.sh脚本安装docker 环境,只需要把提供的软件包和install.sh脚本上传到仓库节点,配置好各节点yum,运行install.sh脚本完成所有节点安装,根据提示完成相关操作。 (2.4 此步骤只需要在registry节点操作)

2.5、镜像、容器服务基本操作 2.5.1 获取镜像操作

Docker Hub 上有大量的高质量的镜像可以用,从 Docker Registry 获取镜像的命令是 docker pull。其命令格式为:

docker pull [选项] [Docker Registry地址]<仓库名>:<标签>

具体的选项可以通过 docker pull --help 命令看到,这里说一下镜像名称的格式。 1)从docker hub拉取ubuntu镜像 $ docker pull ubuntu:14.04.3

南京第五十五所技术开发有限公司

14.04.3: Pulling from library/ubuntu bf5d46315322: Pull complete 9f13e0ac480c: Pull complete e8988b5b3097: Pull complete 40af181810e7: Pull complete e6f7c7e5c03e: Pull complete Digest:

sha256:147913621d9cdea08853f6ba9116c2e27a3ceffecf3b492983ae97c3d643fbbe

Status: Downloaded newer image for ubuntu:14.04.3 2)从私有库拉取ubuntu镜像

# docker pull 10.0.6.80:5000/ubuntu/14.04.3.3.tar:latest

Trying to pull repository 10.0.6.80:5000/ubuntu/14.04.3.3.tar ... latest: Pulling from 10.0.6.80:5000/ubuntu/14.04.3.3.tar 3)查看ubuntu镜像是否下载到本地 # docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

10.0.6.80:5000/rancher/agent-instance 6dccaa66a75d 6 months ago 330.9 MB

10.0.6.80:5000/rancher/agent v1.0.2.tar deb5c6987c83 6 months ago 454.3 MB

10.0.6.80:5000/ubuntu/14.04.3.3.tar

latest

v0.8.3.tar

ebdc8e295a2e 11 months ago 187.9 MB

注意:本地镜像都保存在docker宿主机的/var/lib/docker目录下。 # cd /var/lib/docker/ # ll total 8

drwx------. 15 root root 4096 Dec 24 19:58 containers drwx------. 5 root root 50 Dec 23 14:47 devicemapper drwx------. 3 root root 25 Dec 23 13:02 image

南京第五十五所技术开发有限公司

drwxr-x---. 3 root root 18 Dec 23 13:02 network drwx------. 6 root root 4096 Dec 24 19:58 tmp drwx------. 2 root root 6 Dec 23 13:02 trust drwx------. 3 root root 77 Dec 23 14:58 volumes 4)从镜像启动一个容器 例如启动ubuntu镜像

# docker run -t -i --name next_container ubuntu/14.04.3.tar:latest /bin/bash

2.5.2 容器操作

启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。

新建并启动所需要的命令主要为 docker run。

例如,下面的命令输出一个 “Hello World”,之后终止容器。 $ docker run ubuntu:14.04.3 /bin/echo 'Hello world' Hello world

这跟在本地直接执行 /bin/echo 'hello world' 几乎感觉不出任何区别。 下面的命令则启动一个 bash 终端,允许用户进行交互。 $ docker run -t -i ubuntu:14.04.3 /bin/bash root@af8bae53bdd3:/#

其中,-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。

在交互模式下,用户可以通过所创建的终端来输入命令,例如 root@af8bae53bdd3:/# pwd /

root@af8bae53bdd3:/# ls

bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括: (1). 检查本地是否存在指定的镜像,不存在就从公有仓库下载。

南京第五十五所技术开发有限公司

(2). 利用镜像创建并启动一个容器。

(3). 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。 (4). 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去。 (5). 从地址池配置一个 ip 地址给容器。 (6). 执行用户指定的应用程序。 (7). 执行完毕后容器被终止。 (8). 启动已终止容器。

可以利用 docker start 命令,直接将一个已经终止的容器启动运行。 # docker ps -a

CONTAINER ID IMAGE COMMAND

CREATED STATUS PORTS NAMES

6f3bbb08549f

ubuntu:14.04.3

\"/bin/echo 'Hello wor\" About a minute ago Exited (0)About a minute ago focused_northcutt

896ba7a2099d nginx \"nginx -g 'daemon off\" 2 hours ago Up 2 hours 443/tcp, 0.0.0.0:81->80/tcp web2

5a5fb3a18ea8 nginx \"nginx -g

'daemon off\" 4 hours ago Up 4 hours 0.0.0.0:80->80/tcp, 443/tcp webserver

3bdab40bc301 ubuntu:latest \"ip add

show\" 11 hours ago Created pedantic_wescoff

ea59a492cf02 192.168.200.11:5000/ubuntu/14.04.3.3.tar

\"latest ip add show\" 11 hours ago Created furious_dubinsky

cd507e407c1c

jamtur01/consul

\"/usr/sbin/consul age\" 11 hours ago Exited (1)10 hours ago tiny_goldstine

南京第五十五所技术开发有限公司

[root@client ~]# docker start cd507e407c1c cd507e407c1c

后台(background)运行:

更多的时候,需要让 Docker在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加 -d 参数来实现。

下面举两个例子来说明一下。如果不使用 -d 参数运行容器。

$ sudo docker run ubuntu:14.04.3 /bin/sh -c \"while true; do echo hello world; sleep 1; done\"

hello world hello world hello world hello world

容器会把输出的结果(STDOUT)打印到宿主机上面 如果使用了 -d 参数运行容器。

$ sudo docker run -d ubuntu:14.04.3 /bin/sh -c \"while true; do echo hello world; sleep 1; done\"

77b2dc01fe0f3f1265df143181e7b9af5e05279a884f4776ee75350ea9d8017a 此时容器会在后台运行并不会把输出的结果(STDOUT)打印到宿主机上面(输出结果可以用docker logs 查看)。

容器是否会长久运行,是和docker run指定的命令有关,和 -d 参数无关。 使用 -d 参数启动后会返回一个唯一的 id,也可以通过 docker ps 命令来查看容器信息。

$ sudo docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

77b2dc01fe0f ubuntu:14.04.3 /bin/sh -c 'while tr 2 minutes ago Up 1 minute agitated_wright

要获取容器的输出信息,可以通过 docker logs 命令。 $ sudo docker logs [container ID or NAMES] hello world

南京第五十五所技术开发有限公司

hello world hello world . . .

2.5.3 终止容器

可以使用 docker stop 来终止一个运行中的容器。

此外,当Docker容器中指定的应用终结时,容器也自动终止。 例如对于上一章节中只启动了一个终端的容器,用户通过 exit 命令或 Ctrl+d 来退出终端时,所创建的容器立刻终止。

终止状态的容器可以用 docker ps -a 命令看到。例如 sudo docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

ba267838cc1b ubuntu:14.04.3 \"/bin/bash\"

30 minutes ago Exited (0)About a minute ago trusting_newton

98e5efa7d997 training/webapp:latest \"python app.py\" About

an

hour

ago

Exited

0

34

minutes

ago

backstabbing_pike

处于终止状态的容器,可以通过 docker start 命令来重新启动。

此外,docker restart 命令会将一个运行态的容器终止,然后再重新启动它。

2.5.4 进入容器

在使用 -d 参数时,容器启动后会进入后台。 某些时候需要进入容器进行操作,有很多种方法,包括docker attach 命令等。下面示例如何使用docker attach命令。

$ sudo docker run -idt ubuntu

243c32535da7d142fb0e6df616a3c3ada0b8ab417937c853a9e1c251f499f550 $ sudo docker ps

CONTAINER ID IMAGE COMMAND CREATED

南京第五十五所技术开发有限公司

STATUS PORTS NAMES

243c32535da7 ubuntu:latest \"/bin/bash\" 18 seconds ago Up 17 seconds nostalgic_hypatia

$sudo docker attach nostalgic_hypatia root@243c32535da7:/#

注意:使用attach进入容器需要ctry+c。但是使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。

2.5.5 容器内部操作

检查容器主机名

root@1cec78443028:/# hostname 1cec78443028

查容器/etc/hosts文件

root@1cec78443028:/# cat /etc/hosts 127.0.0.1 localhost

::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 1cec78443028 检查容器接口

root@1cec78443028:/# ip a

1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever inet6 ::1/128 scope host

南京第五十五所技术开发有限公司

valid_lft forever preferred_lft forever

9: eth0: mtu 1500 qdisc noqueue state UP group default

link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff inet 172.17.0.2/16 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::42:acff:fe11:2/64 scope link valid_lft forever preferred_lft forever 检查容器的进程

root@1cec78443028:/# ps -aux

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME root 1 0.0 0.0 18164 2016 ? Ss 05:25 0:00 /bin/bash

root 18 0.0 0.0 15564 1148 ? R+ 05:35 0:00 2.5.6 查看容器日志及相关操作

获取守护式容器的日志

[root@l-client ~]# docker logs ubuntu_container hello world hello world hello world hello world 跟踪守护式容器的日志

[root@l-client ~]# docker logs -f ubuntu_container hello world hello world hello world hello world

跟踪守护式容器的最新日志

[root@l-client ~]# docker logs -ft ubuntu_container

COMMAND ps –aux

南京第五十五所技术开发有限公司

2016-12-23T06:08:52.604010000Z hello world 2016-12-23T06:08:53.679457000Z hello world 在容器级别启动syslog [root@l-client

~]#

docker

run

--log-driver=\"syslog\"

--name

ubuntu_container -d ubuntu:14.04.3.3 /bin/sh -c \"while true; do echo hello world; sleep 1; done\"

441c3de8dbcbfb09d9586c456d47417150dc7cdaf9cfb26597945b27a68bb310 查看守护式容器的进程

[root@l-client ~]# docker top ubuntu_container

UID PID PPID C STIME TTY TIME CMD

root 7356 965 0 06:26 ? 00:00:00 /bin/sh -c while true; do echo hello world; sleep 1; done

root 7485 7356 0 06:27 ? 00:00:00 sleep 1

docker stats命令查看容器占用系统资源情况 [root@l-client ~]# docker stats

CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O

441c3de8dbcb 0.10% 2.372 MB / 4.145 GB 0.06% 648 B / 648 B 2.385 MB / 0 B

586478b46dec 3.54% 169.9 MB / 4.145 GB 4.10% 0 B / 0 B 85.86 MB / 3.625 MB

CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O

441c3de8dbcb 0.10% 2.372 MB / 4.145 GB 0.06% 648 B / 648 B 2.385 MB / 0 B

586478b46dec 3.54% 169.9 MB / 4.145 GB 4.10% 0 B / 0 B 85.86 MB / 3.625 MB

南京第五十五所技术开发有限公司

CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O

441c3de8dbcb 0.09% 2.372 MB / 4.145 GB 0.06% 648 B / 648 B 2.385 MB / 0 B

586478b46dec 3.19% 170 MB / 4.145 GB 4.10% 0 B / 0 B 85.86 MB / 3.625 MB

CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O

441c3de8dbcb 0.09% 2.372 MB / 4.145 GB 0.06% 648 B / 648 B 2.385 MB / 0 B

586478b46dec 3.19% 170 MB / 4.145 GB 4.10% 0 B / 0 B 85.86 MB / 3.625 MB

CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O

441c3de8dbcb 0.12% 2.372 MB / 4.145 GB 0.06% 648 B / 648 B 2.385 MB / 0 B

在容器中运行后台任务 [root@l-client

~]#

docker

exec

-d

ubuntu_container

touch

/etc/new_config_file

查看容器

[root@l-client ~]# docker inspect ubuntu_container [ {

\"Id\":

\"441c3de8dbcbfb09d9586c456d47417150dc7cdaf9cfb26597945b27a68bb310\

\"Created\": \"2016-12-23T06:25:58.99238638Z\ \"Path\": \"/bin/sh\ \"Args\": [ \"-c\

\"while true; do echo hello world; sleep 1; done\"

南京第五十五所技术开发有限公司

], ……

查看容器的IP地址 [root@l-client

~]#

docker

inspect

--format='{{ .NetworkingSettings.IPAddress }}' ubuntu_container

172.17.0.2

2.5.7 导出和导入容器

导出容器

如果要导出本地某个容器,可以使用 docker export 命令。 $ sudo docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

7691a814370e ubuntu:14.04.3 \"/bin/bash\" 36 hours ago Exited (0)21 hours ago test

$ sudo docker export 7691a814370e > ubuntu.tar 这样将导出容器快照到本地文件。 导入容器快照

可以使用 docker import 从容器快照文件中再导入为镜像,例如 $ cat ubuntu.tar | sudo docker import - test/ubuntu:v1.0 $ sudo docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

test/ubuntu v1.0 9d37a6082e97 About a minute ago 171.3 MB

此外,也可以通过指定 URL 或者某个目录来导入,例如 $sudo

docker

import

http://example.com/exampleimage.tgz

example/imagerepo

*注:用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢

南京第五十五所技术开发有限公司

弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。

2.5.8 删除容器

可以使用 docker rm 来删除一个处于终止状态的容器。 例如 $sudo docker rm trusting_newton trusting_newton

如果要删除一个运行中的容器,可以添加 -f 参数。Docker 会发送 SIGKILL 信号给容器。

2.6、下载镜像 2.6.1 Server节点

# docker pull rancher/server:v1.1.4-xd

2.6.2 client节点

# docker pull rancher/agent-instance:v0.8.3 # docker pull rancher/agent:v1.0.2

2.7、启动容器服务

在server节点启动

# docker run -d --restart=always -p 80:8080 rancher/server:v1.1.4-xd 运行完毕后可以通过docker ps –a 命令查看运行的情况。

3、访问站点服务

3.1、浏览器访问

打开浏览器,打开http://10.0.6.80/访问web页面,如下所示。

南京第五十五所技术开发有限公司

3.2、添加账号

打开系统管理,选择访问设置,访问类型选择Local,创建并设置一个Admin的用户。

南京第五十五所技术开发有限公司

3.3、添加主机

打开基础架构,点击主机,选择添加。

选择保存,进入下一步。

注意:如果是Server节点也是充当Client节点的话则在第四步要填写自己的IP地址

复制第五步的提示,将他粘贴到所有的计算节点运行。(不包括Server节点)

南京第五十五所技术开发有限公司

完成后可以在主机位置查看主机列表。 完成之后刷新可显示主机。

4、应用模板部署

这里的应用部署主要通过首页应用模板部署。

南京第五十五所技术开发有限公司

4.1、内容管理系统(CMS)

部署内容管理系统,这里选用concrete5应用。

4.1.1、通过主页选择应用

南京第五十五所技术开发有限公司

4.1.2、启动服务

完成后点击启动,完成服务的部署。

4.1.3、等待应用部署完成

4.1.4、部署完成后的修改

(1)部署成功显示

部署成功后,通过应用栈列表可以查看该服务的情况,发现没有映射端口,所以我们要修改应用的端口。

(2)修改CMSMysql的端口 点击CMSMysql进入,选择编辑。

南京第五十五所技术开发有限公司

分配一个23306端口,而后点击保存。

(3)修改Concrete5App 端口 点击Concrete5App进入,选择编辑。

分配一个8085端口,而后点击保存

(4)分配容器文件权限 点开执行命令行。

南京第五十五所技术开发有限公司

4.2.5、完成安装

再次进入此应用的应用栈,发现容器带有的端口号。

点击端口号访问服务。

南京第五十五所技术开发有限公司

注意:server填mysql容器的ip,其他的按照创建concrete5服务时的信息填写

输入在安装服务设定的用户和密码进入,在本次为用户名为admin,密码为password 进入后可以点击开始自己的工作。

南京第五十五所技术开发有限公司

4.2、博客系统

部署博客系统,这里选用Ghost系统和wordpress应用。

4.2.1、部署Ghost

(1)通过主页选择应用

(2)启动服务

部署之前修改访问的端口,否则会产生端口冲突问题。

南京第五十五所技术开发有限公司

完成后点击启动,完成服务的部署。

4.2.2、部署Wordpress

(1)通过主页选择应用

(2)启动服务

部署之前修改访问的端口,否则会产生端口冲突问题。

完成后点击启动,完成服务的部署。

南京第五十五所技术开发有限公司

服务部署完成后,如下所示,点击端口链接访问。

4.3、Git系统

部署Git系统,这里选用gogs应用。

4.3.1、通过主页选择应用

4.3.2、启动服务

部署之前修改访问的端口,否则会产生端口冲突问题。

南京第五十五所技术开发有限公司

完成后点击启动,完成服务的部署。

4.3.3、服务安装完成

4.3.4、完成安装

创建数据库

根据提示安装配置文件,首先确定应用部署的主机IP,然后填写数据库的主机IP,其他的

南京第五十五所技术开发有限公司

变量根据创建此项目时候确定的环境参数确定。

完成后点击安装。 安装完成后如下所示:

南京第五十五所技术开发有限公司

4.4、仪表盘系统

部署仪表盘系统,这里选用Grafana应用。

4.4.1、通过主页选择应用

4.4.2、启动服务

南京第五十五所技术开发有限公司

完成后点击启动,完成服务的部署。

4.4.3、等待应用部署完成

(1)点开主页,注册用户

(2)进入系统

南京第五十五所技术开发有限公司

4.5、Jekins系统

部署持续集成系统,这里选用Jenkins应用。

4.5.1、通过主页选择应用

4.5.2、启动服务

完成后点击启动,完成服务的部署。

南京第五十五所技术开发有限公司

4.5.3、等待应用部署完成

(1)网页打开

4.6、云网盘系统

部署云网盘系统,这里选用owncloud应用。

4.6.1、通过主页选择应用

4.6.2、启动服务

完成后点击启动,完成服务的部署。

南京第五十五所技术开发有限公司

4.6.3、等待应用部署完成

4.6.4、修改端口

修改80 端口为8086

4.6.5、访问服务

首先创建一个访问的用户和密码,点击安装完成。

南京第五十五所技术开发有限公司

4.7、聊天系统

部署聊天系统,这里选用Rocket Chat应用。

4.7.1、通过主页选择应用

4.7.2、启动服务

完成后点击启动,完成服务的部署。

4.7.3、等待应用部署完成

南京第五十五所技术开发有限公司

4.7.4、完成安装 (1)打开网页 点击链接进入

(2)注册用户

(3)修改服务访问地址

南京第五十五所技术开发有限公司

(4)进入聊天

5、Dockerfile定制镜像

5.1、利用 Commit 理解镜像构成

镜像是容器的基础,每次执行 docker run 的时候都会指定哪个镜像作为容器运行的基础。在之前的例子中,所使用的都是来自于 Docker Hub 的镜像。直接使用这些镜像是可以满足一定的需求,而当这些镜像无法直接满足需求时,就需要定制这些镜像。接下来就将讲解如何定制镜像。

现在以定制一个 Web 服务器为例子,来讲解镜像是如何构建的。 在制定镜像前,我们先将nginx镜像push到镜像仓库。 [root@registry ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

172.24.3.7:5000/rancher/server v1.1.4-xd 271f7878a277 6 days ago 877.2 MB

南京第五十五所技术开发有限公司

docker.io/nginx latest 01f818af747d 2 weeks ago 181.6 MB

172.24.3.7:5000/registry latest c9bd19d022f6 12 weeks ago 33.27 MB

docker.io/registry latest c9bd19d022f6 12 weeks ago 33.27 MB

172.24.3.7:5000/rancher/agent-instance 6dccaa66a75d 7 months ago 330.9 MB

172.24.3.7:5000/rancher/agent v1.0.2 deb5c6987c83 7 months ago 454.3 MB

# docker tag 271f7878a277 (此处为10.0.6.83:5000/nginx:latest

# docker push 10.0.6.83:5000/nginx:latest 用镜像nginx启动容器:

# docker run --name webserver -d -p 80:80 nginx

这条命令会用 nginx 镜像启动一个容器,命名为 webserver,并且映射了 80 端口,这样可以用浏览器去访问这个 nginx 服务器。 直接用浏览器访问的话,会看到默认的 Nginx 欢迎页面。 nginx

镜像的

ID

值)

v0.8.3

现在,假设非常不喜欢这个欢迎页面,希望改成欢迎 Docker 的文字,可以使用 docker exec命令进入容器,修改其内容。 # docker exec -it webserver bash

root@3729b97e8226:/# echo '

Hello, Xiandian!


Hello,

南京第五十五所技术开发有限公司

Docker!

' > /usr/share/nginx/html/index.html

root@3729b97e8226:/# exit

以交互式终端方式进入 webserver 容器,并执行了 bash 命令,也就是获得一个可操作的 Shell。然后,用

Hello, Xiandian!


Hello, Docker!

覆盖了 /usr/share/nginx/html/index.html 的内容。

现在再刷新浏览器的话,会发现内容被改变了。

修改了容器的文件,也就是改动了容器的存储层。可以通过 docker diff 命令看到具体的改动。

$ docker diff webserver C /root

A /root/.bash_history C /run C /usr C /usr/share C /usr/share/nginx C /usr/share/nginx/html

C /usr/share/nginx/html/index.html C /var C /var/cache C /var/cache/nginx

A /var/cache/nginx/client_temp A /var/cache/nginx/fastcgi_temp A /var/cache/nginx/proxy_temp A /var/cache/nginx/scgi_temp

南京第五十五所技术开发有限公司

A /var/cache/nginx/uwsgi_temp

现在定制好了变化,希望能将其保存下来形成镜像。

要知道,当运行一个容器的时候(如果不使用卷的话),做的任何文件修改都会被记录于容器存储层里。而 Docker 提供了一个 docker commit 命令,可以将容器的存储层保存下来成为镜像。在原有镜像的基础上,再叠加上容器的存储层,并构成新的镜像。以后运行这个新镜像的时候,就会拥有原有容器最后的文件变化。语法格式为:

docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]

可以用下面的命令将容器保存为镜像:

$ docker commit \\

--author \"xiandian 1daoyun\" --message \"修改了默认网页\" \\ webserver \\ nginx:v2

sha256:07e33465974800ce65751acc279adc6ed2dc5ed4e0838f8b86f0c87aa1795214

可以在 docker images 中看到这个新定制的镜像: $ docker images nginx

REPOSITORY TAG IMAGE ID CREATED SIZE

nginx v2 07e334659748 9 seconds ago 181.5 MB

nginx 1.11 05a60462f8ba 12 days ago 181.5 MB

nginx latest e43d811ce2f4 4 weeks ago 181.5 MB

还可以用 docker history 具体查看镜像内的历史记录,如果比较 nginx:latest 的历史记录,会发现新增了刚刚提交的这一层。

南京第五十五所技术开发有限公司

$ docker history nginx

IMAGE CREATED CREATED BY SIZE COMMENT

07e334659748 54 seconds ago nginx -g daemon off; 95 B 修改了默认网页

e43d811ce2f4 4 weeks ago /bin/sh -c #(nop) CMD [\"nginx\" \"-g\" \"daemon 0 B

4 weeks ago /bin/sh -c #(nop) EXPOSE 443/tcp 80/tcp 0 B

4 weeks ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx/ 22 B

4 weeks ago /bin/sh -c apt-key adv --keyserver hkp://pgp. 58.46 MB

4 weeks ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.11.5-1 0 B

4 weeks ago /bin/sh -c #(nop) MAINTAINER NGINX Docker Ma 0 B

4 weeks ago /bin/sh -c #(nop) CMD [\"/bin/bash\"] 0 B

4 weeks ago /bin/sh -c #(nop)ADD file:23aa4f893e3288698c 123 MB

新的镜像定制好后,可以来运行这个镜像。

docker run --name web2 -d -p 81:80 nginx:v2

这里命名为新的服务为 web2,并且映射到 81 端口。如果是 Docker for Mac/Windows 或 Linux 桌面的话,就可以直接访问 http://localhost:81 看到结果,其内容应该和之前修改后的 webserver 一样。

至此,第一次完成了定制镜像,使用的是 docker commit 命令,手动操作给旧的镜像添加了新的一层,形成新的镜像,对镜像多层存储应该有了更直观的感觉。

南京第五十五所技术开发有限公司

注意:慎用 docker commit,使用 docker commit 命令虽然可以比较直观的帮助理解镜像分层存储的概念,但是实际环境中并不会这样使用。

docker commit 命令除了学习之外,还有一些特殊的应用场合,比如被入侵后保存现场等。但是,不要使用docker commit 定制镜像,定制行为应该使用 Dockerfile 来完成。下面的章节就来讲述一下如何使用 Dockerfile 定制镜像。

5.2、使用 Dockerfile 定制镜像

1)创建镜像目录

[root@client /]# mkdir xiandian_web [root@client /]# cd xiandian_web/

[root@client static_web]# touch Dockerfile [root@client static_web]# ll total 0

-rw-r--r--. 1 root root 0 Dec 25 13:59 Dockerfile 2)编辑新镜像内容

[root@client static_web]# vi Dockerfile # Version: 0.0.1 FROM nginx:latest

MAINTAINER CETC55 \"xaindain\" RUN echo 'Wlcome to XianDian' \\ >/var/www/html/index.html EXPOSE 80

3)执行命令来构建新镜像 ~

[root@client

xiandian_web]#

sudo

-t=\"1daoyun/xiandian_web\" .

ending build context to Docker daemon 2.048 kB Step 1 : FROM nginx:latest

docker

build

南京第五十五所技术开发有限公司

---> 01f818af747d

Step 2 : MAINTAINER CETC55 \"xiandian\" ---> Using cache ---> 131b70efae1b Step

3

:

RUN

echo

'Welcome

to

XianDian' >/usr/share/nginx/html/index.html

---> Running in 50cba60cd0b6 ---> eed59c5ace7f

Removing intermediate container 50cba60cd0b6 Step 4 : EXPOSE 80

---> Running in 2bd05b6f51d0 ---> 39aeca37cfc3

Removing intermediate container 2bd05b6f51d0 Successfully built 39aeca37cfc3

4)创建成功后用该镜像启动一个新容器,查看网页

[root@client xiandian_web]# docker run -d -p 88:80 --name dockerfile 1daoyun/xiandian_web:latest

通过http://localhost:88查看网页。

南京第五十五所技术开发有限公司

6、Jenkins结合gogs实现持续化集成

6.1.、部署环境 6.1.1、部署环境

首先利用开发服务平台部署Jenkins和Gogs应用,部署完毕后登陆两个平台,完成相关初始化配置操作。将nginx_latest.tar文件导入到registry仓库内。

6.1.2、Jenkins服务安装插件

在Jenkins服务中安装插件。插件安装包在PAAS的ISO包中的jenkins.zip包。 (1) 安装ssh插件

点击jenkins服务面板中“系统管理”

选择“管理插件”

南京第五十五所技术开发有限公司

选择“选择文件”,选择jenkins.zip包中的ssh.hpi安装包,点击“上传”

至此ssh插件就安装完成了。 (2)安装其他插件

按照上面的步骤依次顺序安装其他插件。 安装顺序:structs.hpi

完成后执行以下操作。

git-client.hpi workflow-step-api.hpi workflow-scm-step.hpi git.hpi

6.2、配置Gogs 6.2.1、设定环境

首先创建xiandian用户并设定密码,完成后登陆gogs平台。

南京第五十五所技术开发有限公司

6.2.2、创建名称为xiandian的仓库。

6.2.3、克隆仓库到本地

使用该http地址在client节点镜像git克隆操作。

# git clone http://10.0.6.81:10080/xiandian/xiandian.git Cloning into 'xiandian'...

warning: You appear to have cloned an empty repository.

6.3、部署jenkins

6.3.1、配置系统管理远程连接SSH

即配置远程容器运行节点,构建节点IP地址及相关信息。

南京第五十五所技术开发有限公司

6.3.2、创建项目

利用Jenkins构建名称为xiandian_test的项目

6.3.3、配置项目源码管理

选择源码地址为gogs分配的git地址。

6.3.4、配置触发器

配置触发器触发间隔为1分钟(类似于crontab的配置模式)

南京第五十五所技术开发有限公司

6.3.5、构建环境

选择构建主机地址和使用的相关命令,构建ssh主机为远程构建地址。

运行命令为以下:

docker ps -a |grep -w \"xd_web\" |awk '{print $1}' | xargs -i docker rm -f {}

docker images |grep -w \"xd_web\" |awk '{print $3}' |xargs docker rmi -f docker build -t xd_web /root/xd_web

docker run -itd -p 8585:80 --name xd_web xd_web 完成后点击保存。

6.4、构建主机配置

登陆远程构建容器主机,完成以下操作。

6.4.1、创建工作目录

# mkdir /root/xd_web

6.4.2、编写Dockerfile

进入工作目录编写Dockerfile文件如下

南京第五十五所技术开发有限公司

FROM nginx:latest EXPOSE 80 WORKDIR /root

RUN rm -rf /usr/share/nginx/html/*

RUN git clone http://10.0.6.81:10080/xiandian/xiandian.git RUN mv xiandian/index.html /usr/share/nginx/html/ RUN rm -r xiandian

注:git地址为gogs的创建仓库地址。

6.4.3、本地克隆镜像

进入6.2.3克隆的目录,完成以下操作。 1) 编写index.html文件 编写内容如下 # cat index.html

XianDian


Test Page!

2) 提交编写内容 # git add index.html

#gitconfig--globaluser.email\"********************\"# git config --global user.name \"xiandian\" # git commit -am \"add index.html\"

# git remote add origin http://10.0.6.81:10080/xiandian/xiandian.git # git push -u origin master

完成后填写gogs的用户和密码,完成操作。点击gogs网页可以查看此次更新内容。

南京第五十五所技术开发有限公司

6.5、测试环境

6.5.1、Jenkins持续集成测试

进入Jenkins的xiandian_test项目内,点击“立即构建”按钮完成环境构建。

完成后查看部署状态点击进入

查询部署的状态输出结果

南京第五十五所技术开发有限公司

完成后打开对应的容器运行的网页查看运行结果

6.5.2、重新提交代码查看效果

进入克隆目录完成index.html修改操作,修改如下: # cat index.html

XianDian


Test Page!

This is Test Page!

完成后将修改内容提交到git库,后再次执行jenkins构建 应用构建完成后如下所示

南京第五十五所技术开发有限公司

访问主页查看

至此,持续集成测试完成!

因篇幅问题不能全部显示,请点此查看更多更全内容

Top