精华内容
下载资源
问答
  • 前端容器化部署方案

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

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

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

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

    展开全文
  • 彻底解决容器化部署ftp

    千次阅读 2020-06-06 08:32:36
    网上有不少ftp容器化部署教程,但涉及场景都很简单,大多是本地容器化部署。本文亲自示范各种docker 和 kubernetes下容器化ftp服务的方式。针对遇到的访问远程ftp server问题进行记录

    背景

    我们的项目要接管各种容器化中间件服务,之前容器化sftp相当顺利,在dockerhub上找了一个most popular image 通过kubernetes deployment 一部署分分钟搞定。这次部署ftp本以为更加简单,结果遇到一些坑,费了些劲。在此记录一下。

    ftp核心要点

    磨刀不误砍柴工,用好一个中间件,或者我们这里容器化之前需要先对它有个大致的了解,不然不同的搜索答案然后尝试,盲人摸象,反而浪费时间,也不利于自己的进步。

    FTP是基于TCP协议的服务,而在FTP服务器和客户端建立连接时,有两种模式主动模式(Active)和被动模式(Passive)。
    通过以下两张图就可以了解ftp两种模式的工作流程
    在这里插入图片描述
    在这里插入图片描述

    容器化部署

    镜像相关信息及获取方式参见dockerhub
    这里我对该镜像稍微进行了改动,主要在ftp配置文件中增加了以下配置,关于配置的解释我已经加到注释中,因为涉及安全问题,请根据自己情况评估

    #If the pasv_promiscuous is off (the default), the vsftpd server checks that the client (IP address), which is connecting to the transfer port is the same, as the client connected to the FTP control connection (which requested the transfer).
    
    #When the pasv_promiscuous is on, no check is done. So if a potential attacker guesses the random port number (which may not be random, but incremental, hence easy to guess), he/she can connect to the transfer port before a legitimate client does and steal the data (in case of a download) or sneak in his/her own data (in case of an upload).
    pasv_promiscuous=YES
    

    以上配置主要是避免一些安全检测使连接失败的问题,比如如下提示

    425 Security: Bad IP connecting
    

    需要镜像及改动后的镜像请留言

    docker

    docker run -d -v /my/data/directory:/home/vsftpd \
    -p 20:20 -p 21:21 -p 21100-21110:21100-21110 \
    -e FTP_USER=myuser -e FTP_PASS=mypass \
    -e PASV_ADDRESS=127.0.0.1 -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 \
    --name vsftpd --restart=always fauria/vsftpd
    

    在本地运行以上命令可以快速启动ftp服务,注意修改一下本地的挂载目录,另外环境变量PASV_ADDRESS如果是在本地无需修改,如果部署在其他服务器或者暴露在公网,要修改为对应的host ip 或 公网ip
    有些文章中说需要进入到容器容器去修改或者增加一些用户信息,其实这里通过环境变量就已经搞定。docker部署方式相对简单很多。

    kubernetes

    今天主要遇到的问题就是我们是基于阿里云的kubernetes服务来部署的,service服务暴露是基于阿里云的负载均衡方式实现。

    先说一下最终实现方案:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-ftp
      namespace: default
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      selector:
        matchLabels:
          app: my-ftp
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: my-ftp
        spec:
          containers:
            - env:
                - name: FTP_USER
                  value: myuser
                - name: FTP_PASS
                  value: mypass
                - name: PASV_MIN_PORT
                  value: '10022'
                - name: PASV_MAX_PORT
                  value: '10022'
                - name: PASV_ADDRESS
                  value: xx.xx.xx.xx #service对外暴露公网ip
              image: 'ftp:fauria'
              name: my-ftp-container
              ports:
                - containerPort: 10022
                  protocol: TCP
                - containerPort: 21
                  protocol: TCP
                - containerPort: 20
                  protocol: TCP
              resources: {}
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
          
          ---------------------------------------------------------------
          
    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s1.small
      name: my-ftp
      namespace: default
    spec:
      clusterIP: 172.21.10.21
      externalTrafficPolicy: Local
      healthCheckNodePort: 31017
      ports:
        - name: my-ftp-10020-20
          nodePort: 30534
          port: 10020
          protocol: TCP
          targetPort: 20
        - name: my-ftp-10021-21
          nodePort: 31368
          port: 10021
          protocol: TCP
          targetPort: 21
        - name: my-ftp-10022-10022
          nodePort: 32329
          port: 10022
          protocol: TCP
          targetPort: 10022
      selector:
        app: my-ftp
      type: LoadBalancer
    status:
      loadBalancer:
        ingress:
          - ip: xx.xx.xx.xx #service对外暴露公网ip
    
    

    几点说明:

    • 部署时delolyment中指定的环境变量 PASV_ADDRESS为service部署后分配的公网ip。
    • 我在部署的时候选择的被动模式数据发送端口 最大值和 最小值一致,这样只会使用一个端口来进行数据传输,也即1022端口,因为我在测试阶段只有一个客户端去链接
    • service的暴露方式这里使用的是阿里云的slb方式,外部流程策略使用的是 local类型

    验证

    我通过安装ftp命令行工具测试通过了,主要的测试命令如下

    #登录
    [root@6606edeb65ae /]# ftp xx.xx.124.xx 10021
    Connected to xx.xx.124.xx (xx.xx.124.xx).
    220 (vsFTPd 3.0.2)
    Name (xx.xx.124.xx:root): myuser
    331 Please specify the password.
    Password:
    230 Login successful.
    
    #send deirectory
    ftp> dir
    227 Entering Passive Mode (xx,xx,124,xx,39,38).
    150 Here comes the directory listing.
    226 Directory send OK.
    
    
    #传输文件
    ftp> put /tmp/ks-script-56tHfe text
    local: /tmp/ks-script-56tHfe remote: text
    227 Entering Passive Mode (47,99,124,169,39,38).
    150 Ok to send data.
    226 Transfer complete.
    836 bytes sent in 0.00138 secs (604.05 Kbytes/sec)
    

    说以下遇到的一个坑,在使用客户端FileZilla 以及mac 自带的客户端(command+k可以快速打开)连接ftp server时,出现了各种问题。本地docker部署的方式使用以上两个工具连接没有问题。但连接到阿里云上kubernetes的ftp时出现各种问题:

    状态: 	已登录
    状态: 	读取目录列表...
    命令: 	PWD
    响应: 	257 "/"
    命令: 	TYPE I
    响应: 	200 Switching to Binary mode.
    命令: 	PASV
    响应: 	227 Entering Passive Mode (XX,XX,XX,XX,39,38).
    命令: 	LIST
    错误: 	无法建立数据连接: ECONNREFUSED - 连接被服务器拒绝
    响应: 	150 Here comes the directory listing.
    响应: 	426 Failure writing network stream.
    错误: 	读取目录列表失败
    

    包括我在stackoverflow看到一个哥们在aws云上貌似也遇到了同样的问题,但并没有有效回答,有时候工具也挺坑的。包括网上有人建议进行如下设置,我觉得这些并不可取
    在这里插入图片描述

    写在最后
    我司多年专注各种服务器代理:
    1 来自于阿里、腾讯等大厂开发人员免费答疑,针对您的使用场景规划最合理产品方案和架构,最大限度节约成本。
    2.各类云服务器全网超低价。 联想、华为、阿里、腾讯等厂商指定合作代理公司,购买有保障。
    以远低于原厂的价格享受原厂的服务!

    展开全文
  • 文章目录一、前言二、Minio三、k8s容器化部署 一、前言 分布式文件存储系统,作为一个码农,多多少少会听说大名鼎鼎 hadoop 的文件系统 HDFS 和 FastDFS。这个两个在文件存储各有优劣,但是对于现在流行的k8s容器化...

    一、前言

    分布式文件存储系统,作为一个码农,多多少少会听说大名鼎鼎 hadoop 的文件系统 HDFS 和 FastDFS。这个两个在文件存储各有优劣,但是对于现在流行的k8s容器化部署来说,这两个部署都过于麻烦,而且官网也没有明确提出部署方法。

    下面就要说到我们的主角

    提供官网 http://www.minio.org.cn/

    二、Minio

    说到 minio,我们最关心的两点,一点是是否开源,其次是好不好用。

    从官网看出,是绝对开源的。还有用户遍布很广。

    三、k8s容器化部署

    官网提供两个方式

    1. MinIO Helm Chart通过一个简单的命令即可提供自定义而且简单的MinIO部署。更多关于MinIO Helm部署的资料,请访问这里.

    2. 你也可以浏览Kubernetes MinIO示例 ,通过.yaml文件来部署MinIO。

    Helm 需要联网,这个对于没有网络的服务器,简直是噩耗。

    所以,我们准备用最传统的yaml的方式进行部署

    参考官网:

    下载 —> kubernetes —> kubernetes CLI

    在这里插入图片描述
    注意:
    账号密码 root123/adminadmin
    集群方式部署
    最少的节点为:4
    存储节点为 50 GB

    完整的yml

    apiVersion: v1
    kind: Service
    metadata:
      name: minio
      labels:
        app: minio
    spec:
      clusterIP: None
      ports:
        - port: 9000
          name: minio
      selector:
        app: minio
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: minio
    spec:
      serviceName: minio
      replicas: 4
      template:
        metadata:
          labels:
            app: minio
        spec:
          containers:
          - name: minio
            env:
            - name: MINIO_ACCESS_KEY
              value: "root123"
            - name: MINIO_SECRET_KEY
              value: "adminadmin"
            image: minio/minio
            args:
            - server
            - http://minio-{0...3}.minio.default.svc.cluster.local/data
            ports:
            - containerPort: 9000
            # These volume mounts are persistent. Each pod in the PetSet
            # gets a volume mounted based on this field.
            volumeMounts:
            - name: data
              mountPath: /data
      # These are converted to volume claims by the controller
      # and mounted at the paths mentioned above.
      volumeClaimTemplates:
      - metadata:
          name: data
        spec:
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 50Gi
          # Uncomment and add storageClass specific to your requirements below. Read more https://kubernetes.io/docs/concepts/storage/persistent-volumes/#class-1
          #storageClassName:
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: minio-service
    spec:
      type: LoadBalancer
      ports:
        - port: 9000
          targetPort: 9000
          protocol: TCP
      selector:
        app: minio
    

    以上镜像为 minio/minio
    需要设置储存卷的名字 storageClassName

    有了完整的yaml,部署就是简简单单的

    如果看了上面的yml还不会部署,可以在留言,一天内回复!!!!

    展开全文
  • 因此,容器虚拟也被称为“操作系统级虚拟”,容器技术可以让多个独立的用户空间运行在同一台宿主机上。由于“客居”于操作系统,容器只能运行与底层宿主机相同或者相似的操作系统。   2、容器与虚拟机比较 ...

    前言:Docker容器就是:一个镜像格式;一系列标准操作;一个执行环境。

     

    1、容器技术

          容器则是直接运行在操作系统内核之上的用户空间。因此,容器虚拟化也被称为“操作系统级虚拟化”,容器技术可以让多个独立的用户空间运行在同一台宿主机上。由于“客居”于操作系统,容器只能运行与底层宿主机相同或者相似的操作系统。

     

    2、容器与虚拟机比较

    (1)本质上的区别

    (2)使用上的区别


    3、Docker容器

           Docker可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容器即可。容器是基于镜像启动起来的,容器中可以运行一个或多个进程。我们可以认为,镜像是Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。  容器基于镜像启动,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务。

            Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而Docker运输软件。和集装箱一样,Docker在执行上述操作时,并不关心容器中到底装了什么,它不管是web服务器,还是数据库,或者是应用程序服务器什么的。所有的容器都按照相同的方式将内容“装载”进去。

           Docker也不关心你要把容器运到何方:我们可以在自己的笔记本中构建容器,上传到Registry,然后下载到一个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机中。像标准集装箱一样,Docker容器方便替换,可以叠加,易于分发,并且尽量通用。

            使用Docker,我们可以快速的构建一个应用程序服务器、一个消息总线、一套实用工具、一个持续集成(CI)测试环境或者任意一种应用程序、服务或工具。我们可以在本地构建一个完整的测试环境,也可以为生产或开发快速复制一套复杂的应用程序栈。

     

    4、docker容器的特点

    (1)上手快:环境启动快

    (2)职责分类:Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。

    (3)快速开发:缩短代码从开发、测试到部署、上线运行的周期,让应用程序具备可移植性,易于构建,并易于协作。

    (4)面向SOA:   Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得非常简单。

     

    5、docker相关命令

    (1)启动或者关闭

         启动dockersystemctl start docker

         停止docker:systemctl stop docker

         重启docker:systemctl restart docker

    (2)列出所有镜像

         # docker  images

    (3)搜索镜像

         # docker search  镜像名称

    (4)拉取镜像

         # docker  pull   镜像名称

    (5)删除镜像

         # docker  rmi   镜像ID

    (6)查看所有容器

        # docker  ps  -a

    (7)启动交互式容器

         # docker run -it --name=命名的容器名称    安装镜像名称:标签信息   /bin/bash

    (8)退出交互式当前容器

        # exit

    (9)启动守护式容器

        # docker  run -di   --name=命名的容器名称   安装镜像名称:标签信息

      (10)  停止、启动守护式容器

       # docker  stop   命名的容器名称

      #  docker  start   命名的容器名称

    (11)文件拷贝

       # docker  cp  需要拷贝的文件或目录 容器名称:容器目录

    (12)查看容器 IP

       # docker  inspect  容器名

    (13)删除容器

       # docker  rm  容器名

      

    展开全文
  • Openstack容器化部署实现及参考

    千次阅读 2017-04-02 20:52:17
    1、容器化Openstack  在对Openstack进行升级或降级时,通常有两种方式可供选择,即基于...容器化Openstack的管理方案解决了当前主流Openstack部署系统中最两人头疼的Openstack可用性和管理维护难题。 2、问题
  • 文章目录什么是dockerdocker的优点docker image镜像Dockerfile 文件Dockerfile配置例子创建docker镜像docker container 容器模型部署参考和更多阅读 docker部署机器学习或深度学习模型正在成为企业大规模部署的一种...
  • 基于minio存储,容器化部署高可用docker-registry minio部署 根据部署方式不同,支持几种方式,二进制文件部署,docker容器部署,kubenetes集群部署 根据集群规划,可以分为单节点,分布式 本文档主要介绍后两种部署...
  • 目前,使用docker部署机器学习或深度学习模型正在成为企业大规模部署的一种常规操作。基于目前工作的情况,刚好可以使用现成的模型尝试使用...Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协...
  • Ceph集群Docker容器化部署

    千次阅读 2018-05-16 14:00:28
    目标:使用docker部署ceph集群
  • Docker容器化部署Python应用

    千次阅读 2019-07-17 07:45:00
    简介Docker是目前主流IT公司广泛接受和使用的,用于构建、管理和保护它们应用程序的工具。容器,例如Docker允许开发人员在单个操作系统上隔离和运行多个应用程序,而不...
  • PostgreSQL的集群化和容器化部署

    千次阅读 2019-02-13 12:22:00
    本文介绍了传统业务大量使用的PostgreSQL数据库的分布式和容器集群部署方案,而MySQL作为互联网企业大量采用的数据库服务器系统,也出现了OceanBase、Vitess等多种集群化部署方案(参考《 分布式MySQL集群Vitess-...
  • SpringCloud Alibaba微服务实战十五 - SpringCloud 容器化部署
  • 容器化部署OpenStack的正确姿势

    千次阅读 2019-03-05 15:06:39
    本次分享主要是和大家交流基于Docker容器运行和部署OpenStack。那么,安装OpenStack都有哪些方法呢?对于很多刚接触OpenStack的新人而言,安装无疑是一大挑战,同时也直接提高了学习OpenStack云计算的技术门槛。 .....
  • 用Docker工具容器化部署服务之后,碰到的问题比较多。 其中比较特出的问题是这个时区问题。 1 问题现象: 举个例子,有个小功能,需要记录计划开始时间。 前台输入的时间是:2018.4.24 00:00:00。 后台记录的...
  • 小米Redis的K8s容器化部署实践

    千次阅读 2020-06-18 16:53:16
    本文讲述了小米是如何将Redis Cluster部署在K8S上提供高质量的服务的往期文章回顾:HBase Region Read Replicas功能详解背景Why K8SHow K8s...
  • web系统私有化部署方案

    千次阅读 2019-02-22 09:41:00
    本文介绍私有化部署的一种方案。 首先前端资源打包成静态资源或者直接就是node服务,其次后端服务打包部署,前后端分离分别部署。 在前端服务机器上部署nginx服务,当client端请求html,css,js资源时nginx服务直接...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 100,505
精华内容 40,202
关键字:

容器化部署方案