Docker与自动化部署

转自 : 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容器的启动和使用。还有部分参数解释。

  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访问服务了.

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页