Docker与自动化部署
转自 : https://blog.csdn.net/qq_37214319/article/details/72230483Docker安装与基本使用虚拟机系统centOS7 miniDocker的应用场景1.简化配置,同一Docker的配置可以在不同 环境中使用,降低了硬件要求和应用环境之间的耦合度. 2.代码的流水线管理.代码从开发者的假期到最终在生产环境上的部署,需要经过很多的中间环境.而
转自 : https://blog.csdn.net/qq_37214319/article/details/72230483
Docker安装与基本使用
虚拟机系统centOS7 mini
Docker的应用场景
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卷
docker run [options]
常用参数与释义(主要介绍docker run)
-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=[]: 开放一个端口或一组端口;
1.安装Docker
2.加入开机启动
3.启动Docker
4.下载镜像
5.查看本地镜像
6.启动容器
7.查看容器
搭建本地镜像仓库
仓库IP 192.168.247.142
1.拉取registry镜像
2.启动镜像仓库容器并且映射虚拟机端口5000和容器端口5000
3.将本地目录/opt/data/registry挂载到容器内目录/tmp/registry中
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容器的启动和使用。还有部分参数解释。
- docker run -it –rm -p 8888:8080 tomcat:8.0
虚拟机端口:容器端口 tomcat镜像指定
- 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访问服务了.
更多推荐
所有评论(0)