当前位置: 首页 > 知识库问答 >
问题:

OpenShift-我可以使用OpenShift运行docker客户端命令(如docker推送)吗?

吴欣悦
2023-03-14

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

  • Maven干净安装=

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

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

从本地运行的Docker守护进程开始。我是通过Docker Quickstart终端完成的。我只在本地测试中使用了missift,所以在这种情况下不使用。

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

这可以通过OpenShift Web控制台在没有docker的情况下完成。您也可以使用oc new-proect命令。

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

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

第三步:登录到你的docker注册表。在这种情况下,检查openshift在线控制台。

$ docker login -u 'oc whoami' -p 'oc whoami --show-token' registry.pro-us-east-1.openshift.com

注意:不要使用端口号作为后缀openshift:443!!

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

$ mvn 全新安装 -- 创建 war 文件。你可以称之为“ROOT.war”。

$ docker build-t my project/my new application:最新。

$ docker标签my project/my new application registry . pro-us-east-1 . open shift . com/my project/my new application

如果你写的名字不正确,那么很快你将无法推送图像。所以不要(!)写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 . open shift . com/my project/my new application

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

$oc新应用程序mynew应用程序

--> Found image 1233123223 (About an hour old) in image stream "myproject/mynewapplication" under tag "latest" for "mynewapplication"
... This image will be deployed in deployment config "mynewapplication"
--> Creating resources ...
    deploymentconfig "mynewapplication" created
    service "mynewapplication" created
--> Success
    Run 'oc status' to view your app. 

步骤6-A.2:初始化设置见下文。部署应用程序/Web服务器时,创建一个“路由”,以便客户端可以访问应用程序。因为这必须完成一次,所以通过控制台进行设置(应用程序

步骤6-B:更新映像时:当您推送现有映像时,将不会自动重新部署。您可以通过联机控制台或通过以下命令启动新部署:

$oc推出最新的dc/mynew应用程序-n myProject

要检查部署结果,请执行以下操作:

$oc状态

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

$oc获取豆荚

获取Mysql容器的名称。

$ oc rsh容器-名称

你会看到你是否真的可以访问数据库。

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

共有2个答案

顾嘉德
2023-03-14

在OpenShift上部署Java应用的快速指南

卢普松
2023-03-14

你可以登录到OpenShift的内部图片注册表,直接把你的图片推送到里面。您需要首先标记图像,以便它与推送它的项目的名称相匹配。有关更多详细信息,请参见:

  • http://cookbook.openshift.org/image-registry-and-image-streams/how-do-i-push-an-image-to-the-internal-image-registry.html

推送至内部映像注册表后,您可以使用< code>oc new-app或web控制台从该映像进行部署。

 类似资料:
  • 问题内容: 当您拥有Docker主机时,使用Docker很容易。您将Docker客户端与Docker主机(引擎)连接起来。然后,在Jenkins构建服务器上构建和部署(复杂)docker映像的过程类似于以下一系列命令: Maven全新安装=>构建您的WAR文件 Docker build =>创建一个带有WAR应用程序文件的Wildfly映像 Docker标记=>标记新映像 Docker push

  • 我有一个小问题与我的docker注册表上openshift源安装。 我创建了一个docker注册表pod: 创建了一条路线: 创建了一个服务: Openshift的Master是在10.0.2.235上的,只有一个节点,现在我已经创建了一个spring boot应用程序,我使用maven插件docker来构建和推送映像。 当我在本地(主计算机上)运行maven push时,工作正常,但如果我在另一

  • 我有一个詹金斯在一个独立的视窗7服务器上。我们有一个请求添加一个构建作业来构建一个项目,该项目生成一个焦油球格式的Docker映像,并将该映像推送到驻留在OpenShift中的远程Docker注册表中。 试图找到一个詹金斯插件,可以做到这一点。发现Docker Common插件有一些命令,但据我所知,它只能将图像从Docker注册表推送到另一个注册表。 有没有指南可以让我通过独立的jenkins将

  • 我对Openshift Origin非常陌生。我现在正在尝试在OpenShift origin中部署docker容器的可能性。为此,我创建了一个非常简单的docker容器,它将两个数字相加并产生结果: https://github.com/abrahamjaison01/openshifttest 我在本地创建了一个docker映像,在docker hub中创建了一个公共docker映像: 我在本

  • 问题内容: Docker和OpenShift都是用于实现PaaS服务的框架。 他们如何比较架构和功能? 问题答案: 主要区别在于,Docker作为一个项目仅专注于运行时容器,而OpenShift(作为系统)既包含运行时容器也包括REST API,协调和Web界面,以部署和管理各个容器。 仅比较运行时容器,OpenShift和Docker都使用内核隔离功能将租户进程分开。对于主要通过LXC实现的Do

  • 目前,我正在运行一个3节点的Rabbitmq集群,使用下面的docker-comple文件。 这是Dockerfile包含的用于启动容器并形成集群的脚本。 我需要将docker compose转换为docker run命令,并以集群格式启动所有三个容器。我面临的问题是,我需要一个单独的run命令,该命令可以用于逐个启动所有容器(仅按名称区分),并形成一个集群。我如何传递命令,如--link和一些特