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

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

作者: 金刚_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