Docker 自动化部署

Docker 自动化部署

yum -y install docker

systemctl daemon-reload && systemctl restart docker

查看docker版本

docker version

安装 GitLab Runner

在具有gitlab的机子上安装 GitLab Runner

Runner 可以 Shell 方式也可以以 Docker 容器方式运行。Shell 比较简单,问题会比较少。 用 Docker Container 方式一台机器可以装多个 Runner。本文中 GitLab Runner 和 GitLab 安 装在同一台机器,装容器方式装多个会有性能问题,所以用简单的 Shell 方式。 官方参考文档:

https://docs.GitLab.com/runner/install/linux-repository.html
https://docs.gitlab.com/runner/

获取 Runner Token
打开 GitLab 网页,按下图指示,找到注册 token。
在这里插入图片描述

注册 Runner

官方文档参考:https://docs.GitLab.com/runner/register/index.html

注册成功显示:

Registering runner... succeeded runner=KZi5yDuK
Runner registered successfully. Feel free to start it, but if it's running already the config should
be automatically reloaded!

本文使用 socket binding 方式运行 docker,需修改/etc/gitlab-runner/config.toml 为 socket binding 方式,并添加 maven 库目录的本地映射,这样每次打包时不需要重下依赖包。另 外末尾加上 pull_policy = “if-not-present”,这样不会每次都拉镜像。

在这里插入图片描述

检查结果
打开 GitLab > Admin > Runners,如下图看到 Runner 列表即为成功。

在这里插入图片描述
创建 kubectl 镜像
需要一个 kubectl 镜像在 Gitlab 服务器上运行,并能远程连接 K8S 服务器的镜像。 kubectl的版本根据你安装的k8s而定。

Dockerfile:

FROM lachlanevenson/k8s-kubectl:v1.18.5
LABEL maintainer="key_dong@huatek.com"
ENV KUBE_LATEST_VERSION="v1.18.5"
ADD admin.conf /root/.kube/config
WORKDIR /root

编译上传

docker build -t kubectl:1.18.5 .
docker push kubectl:1.18.5

部署
#新建.gitlab-ci.yml

内容为:

variables:
MAVEN_OPTS: "-Dmaven.repo.local=/root/.m2/repository"  # 指定maven本地库路径
DOCKER_DRIVER: overlay2                                # 用overlay2优化性能
PROJECT_NAME: $CI_PROJECT_NAME                         # 用Gitlab工程名环境变量做后面打包的名字
PROJECT_VERSION: "2.0.0"

stages:
- build
- deploy

maven-build:
stage: build
script: 
    - mvn package -B -DskipTests                                        # 跳过测试节省时间
    - mv target/$CI_PROJECT_NAME*.jar target/app.jar                    # 打好的包重命名为app.jar 
    - docker build -t docker镜像 . #  生成docker镜像
    - docker push docker镜像       #   提交到镜像库
artifacts:
    paths:
    - ./*.yaml    

k8s-deploy:
stage: deploy
only:
    - master  # 只不是master节点
image: 
    name: k8s-kubectl:1.18.5   # 根据自己推送的地址改动 
    entrypoint: [""]                          
script:    
    #- /usr/bin/kubectl delete -f Deployment.yaml       # 如果第一次部署请注释掉  
    - /usr/bin/kubectl create -f Deployment.yaml
    - /usr/bin/kubectl set env deploy/$PROJECT_NAME DEPLOY_DATE="$(date)"  # 让k8s强制更新镜像

Deployment.yaml

---
apiVersion: apps/v1
kind: Deployment
metadata:
name:  自定义名称
labels:
    app:  自定义名称
    version:  自定义版本号
spec:
selector:
    matchLabels:
    app:  自定义名称
replicas: 1
template:
    metadata:
    labels:
        app:  自定义名称
    spec:
    containers:
    - name: 自定义名称
        image: 镜像地址
        imagePullPolicy: Always
        env:
        - 启动参数
---
apiVersion: v1
kind: Service
metadata:
name: torch-gen
labels:
    app: 自定义名称
    version: 自定义版本
spec:
selector:
    app:  自定义名称
type: LoadBalancer

完成,当提交master节点代码时候 就会自己部署到k8s docker中


版权声明:本文为qq_33286156原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。