/
Docker build

Docker build

 Obsah

Docker build

  1. Frontend

  2. Backend

  3. 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