看来是这样吗?我们将fabric8-maven-plugin连接到项目,然后进行:在OpenShift中构建,运行应用程序。但是当我学习时,我想对这个过程有更多的了解,然后我希望对在OpenShift中构建和部署应用程序的过程有更多的控制和自由。因此,以下情况证明具有此类功能。- 我自己用工具(Maven,Gradle等)构建工件。
- 我通过Dockerfile控制Docker Image的创建
- Openshift中的构建和部署过程是在模板中配置的,即 任何容器规格,吊舱均可定制。
- 因此,流程本身可以转移到外部组件,部署系统
当然,为此,我使用了OpenShift本身的可用功能,这些功能很多。所以我准备了一个Java工件,然后准备了一个具有所需特性和功能的Dockerfile。Docker文件
FROM openjdk
MAINTAINER Rylkov Alexander <arylkov@.>
COPY demo.springboot.mvn-0.0.1-SNAPSHOT.jar /deployments/app.jar
ENV JAVA_OPTS="$JAVA_OPTS -Xms500m -Xmx1024m"
EXPOSE 8080
EXPOSE 5005
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar /deployments/app.jar" ]
因此,该文件夹中将有两个文件:工件和Dockerfile
,这些文件的构成是有条件的,例如,如果在Dockerfile中需要用于Docker映像的其他文件,我们在此处添加它们。现在,在Dockerfile中指定了基本的Java映像和Spring引导应用程序,两个端口都已打开,等等。在这一步,我们可以选择/自由选择构建应用程序和组装Docker映像的工具。接下来,我为应用程序准备OpenShift模板,此操作可以是一次性的,只需要参数化即可。由于它包含创建,启动和操作应用程序的所有可能,因此我们将通过它管理这些过程。对我来说这将非常简单,并且由三个最必要的配置组成模板java-app-samplekind: Template
apiVersion: v1
metadata:
labels:
app: java-app-sample
name: java-app-sample
annotations:
description: >-
This example shows how to create a simple Java application in openshift
tags: java
parameters:
- name: APP_NAME
description: application name
value: app-sample
required: true
objects:
- kind: ImageStream
apiVersion: v1
metadata:
name: "${APP_NAME}"
spec:
tags:
- from:
kind: DockerImage
name: 172.30.1.1:5000/myproject/${APP_NAME}:latest
name: latest
- kind: BuildConfig
apiVersion: v1
metadata:
name: "${APP_NAME}"
labels:
name: "${APP_NAME}"
spec:
source:
binary: {}
type: Binary
strategy:
type: Docker
output:
to:
kind: DockerImage
name: 172.30.1.1:5000/myproject/${APP_NAME}:latest
postCommit: {}
resources: {}
- kind: DeploymentConfig
apiVersion: v1
metadata:
name: "${APP_NAME}"
spec:
strategy:
type: Rolling
rollingParams:
updatePeriodSeconds: 1
intervalSeconds: 1
timeoutSeconds: 120
resources: {}
replicas: 1
selector:
app: "${APP_NAME}"
template:
metadata:
labels:
app: "${APP_NAME}"
spec:
containers:
- name: "${APP_NAME}"
image: 172.30.1.1:5000/myproject/${APP_NAME}:latest
ports:
- containerPort: 8080
protocol: TCP
- containerPort: 5005
protocol: TCP
env:
- name: TZ
value: Europe/Moscow
resources:
limits:
cpu: '0.5'
memory: 1000Mi
requests:
cpu: '0.2'
memory: 500Mi
imagePullPolicy: Always
restartPolicy: Always
dnsPolicy: ClusterFirst
triggers:
- type: ConfigChange
imageChangeParams:
automatic: true
containerNames:
- "${APP_NAME}"
from:
kind: ImageStreamTag
name: 172.30.1.1:5000/myproject/${APP_NAME}:latest
- type: ImageChange
status: {}
在模板中,以一些容器参数为例,例如,资源/限制,TZ环境变量,指定了一个模板参数-应用程序名称(APP_NAME)。注册表泊坞地址是为minishift版本指定的(我在本地将其用于开发172.30.1.1►000/ myproject /)和其他名称,但对于我的情况,最重要的地方在此处显示 - kind: BuildConfig
spec:
source:
binary: {}
type: Binary
strategy:
type: Docker
BuildConfig表示源将为二进制文件,并管理Docker映像准备策略-Dockerfile(类型:Docker)让我们在OpenShift中创建此模板 oc create -f template.yaml
该模板将显示在模板目录中(可以从Web UI控制台组织该过程,但不能在此处进行组织)。
使用此模板,我们将创建一个应用程序(实际上,这只是一个名称,仅此而已)oc new-app java-app-sample -p APP_NAME=app-sample
指定模板名称和应用程序名称参数
我的三个配置已创建。我们开始在容器中组装和部署应用程序。>oc start-build app-sample --from-dir . --follow
从指示二进制文件和Dockerfile的文件夹中执行非常重要,仅--from-dir参数指示整个文件夹将准备好加载到OpenShift中,以在Docker注册表中构建和部署映像。该命令还有其他参数,例如来自归档文件的参数。
我们看到文件夹的内容已加载到OpenShift中,OpenShift启动了Docker进程以为Dockerfile准备映像,最后将映像放置在Docker注册表中。该应用程序是
在OpenShift Web控制台中启动的,该容器参数
是在日志
中的配置环境变量
中指定的配置中指定的。
因此,在没有其他插件的情况下,我们具有最大的控制权和选择自由度,我们设法将应用程序放置在OpenShift中。用料安装Minishift以了解OpenShift,建议从Minishift开始