美文网首页
将单机应用服务制作为镜像

将单机应用服务制作为镜像

作者: 金刚_30bf | 来源:发表于2018-06-28 22:16 被阅读0次

    本文将原虚机上部署的redis制作镜像并使用 Kubernetes运行。
    注: 原单台机器上部署了redis 伪集群, 本文记录一般应用制作镜像的过程,本例中redis服务本身不是重点。

    选择基础版本镜像 centos

    选择官方的centos , docker pull centos

    使用docker运行该centos镜像

    docker run -v /root/data:/data -ti centos /bin/bash

    安装基本软件和 应用软件

    1. yum , 需要修改源 和 配置yum代理, 将相关配置文件放到宿主机的共享目录 /root/data , 共享给容器。
    2. 安装 net-tools , bind-utils
      yum install net-tools (ifconfig)
      yum install bind-utils (nslookup)
      验证 使用 ifconfig , nslookup
    3. 安装 vim (可选)
      yum install vim
    4. 配置时区
      使用tzselect , 选择时区 。
      将结果配置到环境变量 /etc/profile 中 :
    TZ='Asia/Shanghai'; export TZ
    

    建立软连接:
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

    通过 date -R 验证
    Thu, 28 Jun 2018 21:59:12 +0800

    1. 将应用redis打包, 通过共享目录给容器

    配置应用

    该应用比较特殊的地方在于需要根据本机的ip地址进行应用配置, 而每次容器启动后分配的地址可能不固定,因此需要自写脚本来获取ip 并 修改相应的配置文件 .
    该脚本的作用在于,修改配置 并启动服务 。

    if [ -x "/sbin/ifconfig" ];
    then
    _rhost=$(/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}')
    else
    _rhost=$(ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}')
    fi
    _rhost=${_rhost/'addr:'/}
    
    # _rhost="10.30.11.11" 
    
    echo "ip address: $_rhost" 
    echo "date zone:" `date -R`
    
    sourceip="172.17.0.3"
    
    # redis-slave2.conf  sentinel.conf 
    echo "sed redis-slave2.conf ===================="
    sed -i "s/$sourceip/$_rhost/" /app/redis/redis-2.8.19/config/redis-slave2.conf
    
    cat /app/redis/redis-2.8.19/config/redis-slave2.conf
    
    echo "sed sentinel.conf ===================="
    sed -i "s/$sourceip/$_rhost/" /app/redis/redis-2.8.19/config/sentinel.conf
    
    

    提交该容器制作初步镜像

    1. 从上述容器退出 。
    2. 通过 docker ps -a | grep centos , 获取刚刚退出的容器id 。
    3. 使用 commit命令 ,生成提交容器变更内容 ,生成新镜像 , docker commit 9999bb3459bc redis-tmp
    4. 通过 docker images 来查看新生成的镜像 ,名称为redis-tmp ,容器IMAGE ID 为 ad8752d52fc4 。

    制作dockerfile

    FROM redis-tmp
    MAINTAINER xxx
    WORKDIR /app/redis/redis-2.8.19/bin/
    
    EXPOSE 6379
    EXPOSE 7379
    EXPOSE 8379
    EXPOSE 26379
    
    ENTRYPOINT ./dockerRedisStart.sh && tail -F ./sentinel.log
    
    

    FROM redis-tmp , 从上述初步镜像来作为基础镜像 。
    ENTRYPOINT 是容器运行时执行的命令入口, 命令需要前台执行,否则执行完会自动退出, 这里 tail -F ./sentinel.log 是为了防止自动退出,又能打印日志。

    docker build

    docker build -f shenmaredis-dockerfile -t shenma-redis-tmp ./
    docker build -f dockerfile文件 -t 生成的镜像名称

    通过 docker images 可以查看到新生成的镜像。

    镜像重命名 并 放入私有仓库 :
    docker tag shenma-redis-tmp:latest node205:5000/shenma-redis:test
    docker push node205:5000/shenma-redis:test

    在工作节点上 拉取该新生成的镜像

    这一步主要是因为k8s配置文件中没有配置镜像拉取策略。
    防止node使用本地镜像而不去取最新的镜像。

    使用kubectl 创建相应资源

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: shenma-redis
      labels:
        app: redis
        envs: develop
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: redis
          envs: develop
      template:
        metadata:
          labels:
            app: redis
            envs: develop
        spec:
          containers:
          - name: shenma-redis
            image: node205:5000/shenma-redis:test
            # imagePullPolicy: Always
            ports:
            - containerPort: 26379
    

    创建资源Deployment:
    kubectl create -f shenma-redis-deployment.yaml

    查看pods :
    kubectl get pods -o wide

    查看日志 :
    kubectl logs -f shenma-redis-545f986bd-bp69g

    删除资源:
    kubectl delete -f shenma-redis-deployment.yaml

    进入镜像

    kubectl exec pod-name -ti /bin/bash

    相关文章

      网友评论

          本文标题:将单机应用服务制作为镜像

          本文链接:https://www.haomeiwen.com/subject/jjmnyftx.html