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

2023-12-14

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

  • Maven clean install => 构建你的 WAR 文件
  • Docker build => 创建一个包含 WAR 应用程序文件的 Wildfly 镜像
  • Docker tag => 标记新镜像
  • Docker Push => 将镜像推送到 docker hub
  • Docker run ==> 在 docker 主机上安装并运行 docker 镜像。

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

完整的解决方案:

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

您从本地运行的 Docker 守护进程开始。我通过 Docker 快速启动终端执行此操作。我仅将 minishift 用于本地测试 - 所以在本例中不使用。

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

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

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

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

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

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

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

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

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

$ docker build -t myproject/mynewapplication:latest 。

$ docker tag myproject/mynewapplicationregistry.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 左右,运行良好!

Step 5:将镜像推送到内部Openshift仓库

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

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

$ oc 新应用 mynewapplication



--> 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 服务器时,创建“路由”以便客户端可以访问应用程序。由于此操作必须完成一次,因此通过控制台(“应用程序”>“路由”)进行设置是一个不错的选择。示例:使您的网站仅可用于具有标准证书的 https:(1) 使用目标端口 8080(运行您的 http 服务器的端口),(2) 勾选安全路由选项,(3) 将 TLS 终止保留为 Edge。 (4) 对于不安全的流量,选择“重定向”选项并...创建您的路线。稍等片刻,您就有了一个 HTTPS 站点。

Step 6-B:更新镜像时:推送现有镜像时,不会自动重新部署。您可以通过在线控制台或通过命令启动新的部署:

$ oc rollout 最新 dc/mynewapplication-n myproject

检查部署结果:

$ OC 状态

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

$ oc 获取 pod

获取Mysql容器的名称。

$ oc rsh 容器名称

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

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


您可以登录 OpenShift 的内部映像注册表并将映像直接推送到其中。您需要首先标记图像,以便它与推送它的项目名称相匹配。欲了解更多详情,请参阅:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Openshift - 我可以使用 Openshift 运行 docker 客户端命令(如 docker Push)吗? 的相关文章

随机推荐