Docker build
Obsah
Docker build
Frontend
Backend
Database
Frontend
Default Port: 80
V projekte vytvorime súbor pod názvom “Dockerfile” pridáme nasledujúci obsah:
FROM node:10 as build
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build
FROM nginx
MAINTAINER Netgrif <devops@netgrif.com>
COPY default.nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=build /app/{outputPath}/ /usr/share/nginx/html/
EXPOSE 80
ENTRYPOINT ["nginx", "-g", "daemon off;"]
outputPath
- je nastavený v súbore angular.json2
Potom si vytvoríme súbor “default.nginx.conf
" do ktorého nakopírujeme nasledujúci obsah
map $sent_http_content_type $expires {
default off;
text/html epoch;
text/css max;
application/json max;
application/javascript max;
~image/ max;
}
server {
listen 80;
root /usr/share/nginx/html;
index index.html index.htm;
location / {
try_files $uri $uri/ /index.html;
}
expires $expires;
gzip on;
}
Tento konfiguračný súbor nám zabezpečuje aby routing aplikácie (angular) začal fungovať.
Backend
Default Port: 8080
V projekte vytvoríme súbor pod názvom “Dockerfile” pridáme nasledujúci obsah:
FROM openjdk:11-jdk
MAINTAINER Netgrif <devops@netgrif.com>
RUN mkdir -p /src/main/
RUN mkdir log
RUN mkdir storage
ARG RESOURCE=src/main/resources
ARG JAR_FILE=target/*-exec.jar
COPY ${RESOURCE} src/main/resources
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","-Duser.timezone=CET","/app.jar"]
Následne si vybuildime aplikáciu pomocou Maven (mnv clean packege install). Pozrieme v priečinku target
kde sa nachádza exectuted jar. Toto jar dame do argumentu JAR_FILE
.
Kubernetes potom musime priecinok storage a log mountnut:
volumeMounts:
- name: storage
mountPath: /storage
- name: log
mountPath: /log
Database v Kubernetes
Ak chceme databázy využívať na Produkčne prostredia treba nastaviť Cluseter!!!
Ak chceme na Test alebo DEV prostredie môžeme použiť nasledujúce riešenie.
Mongo
Default Port: 27017
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
namespace: test
name: mongo-pv-claim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: test
name: mongo-deployment
spec:
replicas: 1
selector:
matchLabels:
cdk8s.deployment: mongo-deployment-template
template:
metadata:
namespace: test
labels:
cdk8s.deployment: mongo-deployment-template
spec:
containers:
- image: mongo:4.2
imagePullPolicy: Always
name: mongo-pod
ports:
- containerPort: 27017
volumeMounts:
- name: mongo-storage
mountPath: /var/lib/mongo
volumes:
- name: mongo-storage
persistentVolumeClaim:
claimName: mongo-pv-claim
---
apiVersion: v1
kind: Service
metadata:
namespace: test
name: mongo-service
spec:
ports:
- port: 27017
targetPort: 27017
selector:
cdk8s.deployment: mongo-deployment-template
Elasticsearch
Default Port: 9200, 9300
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
namespace: test
name: elasticsearch-pv-claim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: test
name: elasticsearch-deployment
spec:
replicas: 1
selector:
matchLabels:
cdk8s.deployment: elasticsearch-deployment-template
template:
metadata:
namespace: test
labels:
cdk8s.deployment: elasticsearch-deployment-template
spec:
containers:
- image: elasticsearch:7.10.1
imagePullPolicy: Always
name: elasticsearch-pod
env:
- name: cluster.name
value: elasticsearch
- name: discovery.type
value: single-node
- name: http.host
value: 0.0.0.0
- name: transport.host
value: 0.0.0.0
- name: node.name
value: elasticsearch
ports:
- containerPort: 9300
- containerPort: 9200
volumeMounts:
- name: elasticsearch-storage
mountPath: /var/lib/elastic
volumes:
- name: elasticsearch-storage
persistentVolumeClaim:
claimName: elasticsearch-pv-claim
---
apiVersion: v1
kind: Service
metadata:
namespace: test
name: elasticsearch-service
spec:
ports:
- port: 9300
name: cluster
- port: 9200
name: bash
selector:
cdk8s.deployment: elasticsearch-deployment-template
Redis
Default Port: 6379
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
namespace: test
name: redis-pv-claim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: test
name: redis-deployment
spec:
replicas: 1
selector:
matchLabels:
cdk8s.deployment: redis-deployment-template
template:
metadata:
namespace: test
labels:
cdk8s.deployment: redis-deployment-template
spec:
containers:
- image: redis:5
imagePullPolicy: Always
name: redis-pod
ports:
- containerPort: 6379
volumeMounts:
- name: redis-storage
mountPath: /var/lib/elastic
volumes:
- name: redis-storage
persistentVolumeClaim:
claimName: redis-pv-claim
---
apiVersion: v1
kind: Service
metadata:
namespace: test
name: redis-service
spec:
ports:
- port: 6379
targetPort: 6379
selector:
cdk8s.deployment: redis-deployment-template