目标
将基于Spring Boot的【用户】项目部署到Docker,具体效果见下图
IT基础设施简介
IT 基础设施领域及应用环境的发展(图片来自网络)
特点
- 物理机器:
- 优点:一台硬件服务器,构建的应用程序时使用的是宿主操作系统提供的全部资源
- 缺点:如果需要扩展,则需要添加一台相对固定硬件服务器;扩展数量增加,成本也会增加,对于一些有高低峰硬件需求并不友好;且每台机器都要配置相应应用运行环境
- 虚拟机:
- 优点:不同的应用,不时的时间,需要的硬件资源是不一样的;通过虚拟化来优化IT基础设施的使用;很多云服务就可以按时间段,按资源需求购买虚拟机资源
- 缺点:虚拟机占用资源还是比较多,哪怕应用很小,虚拟机也要几百M;启动慢;需要登录;
- 容器化:
- 优点:基于虚拟机缺点,Linux出现了一个Linux容器(LXC, Linux Containers )技术,面向应用,简单、快速、一次性;Docker是LXC的一种封装
- 缺点:并不适用所有的应用场景,比如数据库;隔离性和工具也是需要持续增强的
Docker简介
- Docker
- 一个开源的应用容器引擎;开发者可以打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上;使用使用沙箱机制,容器性能开销极低;
- 优点:
- 提供一次性环境,简化配置、快速搭建一致应用环境,且能快速部署
- 提供弹性云服务,Docker容器可随时创建,动态扩容和缩容
- 便于组建微服务架构应用,通过多个容器,一台机器可跑更多工作负载
- 缺点:
- 在实际的业务中,当容器数量多了后,是存在困难的:编排、管理和调度等各个方面,都不容易。就需要一套管理系统,对Docker及容器进行更高级更灵活的管理
- Kubernetes
- 用于自动部署,扩展和管理容器化应用程序的开源系统;将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现
- Rancher
- 一个开源的企业级容器管理平台;Rancher提供了在生产环境中使用的管理Docker和Kubernetes的容器部署与管理平台
Docker主要概念
- 仓库(Registry)
- 类似于Git仓库,但是用于存放镜像的,也分本地镜像仓库和公共镜像仓库,官方的公共镜像仓库是hub.docker.com,阿里、腾讯、网易等也提供有公有仓库
- 开源仓库工具是Harbor
- 可通过pull/push命令将公共仓库镜像拉取到本地或将本地仓库镜像推送到公共仓库
- 镜像(Image)
- 容器的模板,里面包装了依赖、配置、环境、自身源代码
- 可以直接使用第三方的镜像,如MySQL、Redis等
- 也可以自己生成镜像,并依赖一些基础第三方镜像提供环境支持,如oraclejre8 、 Nginx ,像我们要部署的前端项目、后端项目
- 容器(Container)
- 镜像的一次具体的运行,就产生了一个容器
- 容器根据镜像的依赖、配置提供服务
镜像与容器的关系,就相当于类与对象的关系,镜像定义的规范,容器是镜像的实例化,一个镜像可以实例化多个容器
Docker安装
基础要求
一台Linux服务器,最好是CentOS主机
在CentOS主机上安装Docker,具体见附件《VMWare安装CentOS7虚拟主机.docx》
安装
在CentOS主机上安装Docker,具体见附件《CentOS7安装Docker.docx》
Docker常用功能与命令
- 网络相关
- 主要处理网络管理,如创建、删除等操作
- 见附件《Docker常用命令.txt》的网络相关
- 镜像相关
- 主要处理镜像管理,如创建、摘取、推送等操作
- 见附件《 Docker常用命令.txt 》的镜像相关
- 容器相关
- 主要处理容器管理,如运行、查看等操作
- 见附件《 Docker常用命令.txt 》的容器相关
作为基于Docker容器化的基础,熟悉并掌握这些命令很重要
网络相关
- Docker默认使用桥接方式(Bridge),在宿主机虚拟一个Docker容器网桥(docker0,通过ip addr查看)
- Docker每启动一个容器,都会根据容器网桥的网段,分配一个IP地址,称为容器IP
- 容器网桥地址,也就默认是网 关地址,负责启动容器的数据转发
- 上述的这些处理模式,就构造了一个Docker容器的完整内部网络,但不可被宿主机外部访问
Docker中的所有的网络模式如下图
常用命令:具体见附件《Docker常用命令.txt》
镜像相关
Dockerfile
- 一个用来构建镜像的文本文件,文本内容包含了构建镜像所需的指令和说明
- 主要包含以下常用指令
- FROM,指定基础镜像,位置必须是最前
- MAINTAINER,维护者信息
- VOLUME,指定持久化挂载目录,要求镜像程序的所有数据必须写入到该文件;在使用镜像生成容器里,会在宿主机指定相应目录将容器的该目录下的数据落地到宿主机,保证一般情况下容器的无状态性
- WORKDIR,指定工作目录,类似于cd命令
- RUN,构建镜像时执行的命令,可多个并生效,比如基础依赖上要安装一些工具,供运行代码使用
- CMD,为新容器生成时的命令,会在容器启动时执行,多个时只有最后一个生效,一般有ENTRYPOINT时不会添加CMD
- ADD,将本地文件添加到容器中
- COPY,拷贝文件
- ENTRYPOINT,为容器启动时指定默认执行,一般为容器启动时启用命令
- EXPOSE,指定与外界交互端口
一张网络图片形象表达了这些常用指令特点
实例:查看示例项目《用户》后端的Dockerfile
镜像
- 作为容器模板,如果是自定义的镜像,需要在运行前打包好,普通项目通过添加一个Dockerfile,并使用docker build命令就可打包镜像到本地镜像仓库
- 一些常用的、知名的第三方镜像都在一些公共镜像仓库中存在,可直接通过docker pull命令拉取镜像构建自己的服务,如MySQL、Redis等;默认是从该hub.docker.com公有镜像仓库中拉取
- 自定义镜像,使用docker build命令打包镜像,并且可以将其推送到远端镜像仓库,如企业内部Harbor
- 远程镜像仓库的作用,主要是在Docker的集群部署时,各个Docker引擎用于共享镜像
命令:具体见附件《Docker常用命令.txt》的镜像相关
容器
- 对于第三方镜像,或自定义镜像构建成功后,并在本地镜像仓库存在后,可直接使用docker run命令运行成容器,对外提供服务
- docker run命令具有一系列参数,可指定运行网络、挂载目录、映射宿主端口、指定容器名称等
- 容器正常运行后,Docker还提供了一系列的命令技术容器的,比如停止容器、启动容器、查看容器详情、查看容器资源使用情况、查看容器日志、进入容器等
命令:具体见附件《Docker常用命令.txt》的容器相关
实践:基于Spring Boo的【用户】项目的Docker部署
步骤
- 创建网络,创建172.19.0.0/16网段的内部网络
- 构建镜像,将【用户】项目的.jar包文件和Dockfile上传到服务器规划目录,使用命令构建镜像,命令是:docker build -t sanbao/demo .
- 创建容器,镜像存在后,使用命令创建容器实例,将端口映射到宿主机的8888端口,命令是:docker run -p 8888:80 --net
demo-network --name demo-1 -d
--restart=always sanbao/demo - 访问服务,镜像成功运行后,可通过http://宿主机ip:8888/swagger-ui.html访问后端服务的Swagger文档页面
源文件和命令:具体见附件《demo.zip》、《demo项目的Docker命令.txt》
基于Docker的多负载部署
- 下图是通过在不同的引擎中部署项目的前端、后端
- 然后通过Nginx分别实现前端、后端的多负载的负载均衡,来保证服务的高可用
- 在实际企业项目中,会通过前面介绍的k8s、Rancher等工具,对底层的Docker集群进行更方便的管理,如动态扩容/缩容、流水线等
欢迎来到testingpai.com!
注册 关于