Docker与自动化部署

Docker安装与基本使用

虚拟机系统centOS7 minijava

Docker的应用场景node

1.简化配置,同一Docker的配置能够在不一样 环境中使用,下降了硬件要求和应用环境之间的耦合度. 
2.代码的流水线管理.代码从开发者的假期到最终在生产环境上的部署,须要通过不少的中间环境.而每个中间环境都有本身微小的蛤贝,Docker给应用提供一个从开发到上线均一致的环境,让代码的流水线变得简单. 
3.提升开发效率 
4.隔离应用,使应用松耦合 
5.快速部署 
docker [CMD] [options] 
基本命令与释义 
attach进入到正在运行的容器 
build由Dockerfile构建镜像 
commit由容器的改变建立一个新的镜像 
cp在容器中复制文件或文件夹到本地文件或文件夹中. 
logs获取容器日志 
network管理Docker网络 
node管理Docker集群节点 
pause暂停一个或多个容器内的全部进程 
port列表端口映射或用于容器的特定的映射 
ps列出容器 
pull从镜像仓库中拉出镜像 
push上传镜像 
rename重命名镜像 
restart重启一个容器 
rm 删除容器 
rmi删除镜像 
run在容器中运行命令 
search在Docker Hub中查找镜像 
service管理Docker服务 
start启动中止的容器 
stats显示容器的实时流资源使用统计信息 
stop中止正在运行的容器 
swarm管理Docker集群 
tag将镜像标记到存储库中 
top显示容器的正在运行的进程 
volume管理Docker卷mysql

docker run [options] 
经常使用参数与释义(主要介绍docker run)nginx

-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项; 
-d: 后台运行容器,并返回容器ID; 
-i: 以交互模式运行容器,一般与 -t 同时使用; 
-t: 为容器从新分配一个伪输入终端,一般与 -i 同时使用; 
–name=”nginx-lb”: 为容器指定一个名称; 
–dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致; 
–dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致; 
-h “mars”: 指定容器的hostname; 
-e username=”ritchie”: 设置环境变量; 
–env-file=[]: 从指定文件读入环境变量; 
–cpuset=”0-2” or –cpuset=”0,1,2”: 绑定容器到指定CPU运行; 
-m :设置容器使用内存最大值; 
–net=”bridge”: 指定容器的网络链接类型,支持 bridge/host/none/Container: 四种类型; 
–link=[]: 添加连接到另外一个容器; 
–expose=[]: 开放一个端口或一组端口;git

1.安装Docker 
这里写图片描述 
2.加入开机启动 
这里写图片描述 
3.启动Docker 
这里写图片描述 
4.下载镜像 
这里写图片描述 
5.查看本地镜像 
这里写图片描述 
6.启动容器 
这里写图片描述 
7.查看容器 
这里写图片描述github

搭建本地镜像仓库

仓库IP 192.168.247.142web

1.拉取registry镜像 
这里写图片描述redis

2.启动镜像仓库容器而且映射虚拟机端口5000和容器端口5000 
这里写图片描述sql

3.将本地目录/opt/data/registry挂载到容器内目录/tmp/registry中 
这里写图片描述docker

4.用busybox作试验 
这里写图片描述

5.在须要拉取镜像的虚拟机上建立/etc/docker/daemon.json(这一步很关键,解决的http和https服务冲突问题) 
这里写图片描述

6.向私有仓库中上传镜像

这里写图片描述

docker的网络配置

1.查看docker的全部网络 
这里写图片描述

2.指定查看bridge网络的配置 
这里写图片描述

3.启动两个busybox作实验,分别是container1和container2 
这里写图片描述

4.再次查看bridge,这时能够看到container1和container2已经被加入bridge中了 
这里写图片描述

5.也能够进入到container1中,用ifconfig查看网络配置 
这里写图片描述 
6.ping 
这里写图片描述 
7. 
这里写图片描述 
8.自建桥接模式的网络isolated_nw 
这里写图片描述 
9.查看网络能看到已经创建的isolated_nw 
这里写图片描述 
10.启动container3时指定网络isolated_nw,则能够加入自建网络中 
这里写图片描述

Tomcat与Mysql

这部分我把网上的教程基本都作了一遍,可是因为我对javaweb项目的结构了解不透彻,web应用部署也不熟悉,因此没能达到预期的要求。如下我分别列出Tocmcat和Mysql容器的启动和使用。还有部分参数解释。

  1. docker run -it –rm -p 8888:8080 tomcat:8.0

虚拟机端口:容器端口 tomcat镜像指定 
这里写图片描述

这里写图片描述

  1. docker run –name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag 
    指定容器名,mysql密码,镜像

这里写图片描述

将mysql与web应用容器相连的命令是: 
docker run –name some-app –link some-mysql:mysql -d application-that-uses-mysql 
启动web应用容器,用–link链接mysql容器

官方文档指出,–link几乎已经废弃

单容器应用部署实践

说明:部署一个单页面的应用 
参考网址:https://github.com/docker/labs/blob/master/beginner/chapters/votingapp.md

