虚拟机系统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.向私有仓库中上传镜像
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,则能够加入自建网络中
这部分我把网上的教程基本都作了一遍,可是因为我对javaweb项目的结构了解不透彻,web应用部署也不熟悉,因此没能达到预期的要求。如下我分别列出Tocmcat和Mysql容器的启动和使用。还有部分参数解释。
虚拟机端口:容器端口 tomcat镜像指定
将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.
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
由于GFW问题致使遇到不少下载失败问题
1.安装Docker
2.安装k8s工具包
3.kubeadm 初始化
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访问服务了.