一尘不染

Openshift-我可以使用Openshift运行docker客户端命令(例如docker push)吗?

docker

当您拥有Docker主机时,使用Docker很容易。您将Docker客户端与Docker主机(引擎)连接起来。然后,在Jenkins构建服务器上构建和部署(复杂)docker映像的过程类似于以下一系列命令:

  • Maven全新安装=>构建您的WAR文件
  • Docker build =>创建一个带有WAR应用程序文件的Wildfly映像
  • Docker标记=>标记新映像
  • Docker push =>将映像推送到docker hub
  • Docker run ==>在docker主机上安装并运行docker镜像。

Openshift Starter可以这样工作吗?答案:是的,此容器即服务(CAAS)选项是可能的。

完整的解决方案:

在下面的步骤中,我创建一个由2个图像组成的项目:MySql和由Wildfly服务器托管的SpringBoot / Angular /
Hibernate。当然,这也适用于Spring Boot JAR应用程序。

您从本地运行的Docker守护程序开始。我是通过Docker Quickstart Terminal执行此操作的。我仅将minishift用于本地测试-
在这种情况下不使用。

步骤1 :创建一个项目和1个MySql应用程序。

无需docker即可通过Openshift Web控制台完成此操作。您也可以使用oc new-proect命令。

步骤2 :登录openshift项目。在在线控制台中,单击顶部栏(右侧)上的问号。选择“命令行工具”。您可以通过右侧的图标将登录命令复制到剪贴板。

$ oc login等…(第一个剪贴板图标,粘贴整个命令)。

步骤3 :登录到您的Docker注册表。在这种情况下,请检查openshift在线控制台。

$ docker login -uoc whoami -poc whoami --show-tokenregistry.pro-us-
east-1.openshift.com

注意:请勿将端口号用作后缀openshift:443!

步骤4: 在本地或在构建服务器上(使用Jenkins)构建并标记映像。

$ mvn clean install-创建war文件。您可以将其称为“ ROOT.war”。

$ docker build -t myproject / mynewapplication:latest。

$ docker标签myproject / mynewapplication Registry.pro-us-
east-1.openshift.com/myproject/mynewapplication

如果您输入的名称不正确,一会儿您将无法推送图像。所以不要(!)写pro-us-east1。它是pro-us-east-1,等等。

Dockerfile位于Maven项目文件夹中。dockerfile可能看起来像:

FROM jboss/wildfly
COPY target/ROOT.war /opt/jboss/wildfly/standalone/deployments/
# CMD - use the default wildfly default start command

内存效率更高的方法是:

FROM openjdk:8-jdk-alpine
ENV JAVA_APP_JAR your.jar
ENV AB_OFF true
EXPOSE 8080
ADD target/$JAVA_APP_JAR /deployments/
CMD ["java","-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-jar","/deployments/your.jar"]

最后的设置将极大地改善/平衡您的内存使用情况。就我而言,将运行中的容器从600MB +减少到大约300MB可以正常运行!

步骤5 :将映像推送到内部Openshift存储库

$ docker push Registry.pro-us-east-1.openshift.com/myproject/mynewapplication

步骤6-A.1 :通过new-app命令从现有docker映像创建应用程序。仅在创建应用程序时第一次执行此操作。

$ oc new-app mynewapplication

->在“ mynewapplication”标签的“ latest”标签下的“ myproject / mynewapplication”图像流中找到图像1233123223(大约一个小时)
...此映像将部署在部署配置“ mynewapplication”中
->创建资源...
    创建了deploymentconfig“ mynewapplication”
    服务“ mynewapplication”已创建
->成功
    运行“ oc status”以查看您的应用。

步骤6-A.2 :有关初始化设置,请参见下文。部署应用程序/
Web服务器时,创建一个“路由”,以便客户端可以访问该应用程序。由于必须执行一次,因此通过控制台(应用程序>路由)进行设置是一个很好的选择。示例:使用标准证书使您的网站仅可用于https:(1)使用目标端口8080(运行HTTP服务器的位置),(2)选中“安全路由”选项,(3)保持TLS终止为Edge。(4)对于不安全的流量,请选择“重定向”选项并…创建您的路线。稍等片刻,您就有一个HTTPS站点。

步骤6-B :更新图像时:推送现有图像时,将不会自动重新部署。您可以通过在线控制台或通过以下命令开始新的部署:

$ oc推出最新dc / mynewapplication -n myproject

要检查部署结果:

$ oc状态

要检查例如MySql容器是否正在运行:

$ oc获取豆荚

获取Mysql容器的名称。

$ oc rsh容器名称

然后,您将看到您是否真的可以访问数据库。

备注 :使用Openshift Starter / Original的 备注
:很高兴Openshift允许我们尝试免费的Starter版本。当然,对资源的使用有一系列限制。注意将“部署”策略设置为“重新创建”。“滚动”策略当然更好,但会消耗更多资源。我将MySql映像的资源大小通常设置为420Mi,而Wildfly映像的资源大小设置为600Mi。欢迎提出建议!


阅读 537

收藏
2020-06-17

共1个答案

一尘不染

您可以登录OpenShift的内部图像注册表,然后将图像直接推送到其中。您需要先标记图像,使其与推送图像的项目名称匹配。有关更多详细信息,请参见:

一旦推送到内部映像注册表,您就可以使用oc new-app或Web控制台从该映像进行部署。

2020-06-17