1.启动容器会自动下载dockersanples/static-site镜像 
这里写图片描述

2.启动容器 
这里写图片描述

3.查看端口 
这里写图片描述

4.查看容器运行状况 
这里写图片描述

5.在浏览器中输入地址和端口号,就能够看到网页 
这里写图片描述

6.建立文件夹flask-app 
这里写图片描述

7.flask-app下有四个文件 
这里写图片描述

8.构建镜像 
这里写图片描述

9.启动容器,将虚拟机8888端口映射到容器的5000端口 
这里写图片描述

10.在浏览器中输入网址,查看运行效果 
这里写图片描述

多容器应用部署实践

说明:用docker compose和docker deploy stack 部署 
参考网址:https://github.com/docker/labs/blob/master/beginner/chapters/votingapp.md 
应用说明:该应用基于如下镜像搭建 
Python 
Node.js 
redis 
.net 
postgress

1.下载工程 
这里写图片描述

2.建立Docker Swarm 
这里写图片描述

3.docker stack deploy是在Docker Swarm模式下docker-compose的替代 
这里写图片描述

4.查看启动的服务 
这里写图片描述

5.查看容器的运行状况 
这里写图片描述

6.浏览器中输入虚拟机地址,这是5000端口,是投票服务 
这里写图片描述

7.浏览器中输入虚拟机地址,这是5001端口,投票统计服务 
这里写图片描述

8.镜像更新,只须要修改虚拟机中的配置文件 
这里写图片描述 
9. 
这里写图片描述

10.重启app 
这里写图片描述

11.在浏览器中查看运行状况 
这里写图片描述

12. 
这里写图片描述
13. 
这里写图片描述 
14. 
这里写图片描述

Kubernetes安装和配置

1.建立多台centOS7 mini 系统的虚拟机备用 
2.修改主机名 
这里写图片描述
3.设置hosts 
这里写图片描述 
4.关闭防火墙 
这里写图片描述
5.安装etcd 
这里写图片描述 
6.修改etc配置文件/etc/etcd/etcd.conf 
这里写图片描述 
7.安装Docker 
这里写图片描述 
8.修改配置/etc/sysconfig/docker 
这里写图片描述 
9.将Docker设为开机启动项,启动Docker 
这里写图片描述 
10.安装Kubernetes 
这里写图片描述 
11.修改/etc/kubernetes/apiserver 
这里写图片描述 
12.修改/etc/kubernetes/config 
这里写图片描述 
13.启动服务并设置开机项自启动 
这里写图片描述 
14.修改/etc/kubernetes/config 
这里写图片描述 
15.修改/etc/kubernetes/kubelet 
这里写图片描述 
16.启动服务并设置开机自启动 
这里写图片描述 
17.在master上查看节点和各节点状态 
这里写图片描述 
18.安装flannel 
这里写图片描述 
19.修改配置/etc/sysconfig/flanneld 
这里写图片描述

用kubeadm安装kubernetes而且部署微服务

由于GFW问题致使遇到不少下载失败问题

1.安装Docker

2.安装k8s工具包

3.kubeadm 初始化 
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

Kuberbernetes基础概念

Pod

Pod是Kubernetes的最小操做单元,一个Pod能够由一个或多个容器组成;同一个Pod只能运行在同一主机上,共享相同的volumes,network,namespace

ReplicationController(RC)

RC用来管理Pod,一个RC能够由一个或多个Pod组成,在RC被建立后,系统会根据定义好的副本数来建立Pod数量. 
在运行过程当中,若是Pod数量小于定义的,就会重启中止的或从新分配Pod,反之则kill多余的.固然,也能够动态伸缩运行的Pods规模或熟悉.

Service

Service定义了一个Pod逻辑集合的抽象资源,Pod集合中的容器提供相同的共而过. 
集合根据定义的Label和Selector完成,当建立一个Service后,会分配一个ClusterIP,这个IP与定义的端口提供这个集合一个统一的访问接口,而且实现负载均衡.

Label

Label是用于区分Pod,Service,RC的key/value键值对;Pod,Service,RC能够有多个label,可是每一个label的key只能对应一个;主要是将Service的请求经过label转发给后端提供服务的Pod集合.

kubectl

客户端命令行工具,将接受的命令格式化后发送给kube-apiserver,做为整个系统的操做入口.

kube-apiserver

做为整个系统的控制入口,以REST API服务提供接口.

kube-controller-manager

用来执行整个系统中的后台任务,包括节点状态情况,Pod个数,Pods和Service的关联等.

kube-scheduler

负责节点资源管理,接受来自kube-apiserver建立Pods任务,并分配到某个节点.

etcd

负责节点间的服务发现和配置共享.

kube-proxy

运行在每一个计算节点上,负责Pod网络代理.定时从etcd获取到service信息来作相应的策略.

kubelet

运行在每一个计算节点上,做为agent,节后分配该节点的Pods任务及管理容器,周期性获取容器状态,反馈给kube-apiserver.

DNS

一个可选的DNS服务,用于为每一个Service对象建立DNS记录,这样全部的Pod就均可以经过DNS访问服务了.