精华内容
下载资源
问答
  • 容器化部署方案
    千次阅读
    2021-01-27 13:15:07
    • 前端容器化部署方案,以vue项目为例,直接拉取vue项目的源码,将编译打包均放在服务器端进行,打包后的静态文件挂载进nginx镜像里,并替换掉nginx的配置文件,主要是为了解决路由history模式下刷新404的问题,镜像制作完成后,完善yaml文件然后使用k8s进行部署,如此就完成了前端的容器化部署。

      前端容器化部署的思路和后端服务的容器化部署几乎一样,只是前端镜像均是挂载了前端代码文件的nginx镜像,后端服务是直接编译后制作出来的镜像。

      参考了网上的一些前端容器化部署方案,有些是本地进行编译打包再传到新的代码仓库,在服务端直接拉取打包完成的代码进行操作,这样的优点是在服务端部署时间会很快,缺点是每次都要手动编译打包后再传入另外的代码仓库,与我们自动化部署的理念不是很相符;

      本文采取的方案是将这一系列动作都放在了服务端进行,优点是可以达到完全的自动化部署效果,无需进行额外的手动操作,缺点是部署时间较长,一般来说编译和打包时间需要好几分钟。
      在这里插入图片描述

    更多相关内容
  • 容器化部署方案

    千次阅读 2021-07-21 16:47:21
    一级目录 1. 容器化部署方案 二级目录1.1. 容器化架构 二级目录1.2. 整体流程 流程说明: 帮助文档 快捷键目录标题文本样式列表链接代码片表格注脚注释自定义列表LaTeX 数学公式插入甘特图插入UML图插入Mermaid...

    一级目录 1. 容器化部署方案

    二级目录1.1. 容器化架构

    在这里插入图片描述

    二级目录1.2. 整体流程

    在这里插入图片描述

    流程说明:

    在这里插入图片描述

    帮助文档
    快捷键目录标题文本样式列表链接代码片表格注脚注释自定义列表LaTeX 数学公式插入甘特图插入UML图插入Mermaid流程图插入Flowchart流程图插入类图
    目录复制

    这里写目录标题

    一级目录 2. 容器化组件说明

    容器化部署流程主要包含容器编排平台Kubesphere、源代码仓库Gitlab、容器镜像仓库Harbor。

    二级目录2.1. KubeSphere

    三级目录2.1.1. KubeSphere介绍rancher

    KubeSphere 是在 Kubernetes 之上构建的面向云原生应用的分布式操作系统,支持多云与多集群管理,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。它的架构可以非常方便地使第三方应用与云原生生态组件进行即插即用 (plug-and-play) 的集成。
    作为全栈化容器部署与多租户管理平台,KubeSphere 提供了运维友好的向导式操作界面,帮助企业快速构建一个强大和功能丰富的容器云平台。它拥有 Kubernetes 企业级服务所需的最常见功能,例如 Kubernetes 资源管理、DevOps、多集群部署与管理、应用生命周期管理、微服务治理、日志查询与收集、服务与网络、多租户管理、监控告警、事件审计、存储、访问控制、GPU 支持、网络策略、镜像仓库管理以及安全管理等。
    KubeSphere 围绕 Kubernetes 集成了各种生态系统的工具,提供了一致的用户体验以降低复杂性。同时,它还具备 Kubernetes 尚未提供的新功能,旨在解决 Kubernetes 本身存在的存储、网络、安全和易用性等痛点。KubeSphere 不仅允许开发人员和 DevOps 团队在统一的控制台中使用他们喜欢的工具,而且最重要的是,这些功能与平台松散耦合,因为他们可以选择是否安装这些可拔插组件。

    三级目录2.1.2. KubeSphere架构

    在这里插入图片描述

    三级目录2.1.3. KubeSphere模块列表

    ks-apiserver 整个集群管理的 API 接口和集群内部各个模块之间通信的枢纽,以及集群安全控制。
    ks-console 提供 KubeSphere 的控制台服务。
    ks-controller-manager 实现业务逻辑的,例如创建企业空间时,为其创建对应的权限;或创建服务策略时,生成对应的 Istio 配置等。
    metrics-server Kubernetes 的监控组件,从每个节点的 Kubelet 采集指标信息。
    Prometheus 提供群集,节点,工作负载,API对象的监视指标和服务。
    Elasticsearch 提供集群的日志索引、查询、数据管理等服务,在安装时也可对接您已有的 ES 减少资源消耗。
    Fluent Bit 提供日志接收与转发,可将采集到的⽇志信息发送到 ElasticSearch、Kafka。
    Jenkins 提供 CI/CD 流水线服务。
    SonarQube 可选安装项,提供代码静态检查与质量分析。
    Source-to-Image 将源代码自动将编译并打包成 Docker 镜像,方便快速构建镜像。
    Istio 提供微服务治理与流量管控,如灰度发布、金丝雀发布、熔断、流量镜像等。
    Jaeger 收集 Sidecar 数据,提供分布式 Tracing 服务。
    OpenPitrix 提供应用程序生命周期管理,例如应用模板、应用部署与管理的服务等。
    Alert 提供集群、Workload、Pod、容器级别的自定义告警服务。
    Notification 是一项综合通知服务; 它当前支持邮件传递方法。
    Redis 将 ks-console 与 ks-account 的数据存储在内存中的存储系统。
    MySQL 集群后端组件的数据库,监控、告警、DevOps、OpenPitrix 共用 MySQL 服务。
    PostgreSQL SonarQube 和 Harbor 的后端数据库。
    OpenLDAP 负责集中存储和管理用户账号信息与对接外部的 LDAP。
    Storage 内置 CSI 插件对接云平台存储服务,可选安装开源的 NFS/Ceph/Gluster 的客户端。
    Network 可选安装 Calico/Flannel 等开源的网络插件,支持对接云平台 SDN。

    三级目录2.1.4. DevOps介绍

    什么是 KubeSphere DevOps 系统
    基于 Jenkins 的 KubeSphere DevOps 系统是专为 Kubernetes 中的 CI/CD 工作流设计的,它提供了一站式的解决方案,帮助开发和运维团队用非常简单的方式构建、测试和发布应用到 Kubernetes。它还具有插件管理、Binary-to-Image (B2I)、Source-to-Image (S2I)、代码依赖缓存、代码质量分析、流水线日志等功能。
    DevOps 系统为用户提供了一个自动化的环境,应用可以自动发布到同一个平台。它还兼容第三方私有镜像仓库(如 Harbor)和代码库(如 GitLab/GitHub/SVN/BitBucket)。它为用户提供了全面的、可视化的 CI/CD 流水线,打造了极佳的用户体验,而且这种兼容性强的流水线能力在离线环境中非常有用。

    二级目录2.2. Gitlab

    Git 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。是目前世界上最先进的分布式版本控制系统。
    GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务,可以部署为本地私有化仓库。

    二级目录2.3. Harbor

    三级目录2.3.1. Harbor介绍

    Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

    三级目录2.3.2. Harbor功能

     基于角色的访问控制:用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
     镜像复制:镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
     图形化用户界面:用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
     AD/LDAP:-Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
     审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
     国际化:已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
     RESTful API: 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。
     部署简单:提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。

    一级目录3. 安装配置

    本章节主要说明容器化平台所有组件的安装、配置。

    二级目录3.1. 环境准备

     服务器配置:2CPU,8GB内存,100GB硬盘,10Mbps带宽或更高配置。
     操作系统:Centos7.8
     需要考虑数据量的增加,代码仓库、容器镜像仓库应该支持很容易的扩容。
     关闭防火墙、关闭selinux
     服务器可以访问公网。

    二级目录3.2. Gitlab安装

    三级目录3.2.1. 软件安装

    #1.ssh登录到服务器
    #2.安装基础依赖
    yum install -y curl policycoreutils-python openssh-server
    #3.安装启动postfix用于发送通知邮件
    yum install postfix
    systemctl enable postfix
    systemctl start postfix
    #4.添加gitlab包依赖
    curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
    #5.安装gitlab-ce社区开源版,默认安装到/opt/gitlab
    yum install -y gitlab-ce
    安装完成后可以使用服务器IP直接访问(默认端口80)
    默认安装目录:/opt/gitlab

    三级目录3.2.2. 配置优化

    配置文件:/etc/gitlab/gitlab.rb,涉及修改的主要配置项如下:
    #gitlab地址,访问或clone代码等操作时使用
    external_url ‘http://49.233.1.65’

    邮件服务器配置

    #开启smtp服务
    gitlab_rails['smtp_enable'] = true
    #邮件smtp服务器
    gitlab_rails['smtp_address'] = "smtp.qq.com"
    #smtp端口,默认465
    gitlab_rails['smtp_port'] = 465
    #发件人email地址
    gitlab_rails['smtp_user_name'] = "xxx@foxmail.com"
    #发件人邮件密码
    gitlab_rails['smtp_password'] = "xxxxxxxxxx"
    #发件服务器域名
    gitlab_rails['smtp_domain'] = "qq.com"
    #smtp验证方式,默认即可
    gitlab_rails['smtp_authentication'] = "login"
    #激活tls加密,true即可
    gitlab_rails['smtp_enable_starttls_auto'] = true
    gitlab_rails['smtp_tls'] = true
    #激活邮件服务
    gitlab_rails['gitlab_email_enabled'] = true
    gitlab_rails['gitlab_email_from'] = 'myjoylink@foxmail.com'
    #发送邮件的发件人显示名称
    gitlab_rails['gitlab_email_display_name'] = 'Gitlab'
    
    #数据备份目录,可以修改为指定目录
    gitlab_rails['backup_path'] = "/data/gitlab/backups"
    #数据备份保留时间,单位:秒,超过该时间的备份文件会被删除
    gitlab_rails['backup_keep_time'] = 1209600
    #数据存储目录,目录不能包含符号链接(软链接)
    git_data_dirs({
    "default" => {
    "path" => "/data/gitlab/git-data"
    }
    })
    

    相关命令:

    #服务启动
    gitlab-ctl start
    #服务关闭
    gitlab-ctl stop
    #服务重启
    gitlab-ctlrestart
    #修改配置后初始化
    gitlab-ctlreconfigure
    #开机自启动
    systemctlenablegitlab-runsvdir.service
    

    二级目录3.3. Harbor安装

    三级目录3.3.1. 安装需求

    VMware官方提供了Harbor安装运行需要依赖docker和docker-compose环境,版本要求:

    docker 17.06.0-ce+
    docker-compose 1.18.0+
    安装:
    yum install -y docker-ce docker-compose
    #查看版本
    docker --version
    docker-compose --version
    

    三级目录3.3.2. 安装配置

    Harbor核心组件:
    在这里插入图片描述

    Harbor下载地址:https://github.com/goharbor/harbor/releases
    分为在线安装版本和离线安装版本,建议通过迅雷等工具直接下载离线版本:

    harbor-offline-installer-vx.x.x.tgz
    #解压安装包
    tarzxfharbor-offline-installer-vx.x.x.tgz
    cd harbor
    
    #修改配置文件:vimharbor.yml
    hostname:#改为访问harbor的公网IP地址/域名
    http:
    port: 80#默认使用80端口,可以修改
    harbor_admin_password: Harbor12345#默认初始登录密码,记住该密码
    data_volume: /data/harbor#数据存储目录,根据实际配置修改为其他目录
    
    #执行安装脚本
    ./install.sh
    #查看组件启动情况
    docker-compose ps
    

    harbor服务操作命令,在harbor安装目录

    docker-compose down -v#停止服务
    docker-compose up -d#启动服务
    

    #因为harbor使用http协议,而docker默认使用https,需要修改docker配置
    vim/etc/docker/daemon.json#增加以下配置并重启docker:
    {“insecure-registries”: [“harbor ip”]}
    systemctl daemon-reload
    systemctl restart docker

    二级目录3.4. Kubesphere安装

    官方安装参考:https://kubesphere.io/zh/docs/quick-start/all-in-one-on-linux/

    三级目录3.4.1. 环境准备

    1.KubeSphere 需要某些端口用于服务之间的通信,如果启用了防火墙规则,则需要确保基础组件可以通过以下特定端口相互通信:
    在这里插入图片描述

    2.开发测试环境使用all-in-one模式安装即可,可以快速部署 KubeSphere 和 Kubernetes。
    节点必须能够通过 SSH 连接,节点上可以使用 sudo/curl/openssl 命令。推荐在线安装,要求服务器可以连通外网。
    3.安装依赖项:yum install -y socat conntrack ebtables ipset
    4.网络和DNS配置:必须确保 /etc/resolv.conf 中的 DNS 配置是可用的。

    三级目录 3.4.2. 下载安装脚本

    下载地址:https://github.com/kubesphere/kubekey/releases
    下载最新release版即可,当前是1.0.1:

    curl -sfL https://get-kk.kubesphere.io | VERSION=v1.0.1 sh -
    

    #添加可执行权限

    chmod +x kk
    

    三级目录 3.4.3. 开始安装

    #kubernetes使用v1.17.9版本,kubesphere使用v3.0.0版本,可以根据实际情况修改。
    #当前支持的 Kubernetes 版本: v1.15.12, v1.16.13, v1.17.9 (默认), v1.18.6。
    # 执行以下命令即可开始安装:

    ./kk create cluster --with-kubernetes v1.17.9 --with-kubesphere v3.0.0
    

    执行安装命令后,将看到下面的表格,用于环境检查:
    在这里插入图片描述

    确保满足上面标记y的安装需求后,输入yes继续安装。

    三级目录 3.4.4. 验证安装结果

    当看到以下输出时,表明安装已经完成(如果未能正常安装完成,请分析输出的报错信息):
    在这里插入图片描述
    输入以下命令以检查安装结果:

    kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
    

    输出会显示 Web 控制台的 IP 地址和端口号,默认的 NodePort 是 30880。现在可以使用默认的帐户和密码(admin /P@88w0rd)通过 IP:30880 访问控制台:
    #####################################################

    Welcome to KubeSphere!

    #####################################################

    Console: http://192.168.0.2:30880
    Account: admin
    Password: P@88w0rd

    NOTES:

    1. After logging into the console, please check the
      monitoring status of service components in
      the “Cluster Management”. If any service is not
      ready, please wait patiently until all components
      are ready.
    2. Please modify the default password after login.

    #####################################################
    https://kubesphere.io 20xx-xx-xx xx:xx:xx
    #####################################################
    检查各个组件状态:
    方法1:
    #查看所有pod是否running状态

    kubectl get pod --all-namespaces
    

    在这里插入图片描述

    方法2:登录kubesphere web控制台检查组件状态,访问:平台管理→集群管理→服务组件:
    在这里插入图片描述

    三级目录 3.4.5. 开启DevOps组件

    kubesphere默认只开启核心组件,以下是可选组件默认未开启。
    在这里插入图片描述
    本文档需要用到KubeSphere DevOps 系统,所以下面讲述在kubesphere安装后启用DevOps组件的方法:

    1. 以 admin 身份登录控制台,点击左上角的平台管理,选择集群管理。
      在这里插入图片描述

    2. 点击自定义资源 CRD,在搜索栏中输入 clusterconfiguration,点击搜索结果查看其详细页面。

    3. 在资源列表中,点击 ks-installer 右边的三个点,选择编辑配置文件。
      在这里插入图片描述

    4. 在该 YAML 文件中,搜寻到 devops,将 enabled 的 false 改为 true。完成后,点击右下角的更新,保存配置。
      devops:
      enabled: true # Change “false” to “true”

    5. 验证devops组件的安装
      方法1:在web控制台上验证
      在这里插入图片描述

    方法2:通过kubectl命令验证
    执行以下命令来检查 Pod 的状态:

    kubectl get pod -n kubesphere-devops-system
    

    如果组件运行成功,输出结果如下:

    NAME                                       READY   STATUS    RESTARTS   AGE
    ks-jenkins-68b8949bb-jcvkt                 1/1     Running   0          1h3m
    s2ioperator-0                              1/1     Running   1          1h3m
    uc-jenkins-update-center-8c898f44f-hqv78   1/1     Running   0          1h14m
    

    一级目录4. 自动部署配置

    在这里插入图片描述

    二级目录4.1. 步骤一:kubesphere基础配置

    三级目录4.1.1. 账号权限配置

    系统分级和角色介绍:
    KubeSphere 的多租户系统分三个层级,即群集、企业空间和项目。KubeSphere 中的项目等同于 Kubernetes 命名空间。
    集群:研发团队内部使用,一般使用单集群即可;
    企业空间:是一个组织项目和 DevOps 工程、管理资源访问权限以及在团队内部共享资源等的逻辑单元,可以作为团队工作的独立工作空间。可以根据实际场景创建多个企业空间(不直接使用系统空间)。
    项目:可以基于项目划分诸如开发环境、测试环境、生产环境,各项目指定一定的资源配额。
    在这里插入图片描述

    创建账号:
    在这里插入图片描述

    三级目录4.1.2. 项目和DevOps工程配置

    1. 企业空间配置
      以admin登录系统,进入工作台→企业空间,创建企业空间,指定空间管理员:
      在这里插入图片描述

    进入创建好的企业空间,邀请成员:
    在这里插入图片描述

    其中企业成员有四个角色:
    在这里插入图片描述

    邀请pro-admin账号角色为ws-demo-self-provisioner,pro-user账号角色为ws-demo-viewer,最终是如下三个账号:
    在这里插入图片描述

    其中viewer角色根据实际情况邀请开发、测试等多个账号。

    1. 项目配置
      以pro-admin项目管理员账号登录,来进行项目管理。项目概念对应k8s中的namespace。
      工作台→企业空间→项目管理,创建项目,这里的项目名称需要和后续容器部署配置文件中指定的namespace一致:

    在这里插入图片描述

    在这里插入图片描述

    进入新建的项目,邀请项目成员,pro-user授予operator角色(项目维护者,可以管理项目下除用户和角色之外的资源):
    在这里插入图片描述

    1. DevOps工程配置
      进入上面新建的企业空间,DevOps工程→创建:
      在这里插入图片描述

    进入新建的DevOps工程中,点击工程成员,邀请pro-user账号为operator角色:
    在这里插入图片描述

    后续将使用pro-user账号创建配置流水线等操作。

    三级目录4.1.3. 组件凭证配置

    容器部署流程中访问各组件时需要独立的账号密码,所以需要提前配置各凭证信息,避免在配置文件或脚本中直接引用明文密码。主要包含:k8s集群、代码仓库、镜像仓库、sonarqube。
    进入上面创建的DevOps工程→工程管理→凭据页面,可以创建凭据:

    1. k8s集群kubeconfig:
      在这里插入图片描述

    2. Gitlab代码仓库:
      在这里插入图片描述

    3. Harbor镜像仓库:
      在这里插入图片描述

    4. sonarqube:如果用到代码质量分析则需要配置,需要先在sonarqube中获取密钥:

    在这里插入图片描述

    二级目录4.2. 步骤二:Git源码配置文件

    配置文件包含:
     jenkinsfile:整体流程配置文件,定义以上全部流程;
     Dockerfile:容器镜像打包配置文件,定义容器本身全部配置,包含基础环境、工作目录、启动命令等。
     deployment:容器部署运行配置文件,定义部署、启动配置,包含部署目录、启动端口、环境变量、镜像地址等。
     service:容器部署服务配置文件,定义k8s服务配置,包括服务基本信息、对外端口等配置。

    所有配置文件都需要放在源代码中,具体路径:
    Jenkinsfile:源代码项目根目录;
    Dockerfile:源代码项目根目录;
    deployment.yaml、service.yaml:根目录下的deploy/dev/、deploy/test/、deploy/prod/等,不同环境配置不同目录;
    注意:如果一个项目存在多模块情况,那么每个模块都需要配置单独的以上配置文件,这样的话上面提到的根目录就变成了各模块目录。

    以下是配置文件具体配置信息说明,其中红色字体部分需要根据实际项目情况进行修改:

    三级目录4.2.1. Jenkinsfile

    前端nodejs项目:

    pipeline {
      agent {
        node {
          label 'nodejs'
        }
      }
      #环境变量,用于流水线各阶段使用的必需参数,研发中心项目默认即可,产线根据各自环境进行修改
      environment {
        #gitlab凭据
        GITLAB_CREDENTIAL_ID = 'gitlab-id'
        #k8s凭据
        KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
        #项目名称
        APP_NAME = 'devops-docs-sample'
        #镜像仓库地址
        REGISTRY = '49.233.127.116'
        #harbor仓库凭据
        HARBOR_CREDENTIAL_ID = 'harbor-id'
        #harbor仓库项目名称
        HARBOR_NAMESPACE = 'harbor-demo'
      }
    
      stages {
        #clone代码到本地
        stage('checkout scm') {
          steps {
            checkout(scm)
          }
        }
        
        #获取相关依赖
        stage('get dependencies') {
          steps {
            container('nodejs') {
              sh 'npm install -g cnpm --registry=https://registry.npm.taobao.org'
              sh 'cnpm i --no-package-lock'
            }
    
          }
        }
        #编译,打包镜像,推送到镜像仓库
        stage('build & push snapshot') {
          steps {
            container('nodejs') {
              #构建打包
              sh 'yarn build'
              #打包镜像
              sh 'docker build -t $REGISTRY/$HARBOR_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER .'
              #获取harbor仓库的账号密码
              withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID")]) {
                #登录harbor镜像仓库
                sh 'echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin $REGISTRY'
                #推送镜像到仓库
                sh 'docker push  $REGISTRY/$HARBOR_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER '
              }
            }
          }
        }
        #拉取并部署容器镜像
        stage('deploy to dev') {
          when{
            branch 'master'
          }
          steps {
            kubernetesDeploy(configs: 'deploy/dev/**', enableConfigSubstitution: true, kubeconfigId: "$KUBECONFIG_CREDENTIAL_ID")
          }
        }
      }
    }
    

    java后端服务:

    pipeline {
      agent {
        node {
          label 'maven'
        }
      }
    
        parameters {
            string(name:'TAG_NAME',defaultValue: '',description:'')
        }
    
        environment {
            HARBOR_CREDENTIAL_ID = 'harbor-id'
            GITLAB_CREDENTIAL_ID = 'gitlab-id'
            KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
            REGISTRY = '49.233.127.116'
            HARBOR_NAMESPACE = 'harbor-demo'
            GITLAB_ACCOUNT = 'test'
            APP_NAME = 'devops-java-sample'
            SONAR_CREDENTIAL_ID= 'sonar-token'
        }
    
        stages {
            stage ('checkout scm') {
                steps {
                    checkout(scm)
                }
            }
    
            stage ('build & push') {
                steps {
                    container ('maven') {
                        sh 'mvn -o -Dmaven.test.skip=true -gs `pwd`/configuration/settings.xml clean package'
                        sh 'docker login -u admin -p hy7Gk2ocK $REGISTRY'
                        sh 'docker build --no-cache -f Dockerfile-on-prem -t $REGISTRY/$HARBOR_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER .'
                        withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
                            sh 'echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin'
                            sh 'docker push  $REGISTRY/$HARBOR_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER'
                        }
                    }
                }
            }
    
            stage('deploy to dev') {
              when{
                branch 'sonarqube'
              }
              steps {
                input(id: 'deploy-to-dev', message: 'deploy to dev?')
                kubernetesDeploy(configs: 'deploy/dev/**', enableConfigSubstitution: true, kubeconfigId: "$KUBECONFIG_CREDENTIAL_ID")
              }
            }
        }
    }
    

    三级目录4.2.2. Deployment

    apiVersion: apps/v1  #api版本,默认即可
    kind: Deployment  #部署类型Deployment支持多副本部署
    metadata:  #元数据
      labels:   # Deployment的标签,key-value格式,根据实际情况修改即可,不一定是以下内容
        app: kubesphere  #应用名称
        component: ks-sample-dev  #组件名称
        tier: backend  #组件类型,前端、后端等
      name: ks-sample-dev  #必需,该工作负载的名称,将显示在kubesphere列表中。
      namespace: kubesphere-sample-dev  #所属项目名称(k8s命名空间)
    spec:
      progressDeadlineSeconds: 600  #进程卡住的确认时间
      replicas: 1  #副本数1
      selector:  #选择器,根据标签匹配对应pod
        matchLabels:
          app: kubesphere
          component: ks-sample-dev
          tier: backend
      template:  #容器模板,指定要运行的容器的配置
        metadata:  #容器本身的标签
          labels:
            app: kubesphere
            component: ks-sample-dev
            tier: backend
        spec:
          containers:
            - env:  #传入容器的系统环境标量
                - name: CACHE_IGNORE
                  value: js|html
                - name: CACHE_PUBLIC_EXPIRATION
                  value: 3d
              image: $REGISTRY/$HARBOR_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER  #容器镜像路径
              imagePullPolicy: Always  #镜像拉取策略,总是重新拉取镜像
              name: ks-sample  #容器名称
              ports:
                - containerPort: 8080  #容器端口,需要修改,同一pod内不同
                  protocol: TCP  #协议,一般默认TCP即可
              resources:  #资源限制,无特殊要求默认即可
                limits:
                  cpu: 300m
                  memory: 600Mi
                requests:
                  cpu: 100m
                  memory: 100Mi
              terminationMessagePath: /dev/termination-log  #容器挂掉后的日志记录
              terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          terminationGracePeriodSeconds: 30
    

    三级目录4.2.3. Service

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: kubesphere
        component: ks-docs-sample-dev  #部署名称
      name: ks-docs-sample-dev  #服务名称,使用实际服务的名称
      namespace: kubesphere-docs-dev  #k8s命名空间名称/kubesphere项目名称,需要修改
    spec:
      ports:
        - name: http
          port: 80  #服务端口
          protocol: TCP  #协议,一般都是tcp即可
          targetPort: 80  #容器端口
          nodePort: 30860  #节点端口
      selector:  #标签匹配,service会被代理到匹配以下标签的pod上,与下面pod配置匹配
        app: kubesphere
        component: ks-docs-sample-dev
        tier: backend
      sessionAffinity: None  #是否会话保持,没有特殊需求使用None即可
      type: NodePort  #外网访问类型,使用nodeport
    

    三级目录4.2.4. Dockerfile

    #制定容器基础镜像
    FROM harbor.devops.kubesphere.local:30280/library/java:openjdk-8-jre-alpine
    #指定工作目录,根据实际情况选择,例如这里是jar包存放目录
    WORKDIR /home
    #拷贝jar包到工作目录
    COPY target/*.jar /home
    #执行命令启动服务
    ENTRYPOINT java -jar *.jar
    

    三级目录4.2.5. 节点绑定配置

    标签(label)是K8S系统的一个核心概念,以key/value键值对的形式附加到各种对象上,如Pod、Service、RC、Node等,定义了这些对象的可识别属性,用来对它们进行管理和选择。
    指定容器运行的服务器节点,通过给节点添加标签并在容器配置文件中指定筛选器的方式实现,主要配置如下:

    1. 添加节点标签
      进去kubesphere的平台管理→集群管理→节点管理→集群节点,右侧选择需要指定的节点进入节点详情页面,选择更多操作→编辑标签:
      在这里插入图片描述

    可以看到已经预定义了一些系统本身使用的标签,不修改已有标签,直接添加我们需要的内容即可,比如这里我添加了一个key为service-type的标签,用于标识服务类型(前端服务、后端服务等),这里的key和value可以任意定义:

    在这里插入图片描述

    1. k8s配置文件配置
      容器工作负载配置文件deployment.yaml,spec.template.spec中添加以下配置即可:
    spec:
    nodeSelector:
    service-type: workflow
    
    其中service-type: workflow就是上面第1步中为节点定义的标签。
    

    二级目录4.3. 步骤三:kubesphere流水线配置

    Pipeline 是一系列的插件集合,可以通过组合它们来实现持续集成和持续交付的功能。
    进入上面创建的DevOps工程→流水线,创建流水线,需要用到上面配置好的配置文件、凭证:

    1. 创建流水线,填写名称、描述等:

    2. 指定代码项目仓库地址和选择凭证,这里使用的是Gitlab,选择Git:
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    3. 下一步进入高级设置:
      主要指定Jenkinsfile文件路径,如果放在根目录则指定文件名即可,否则指定具体目录(路径中则填写基于根目录的相对路径),例如:
      A. 如果Jenkinsfile文件放在工程根目录,则流水线配置中的脚本路径直接填写文件名称即可;
      在这里插入图片描述

    B. 如果Jenkinsfile文件放在工程的jenkins目录下,则流水线配置中的脚本路径需要填写jenkins/Jenkinsfile
    在这里插入图片描述

    其他选项可以默认:
    在这里插入图片描述

    二级目录4.4. 步骤四:kubesphere流水线运行

    进入上面建好的流水线,点击运行,选择分支并输入预设的参数,点击确定即可开始流水线运行任务:
    在这里插入图片描述

    开始运行后,点击运行任务进入详细信息页面,流水线会开始准备环境,正常可能需要几分钟,然后会看到运行流程,点击查看日志,可以看到每一步骤的执行记录:
    在这里插入图片描述

    二级目录4.5. 步骤五:服务测试验证

    进入工作台→企业空间→项目管理→选择项目→服务:
    在这里插入图片描述

    这里的服务名称和上面提到的服务配置文件中定义的名称一致。点击服务名称进入详细信息,可以看到容器运行后的对外IP和端口:

    使用IP和端口即可访问运行的服务。

    展开全文
  • python3容器化部署方案

    2019-04-22 15:21:19
    k8s部署方案 来自python 这个方案已经落地了k8s部署方案 来自python 这个方案已经落地了
  • Docker 容器化部署

    千次阅读 2021-11-28 11:26:01
    docker是一个开源应用容器引擎 基于 GO 语言实现 开发者可以将他们的应用和依赖打包到一个轻量级, 可移植的容器中, 发布到任何流行的 Linux 机器上 沙箱机制, 互相隔离 性能开销很低 安装(基于 centos7) 下载安装 ...

    思维导图

    在这里插入图片描述

    概念

    • docker是一个开源应用容器引擎
    • 基于 GO 语言实现
    • 开发者可以将他们的应用和依赖打包到一个轻量级, 可移植的容器中, 发布到任何流行的 Linux 机器上
    • 沙箱机制, 互相隔离
    • 性能开销很低

    安装(基于 centos7)

    • 下载安装 docker
    # yum 包更新到最新
    yum update
    # 安装需要的软件包, yum-util 提供 yum-config-manager 功能,另外两个是 devicemapper 驱动依赖的 
    yum install -y yum-utils device-mapper-persistent-data lvm2
    # 设置yum源
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    # 安装docker,出现输入的界面都按 y 
    yum install -y docker-ce
    # 查看docker版本,验证是否验证成
    docker -v
    
    • 配置 aliyun 镜像加速

    进入阿里云控制台,搜索镜像加速器,输入代码即可

    结构

    Docker 命令

    进程(daemon)相关命令

    • 启动 docker 服务
    systemctl start docker
    
    • 停止 docker 服务
    systemctl stop docker
    
    • 重启 docker 服务
    systemctl restart docker
    
    • 查看 docker 状态
    systemctl status docker
    
    • 设置 docker 服务开机自启
    systemctl enable docker
    

    镜像(image)相关命令

    • 查看镜像
    docker images
    docker images -q # 查看所有镜像的 id
    
    • 搜索镜像(从网络中查找需要的镜像)
    docker search 镜像名称
    
    • 拉取镜像:从 Docker 仓库下载镜像到本地 如果不指定版本则是 latest 版本
    docker pull 镜像名称 # 名称:版本号
    # 可以去 hub.docker.com 查看对应镜像的版本号
    
    • 删除镜像
    docker rmi 镜像id # 删除指定id的镜像
    docker rmi `docker images -q` # 组合命令,先查找所有镜像id然后再删除
    

    容器(container))相关命令

    • 查看容器
    docker ps # 显示正在运行的容器
    docker ps -a # 显示历史所有容器
    
    • 创建并启动容器
    docker run -it --name=c1 镜像名字:版本 /bin/bash # 创建一个容器名为 c1 ,并分配一个终端,进入 /bin/bash, 退出容器后容器自动关闭
    docker run -id --name=c2 镜像名字:版本 # 创建一个容器名为 c2,后台运行,并且进入容器之后退出也不会关闭容器
    

    -i : 保持容器运行, 通常与 -t 一起使用,使用 it 参数创建容器, 创建完成之后自动进入容器, 退出后自动关闭

    -t : 为容器重新分配一个伪输入终端

    -d : 以守护(后台)模式运行容器, 创建一个容器在后台运行, 需要手动进入容器, 退出后容器不会关闭

    -it : 创建的容器一般叫做交互式容器, -id : 创建的容器一般称为守护式容器

    –name : 命名

    • 进入容器
    docker exec -it 容器名称 /bin/bash # 退出容器, 容器不会关闭
    
    • 停止容器
    docker stop 容器名称
    
    • 启动容器
    docker start 容器名称
    
    • 删除容器
    docker rm 容器名称 # 不能删除运行中的容器
    
    • 查看容器信息
    docker inspect 容器名称
    

    数据卷

    • 概念:

      • 是宿主机中的一个目录或文件
      • 当容器目录和数据卷目录绑定之后,双方的修改是同步的
      • 容器 和 数据卷 之间是多对多的关系,即一个容器可以挂载多个数据卷,一个数据卷也可以同时被多个容器所挂载
    • 作用:

      • 容器数据的持久化(不会因为容器出现故障删除后丢失其中的数据)
      • 外部机器和容器间接通信
      • 容器之间的数据交换
    • 配置

      • 创建启动容器时, 使用 -v 参数来设置数据卷

      • docker run -it --name=xx \
        -v 宿主机目录:容器内目录
        -v 宿主机目录:容器内目录 # 第二个挂载的目录
        ...
        centos:7 # 要创建的容器的镜像名
        
      • 注意:

        • 目录必须是绝对目录
        • 目录不存在会自动创建
        • 可以挂在多个数据卷

    数据卷容器

    • 定义:创建一个容器,挂载一个目录, 让其他容器继承自该容器(–volumes-from)

    • 作用:方便多个容器挂载同一个数据卷

    • 创建数据卷容器

    docker run -it --name=c3 -v /volume centos:7
    
    • 绑定其他容器到该数据卷
    docker run -it --name=c1 --volumes-from c3 centos:7
    

    docker 应用部署

    • 端口映射:外部机器连接容器内部应用方式(通过宿主机的端口映射连接外部机器)

    在这里插入图片描述

    部署 mysql

    • 搜索 mysql 镜像
    docker search mysql
    
    • 拉取 mysql 镜像
    docker pull mysql:5.6
    
    • 根据镜像创建 mysql 容器, 设置端口映射目录映射
    # 在宿主机/root目录下创建mysql目录用于存储mysql数据信息
    mkdir ~/mysql
    cd ~/mysql
    
    docker run -id \
    -p 3306:3306 \
    --name=c_mysql \
    -v $PWD/conf:/etc/mysql/conf.d \
    -v $PWD/logs:/logs \
    -v $PWD/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=root \
     # -id 守护进程方式创建 mysql 容器
     # -p 设置端口映射 容器端口:宿主机端口
     # -v 配置文件,日志文件,数据文件映射
     # -e MYSQL_ROOT_PASSWORD 设置 mysql 账户密码
    
    • 进入容器, 操作 mysql
    docker exec -it c_mysql /bin/bash
    
    • 使用外部机器连接容器中的 mysql

    在 navicat 或者 SQLyog 等可视化工具连接,输入宿主机 ip 和 映射的端口号即可

    部署 tomcat

    • 搜索镜像
    • 拉取镜像
    docker pull tomcat
    
    • 创建容器,设置端口映射,目录映射
    # 在宿主机 /root 目录下创建 tomcat 目录用于存储 tomcat 数据信息
    mkdir ~/tomcat
    cd ~/tomcat
    
    docker run -id \
    --name=c_tomcat \
    -p 8080:8080 \
    -v $PWD:/usr/local/tomcat/webapps \
    tomcat
    # -v 宿主机中的当前目录映射到 tomcat 存放目录
    
    • 在目录下创建 项目 /text/index.html,访问

    浏览器中输入ip:8080/text/index.html,访问成功

    部署 nginx

    • 搜索 nginx 镜像

    • 拉取 nginx 镜像

    • 创建容器,设置端口映射、目录映射

    # 在/root目录下创建nginx目录用于存储nginx数据信息
    mkdir ~/nginx
    cd ~/nginx
    mkdir conf
    cd conf
    # 在~/nginx/conf/下创建nginx.conf文件,粘贴下面内容
    vim nginx.conf
    
    user  nginx;
    worker_processes  1;
    
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        keepalive_timeout  65;
    
        #gzip  on;
    
        include /etc/nginx/conf.d/*.conf;
    }
    
    docker run -id --name=c_nginx \
    -p 80:80 \
    -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
    -v $PWD/logs:/var/log/nginx \
    -v $PWD/html:/usr/share/nginx/html \
    nginx
    
    • 测试 nginx

    部署 redis

    • 搜索镜像
    • 拉取镜像
    • 创建容器,端口映射
    docker run -id --name=c_redis -p 6379:6379 redis:5.0
    
    • 使用外部机器连接 redis (win 上的 redis 连接)
    ./redis-cli.exe -h 192.xxx.xxx.xxx -p 6379
    

    DockerFile

    Docker 的本质:分层文件系统

    Docker 镜像原理

    • Linux 中的文件系统:
      • Linux文件系统由 bootfs 和 rootfs 两部分组成
      • bootfs:包含 bootloader(引导加载程序)和 kernel(内核)
      • rootfs: root 文件系统,包含的就是典型 Linux 系统中的/dev,/proc,/bin,/etc等标准目录和文件
      • 不同的 linux 发行版,bootfs 基本一样而 rootfs 不同,如 ubuntu,centos 等
    • 原理
      • Docker 镜像是由特殊的文件系统叠加而成
      • 最底端是 bootfs,并使用宿主机的bootfs (这就是 docker 启动快的原因:宿主机 liunx 的 bootfs 已经启动完毕)
      • 第二层是 root 文件系统 rootfs ,称为 base image
      • 然后再往上可以叠加其他的镜像文件
      • **统一文件系统(Union File System)**技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。
      • 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像成为基础镜像。
      • 当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器

    在这里插入图片描述

    Docker 镜像本质是什么?
    是一个分层文件系统
    Docker 中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个个G?
    Centos的iso镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层
    Docker 中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70多MB?
    由于docker中镜像是分层的,tomcat虽然只有70多MB,但他需要依赖于父镜像和基础镜像,所有整个对外暴露的tomcat镜像大小500多MB

    镜像制作

    容器转为镜像(了解)

    docker commit 容器id 镜像名称:版本号 # 将一个容器转换为新镜像
    docker save -o 压缩文件名称 镜像名称:版本号 # 将一个镜像压缩成文件 -o 代表 output
    docker load -i 压缩文件名称 # 将一个镜像压缩文件解压成镜像 -i 代表 input
    

    容器产生的新镜像中不会包含 容器映射的宿主机的数据卷文件

    只有容器中除开映射数据卷之外的目录新建的文件才会被加入新镜像中

    使用 DockerFile 构建镜像(常用)

    • Dockerfile 是一个文本文件

      包含了一条条的指令

      每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像

      对于开发人员:可以为开发团队提供一个完全一致的开发环境

      对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了

      对于运维人员:在部署时,可以实现应用的无缝移植

    • 构建步骤

      • 编写 DockerFile 文件

      • # 创建镜像
        docker build -f ./docekrfile_centos -t powerstot:1 .
        # -f 指定 dockerfile 文件路径
        # -t 设置新镜像的名称和版本
        # . 代表 dockerfile 寻址路径
        
      • 再创建镜像即可

    • 部署 springboot 项目

      • 编写 dockerfile
      # 文件名 dockerfile_springboot
      FROM java:8
      MAINTAINER Powerstot <496975950@qq.com>
      ADD SpringBootDemo1-1.0-SNAPSHOT.jar app.jar 
      CMD java -jar app.jar
      # ADD 重命名 jar 包
      # CMD 创建容器后默认执行的命令
      
      • 构建镜像
      docker build \
      -f ~/dockerfile/dockerfile_springboot \
      -t springboot \
      .
      # -f 指定 dockerfile 文件路径
      # -t 名称默认 latest 版本
      
      • 根据镜像创建容器
      docker run -id \
      --name=springboordemo1 \
      -p 9000:8080 \
      springboot
      # -p 指定端口,方便外部访问内部的 tomcat 端口
      
      • 输入 ip + port 访问项目即可
      http://服务器IP:9000/hello
      

    Docker-compose 服务编排

    • Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。

    简单来说就是可以同时管理多个服务,方便微服务项目的开发

    • 安装步骤

      • 安装 二进制文件
      curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
      # 这是国内 daocloud 的镜像,国外 github 比较慢,要使用 github 的话,直接修改域名为 github.com 即可
      
      • 设置文件可执行权限
      chmod +x /usr/local/bin/docker-compose
      
      • 查看版本检测安装是否成功
      docker-compose -version
      
    • 卸载

      rm /usr/local/bin/docker-compose
      # 二进制包下载 直接删除文件即可
      
    • 使用 docker-compose 编排 nginx + springboot 项目

      • 创建 docker-compose 目录
      mkdir ~/docker-compose
      cd ~/docker-compose
      
      • 编写 docker-compose.yml 文件(yaml 也可以)
      version: '3'
      services:
        nginx:
         image: nginx
         ports:
          - 80:80
         links:
          - springboot
         volumes:
          - ./nginx/conf.d:/etc/nginx/conf.d
        springboot:
          image: springboot
          expose:
            - "8080"
      # 这里我把 app 改成 spingboot 了
      
      • 创建 ./nginx/conf.d 目录
      mkdir -p ./nginx/conf.d
      # -p 表示没有父目录就连父目录一起创建
      
      • 在./nginx/conf.d目录下 编写 springbootdemo1.conf 文件
      server {
          listen 80;
          access_log off;
      
          location / {
              proxy_pass http://springboot:8080;
          }
      }
      # 反向代理将 springboot 的 8080 端口代理到 80 端口,外部访问 80 即访问到了项目的 8080 端口
      
      • 在 ~/docker-compose 目录下 使用 docker-compose 启动容器
      docker-compose up
      # -d 后台启动,不加就是前台启动,打印日志
      # docker-compose 会进行 nginx 和 springboot 两个容器的创建,然后按照配置文件设置反向代理,再 up 两个容器
      
      • 测试访问
      http://服务器IP/hello
      

    Docker 私有仓库

    • 就是一个容器,先下载 registry 镜像,然后创建 容器,该容器就是 私有仓库

    搭建私有仓库

    # 拉取私有仓库镜像 
    docker pull registry
    # 启动私有仓库容器 
    docker run -id --name=registry -p 5000:5000 registry
    # 浏览器输入地址  http://私有仓库服务器ip:5000/v2/_catalog
    # 显示 {"repositories":[]} 表示私有仓库 搭建成功
    
    # 修改daemon.json
    vim /etc/docker/daemon.json    
    # 添加一个key,用于让 docker 信任私有仓库地址
    {"insecure-registries": ["私有仓库服务器ip:5000"]}
    
    # 重启docker 服务
    systemctl restart docker
    # 开启 registry 容器
    docker start registry
    

    上传镜像到仓库

    # 标记镜像为私有仓库的镜像     
    docker tag centos:7 私有仓库服务器IP:5000/centos:7
     
    # 上传标记的镜像
    docker push 私有仓库服务器IP:5000/centos:7
    

    从仓库中拉取镜像

    # 拉取镜像
    docker pull 私有仓库服务器ip:5000/centos:7
    

    Docker 容器虚拟化 和 传统虚拟机比较

    • 相同:

      • 容器和虚拟机具有相似的资源隔离分配优势
    • 不同:

      • 容器虚拟化的是操作系统,虚拟机虚拟化的是硬件

        即容器与宿主机共享:操作系统 os

        虚拟机与宿主机共享:硬件

      • 传统虚拟机可以运行不同的操作系统,容器只能运行同一类型操作系统

    特性容器虚拟机
    启动秒级分钟级
    硬盘使用一般 MB一般 GB
    性能接近原生弱于原生
    系统支持量单机支持上千个容器一般几十个

    参考

    展开全文
  • docker容器化部署

    千次阅读 2022-01-14 16:28:32
    从Docker的图标来看,鲸鱼的背好比是一个部署平台,背上有一个一个的集装箱,集装箱好比是平台中的一个容器,每个容器都是一个独立的盒子,盒子里面可以是有多种对应的应用程序的,而且盒子里面的东..

    转载请说明出处谢谢

    一、什么是Docker

    Docker是Google使用go语言开发出来的一个开源的应用容器引擎,可以让开发者快速的打包应用程序及相应的依赖程序到一个轻量级、可移植的容器中,再发布容器到任意的服务器上(Linux与Windows都支持Docker)。容器间使用沙箱机制,相互之间互不影响。

    从Docker的图标来看,鲸鱼的背好比是一个部署平台,背上有一个一个的集装箱,集装箱好比是平台中的一个容器,每个容器都是一个独立的盒子,盒子里面可以是有多种对应的应用程序的,而且盒子里面的东西本质上也是由一个微型小系统承载的多款应用软件,所以说Docker是一个应用的部署平台,每一个应用软件都有其对应有系列版本的镜像(安装包),好比一个安装包可以被安装多次,每次的安装都只是在一个指定的容器(微型小系统)中,由主机系统与各个容器直接建立访问映射,从而可实现应用程序的快速部署,与电脑主机安装虚拟机较为类似。Docker的使用与Maven有一些相似,它们都是需要依赖网络环境连接至中央仓库,根据软件名称及版本从仓库中拉取指定的镜像文件(Image),将镜像文件以容器(Container)的方式运行于虚拟主机中,使主机与容器之间使用虚拟端口映射的方式与外界交互,参考一下不太形象的下图:

    Docker容器可以看做是一个精简版的Linux系统,这个系统精简到200M大小的程度(下载CentOS7需要4G多),去掉了一些与系统硬件相关的东西,只保留了系统内核,所以同样内存大小的机器是可以承载更多的Docker容器的,如下图一个Docker替代了多个客户机的操作系统

    二、安装部署

    1、卸载旧版本

    ---卸载旧版本$ yum remove docker \                  
    docker-client \                  
    docker-client-latest \                  
    docker-common \                  
    docker-latest \                  
    docker-latest-logrotate \                  
    docker-logrotate \                  
    docker-engine        
    
    

    2、基础依赖安装

    ----依赖包安装             
    $ yum install -y yum-utils   device-mapper-persistent-data   lvm2
    ----设置docker-ce yum源
    $ yum-config-manager     --add-repo     
    https://download.docker.com/linux/centos/docker-ce.repo
    

    3、docker安装

    ---安装最新版本   
    $ yum install docker-ce docker-ce-cli containerd.io   
    ---指定版本安装    ----存储库中列出可用版本,然后选择并安装    
    $yum list docker-ce --showduplicates | sort -rdocker-ce.x86_64  3:18.09.1-3.el7                     
    docker-ce-stabledocker-ce.x86_64  3:18.09.0-3.el7                     
    docker-ce-stabledocker-ce.x86_64  18.06.1.ce-3.el7                   
    docker-ce-stabledocker-ce.x86_64  18.06.0.ce-3.el7                    
    docker-ce-stable
    ---安装指定版本
    $ yum install docker-ce-to docker-ce-cli-18.09.1 containerd.io
    

    4、启动

    启动 Docker
    $ systemctl start docker
    开机启动设置
    $ systemctl enable docker
    

    5、安装portainer

    $docker pull docker.io/portainer/portainer
    启动portainer
    $docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name prtainer-test docker.io/portainer/portainer
    

    三、Docker设置阿里云镜像加速

    <img src="https://gitee.com/changan/imgurl/raw/master/20220111094813.png"
    style="zoom: 80%;" />

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    { 
    "registry-mirrors": ["https://h62xqml7.mirror.aliyuncs.com"],"insecure-registries"["https://harbor.cloudansys.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    四、Docker使用

    1、开启远程访问

    --开放2375端口,进行远程连接
    vim /usr/lib/systemd/system/docker.service
    --添加如下内容
    -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
    --重启
    systemctl daemon-reload
    systemctl restart docker
    

    2、常用命令

    --镜像搜索
    docker search nginx
    --镜像下载
    docker pull nginx
    --镜像查看
    docker image ls
    ----或者
    docker images
    --删除本地镜像
    docker image rm  镜像id
    ----或者
    docker rmi 镜像id
    --查看容器
    docker ps -a 
    --删除容器
    docker rm -f 容器id 
    --创建并启动容器(后台运行,加入 -d参数,端口映射 -p 8080:8080 ,文件挂载 -v 
    /test:/test,设置容器名称 --name abc )
    docker run -it -d -p 8080:80 -v /test:/test [image]  bash
    --容器日志查看
    docker logs 容器id
    --启动已创建的容器
    docker start [容器id或者容器名字] 
    --启动并进入容器
    docker run -it 镜像名称:版本 /bin/bash 
    --导出和导入容器
    docker export 容器id > mynginx.tar
    --导入镜像 
    docker import mynginx.tar mynginx:1.0
    --启动容器
    docker run -d mynginx:1.0 bash
    

    3、推送自己的镜像到dockerhub

    --添加host
    secho "xx.xx.xx.xxx harbor.cloudansys.com" >> /etc/hosts
    --登录镜像仓库
    docker login https://harbor.cloudansys.com
    --创建镜像
    docker commit 容器id 镜像名称
    ----将镜像重新命名
    docker tag 镜像id harbor.cloudansys.com/test/nginx:v2
    ----推送镜像
    docker push harbor.cloudansys.com/test/nginx:v2
    

    五、DockerFile构建

    1、命令发布

    创建Dockerfile

    vim Dockerfile
    --添加以下内容
    FROM harbor.cloudansys.com/hawkeye/jdk1.8:v1
    # 设置时区
    ENV TZ=Asia/Shanghai
    # 时区写入系统文件
    VOLUME /tmp
    COPY docker-demo-0.0.1-SNAPSHOT.jar /app.jar
    #RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 
    'Asia/Shanghai' >/etc/timezone
    #RUN bash -c "touch /app.jar"
    EXPOSE 8080
    #ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
    ENTRYPOINT ["java","-jar","/app.jar"]
    
    --创建镜像
    $ docker build -t docker-demo:v1 .
    --查看镜像
    $ docker images
    --启动容器
    $ docker run -d -p 8080:8080 镜像ID
    

    地址访问:
    http://192.168.1.202:8080/docker/test1

    2、Idea集成docker发布

    1)在resource目录下创建Dockerfile并添加内容

    2)创建docker连接


     

    3)发布


     


     

    展开全文
  • Hadoop Docker容器化部署

    千次阅读 2021-09-15 15:31:11
    Hadoop Docker容器化部署 我们学习Hadoop的过程中基本使用的是虚拟机,如果能用Docker来部署我们的Hadoop要比安装虚拟机方便多了,而且也便于我们移植我们的Docker镜像。所以这里我就想自己实现一个Hadoop的Docker...
  • Java容器化部署架构方案.pptx
  • 容器部署解决方案Docker容器部署解决方案Docker容器部署解决方案Docker容器部署解决方案Docker容器部署解决方案Docker容器部署解决方案Docker容器部署解决方案Docker容器部署解决方案Docker
  • Docker容器化部署及应用实战

    千次阅读 2021-11-12 14:31:16
    使用容器来部署应用程序称为容器化。容器不是新的,但用于轻松部署应用程序的容器却是新的。 二、docker的优势 (1)有助于Microservices的落地和部署 (2)充分利用物理机资源,同时能够整合服务器资源 (3)提高开发...
  • 目标:基于Docker进行Spring Cloud基础服务组件的容器化部署环境:CentOS 7.2操作系统 基础服务:Eureka服务注册中心+Config服务配置中心 其他:Zuul服务网关+Zipkin服务追踪中心+RabbitMQ消息队列服务+Elastic...
  • K8S架构与部署

    2018-11-23 11:19:34
    Kubernetes 是 Google 团队发起并维护的基于 Docker 的开源容器集群管理系统,它不仅支持常见的云平台,而且支持内部数据中心。 建于 Docker 之上的 Kubernetes 可以构建一个容器的调度服务,其目的是让用户透过 ...
  • 容器化监控方案参考

    千次阅读 2022-03-17 10:48:00
    现阶段容器化方案总结 容器化监控曾经出现过的几种方案: 1/ Heapster[1] + ElasticSearch + Kibana 2/ Heapster[2] + influxdb + grafana Heapster 通过 cAdvisor 组件收集 Node 和 容器的监控数据。...
  • 微服务SpringCloud项目docker容器化部署

    千次阅读 2019-03-08 18:32:58
    近期接到领导通知,要对公司应用进行后台架构进行调整,把java应用从原先的java -jar **.jar启动方式,改成全部以docker容器的方式运行,这篇文章,是笔者在对java应用容器化的过程做的记录。 应用是采用微服务...
  • 项目的容器化部署

    千次阅读 2021-01-10 11:43:55
    一、项目的容器化部署过程 二、使用Git将本地代码推送到远程仓库 一、项目的容器化部署过程 1、通过Docker Hub 查找项目所需镜像的相应版本,并拉取镜像 Docker Hub,由于网络原因,我们在pull Image 的时候,从...
  • 首先,一键自动部署方案对于开发人员的使用是十分友好的。一般开发人员只需要从jenkins页面或者IDEA连接jenkins,选中对应的项目,点击构建就只需要等待项目部署完成即可。 其次,对于运维人员来说需要清楚的认识...
  • 虚拟私有云(Virtual Private Cloud,以下简称VPC),为云服务器、云容器、云数据库等资源构建隔离的、用户自主配置和管理的虚拟网络环境,提升用户云上资源的安全性,简化用户的网络部署。 您可以在VPC中定义安全组...
  • 超详细Docker容器化自动部署(纯手打)

    千次阅读 2019-12-12 10:53:34
    微服务容器化自动部署 1. 传统手动部署: 首先基于源码打包生成jar包(或war包),将jar包(或war包)上传至虚 拟机并拷贝至JDK容器。 2. 通过Maven插件自动部署: 对于数量众多的微服务,手动部署无疑是非常麻烦...
  • 企业级应用容器化部署实践.docx
  • 说明 在之前的文章《Apollo学习(三): 分布式部署》中,我简单介绍了在Windows环境下,实现Apollo配置中心的分布式部署。本篇博文我将对如何实现Apollo的docker容器化分布式部署的步骤进行记录总结。...容器化部署A...
  • docker容器化部署nginx前端项目

    千次阅读 2021-11-19 11:39:33
    根据博客https://www.cnblogs.com/myzony/p/9071210.html先安装docker容器。 执行docker pull nginx,拉取最新的nginx镜像。执行docker images 查看镜像是否拉取成功。 执行docker run -d -p 80:80 --name nginx-...
  • 利用Docker对DataX和Datax-Web进行容器化部署,搭建数据同步平台。 DataX简介 DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、...
  • 比起传统部署来可以省去很多步骤,特别适合频繁变更的敏捷开发项目(其实容器化部署的项目最好都使用自动化,相当省事)。   本文主要是对各个组件的理解和使用,具体的安装步骤不展开。都是个人的简单理解,希望...
  • 文章目录什么是dockerdocker的优点docker image镜像Dockerfile 文件Dockerfile配置例子创建docker镜像docker container 容器模型部署参考和更多阅读 docker部署机器学习或深度学习模型正在成为企业大规模部署的一种...
  • docker与kubernetes的培训PPT;涉及大型系统演进、系统现状分析、docker与k8s的基础与高级操作、系统后续改进方案与建议
  • Django--015 容器化部署

    千次阅读 2021-10-28 14:37:50
    这里写自定义目录标题django服务部署1. 代码准备 django服务部署 1. 代码准备 关闭dubug # settings.py # 设置DEBUG=False后,django server停止静态服务,此时就需要对应的服务器 DEBUG=False # 配置静态文件根...
  • docker容器化部署好处

    千次阅读 2021-07-30 07:03:38
    传统的PaaS技术虽然也可以一键将本地应用部署到云上,并且也是采用隔离环境(容器)的形式去部署,但是其兼容性非常的不好。因为其主要原理就是将本地应用程序和启停脚本一同打包,然后上传到在实际情况下,由于本地与...
  • (1)因为我使用了shipyard来管理容器,8080端口,所以tomcat默认的8080端口就无法使用了,需要使用其他端口映射到8080端口,这个很实用,因为我们服务器上可能部署很多项目,不同的项目可以使用不同的端口映射到...
  • 容器化部署OpenStack的正确姿势

    千次阅读 2019-03-05 15:06:39
    本次分享主要是和大家交流基于Docker容器运行和部署OpenStack。那么,安装OpenStack都有哪些方法呢?对于很多刚接触OpenStack的新人而言,安装无疑是一大挑战,同时也直接提高了学习OpenStack云计算的技术门槛。 .....
  • 使用容器部署服务,自行搭建镜像仓库和k8s成本大, 业务迭代慢,需要建设devops,提升迭代发布流程

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 121,847
精华内容 48,738
关键字:

容器化部署方案

友情链接: 3.rar