# 制作 gitbook 文档镜像，运行在 K8S 上

### 1. 制作 gitbook docker images <a href="#id-1-zhi-zuo-gitbookdockerimages" id="id-1-zhi-zuo-gitbookdockerimages"></a>

编写 dockerfile

* dockerfile

```
FROM nginx:alpine
WORKDIR /usr/share/nginx/html
ADD _book/ /usr/share/nginx/html
EXPOSE 80
```

> \_book 为 gitbook 的静态文件，gitbook serve 或 build 会生成该目录。

* 构建镜像

```
docker build -t book:0.01 .
```

* 运行容器（测试）

```
docker run -p 80:80 book:0.01
```

然后通过 docker tag，将其推送至远程的仓库。（如果要发布到正式环境的话）

### 2. 创建 K8S 资源 <a href="#id-2-chuang-jian-k8s-zi-yuan" id="id-2-chuang-jian-k8s-zi-yuan"></a>

* Deployment

```
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  labels:
    k8s-app: gitbook
    qcloud-app: gitbook
  name: gitbook
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: gitbook
      qcloud-app: gitbook
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        k8s-app: gitbook
        qcloud-app: gitbook
    spec:
      containers:
      - image: <YOUR GITBOOK IMAGES>  # gitbook 镜像地址
        imagePullPolicy: IfNotPresent
        name: gitbook
        resources:
          limits:
            cpu: 500m
            memory: 1Gi
          requests:
            cpu: 250m
            memory: 256Mi
        securityContext:
          privileged: false
          procMount: Default
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
```

* Service

```
apiVersion: v1
kind: Service
metadata:
  name: gitbook
spec:
  externalTrafficPolicy: Cluster
  ports:
  - name: tcp-80-80
    nodePort: 30226
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    k8s-app: gitbook
    qcloud-app: gitbook
  sessionAffinity: None
  type: LoadBalancer
```

* Ingress

```
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: query-ip
spec:
  rules:
  - host: dhcp.cn
    http:
      paths:
      - backend:
          serviceName: gitbook
          servicePort: 80
        path: /doc
status:
  loadBalancer:
    ingress:
    - ip: <YOUR LoadBalancer IP>
```
