You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在OpenShift中执行Docker客户端命令(如docker push)?

在OpenShift Starter上实现Docker镜像构建与部署流程

当你拥有Docker主机后,用Docker做部署简直不要太顺手——只需要把Docker客户端和主机引擎连起来就行。在Jenkins这类构建服务器上,构建并部署复杂Docker镜像的常规流程一般是这样的:

  • mvn clean install => 构建WAR文件
  • docker build => 创建包含该WAR应用文件的Wildfly镜像
  • docker tag => 为新镜像打标签
  • docker push => 将镜像推送至Docker Hub
  • docker run => 在Docker主机上安装并运行该Docker镜像

那OpenShift Starter能不能搞定这套流程?当然可以!这种容器即服务(CAAS)方案完全能实现需求。

完整解决方案

下面的步骤会帮你创建一个包含两个镜像的项目:一个MySQL镜像,另一个是由Wildfly服务器托管的SpringBoot/Angular/Hibernate镜像(这套方案同样适用于Spring Boot JAR应用)。

注意:操作前先启动本地Docker守护进程,用Docker Quickstart Terminal就能搞定,本文不会用到仅用于本地测试的minishift。

步骤1:创建项目及MySQL应用

不用Docker也能轻松完成:要么通过OpenShift Web控制台操作,要么直接执行命令oc new-project来创建项目。

步骤2:登录OpenShift项目

打开在线控制台,点击顶部右侧的问号图标,选择「命令行工具」,再点右侧图标把登录命令复制到剪贴板,然后在终端执行:

$ oc login ...  # 粘贴你复制的完整命令即可

步骤3:登录Docker镜像仓库

查看OpenShift在线控制台后,执行以下命令:

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

⚠️ 重要提醒:千万不要添加端口号后缀,比如openshift:443这种,会导致登录失败!

步骤4:本地/构建服务器(如Jenkins)上构建并打标签

依次执行下面的命令:

mvn clean install  # 生成WAR文件,建议命名为'ROOT.war'
docker build -t myproject/mynewapplication:latest .
docker tag myproject/mynewapplication registry.pro-us-east-1.openshift.com/myproject/mynewapplication

⚠️ 注意:镜像名称一定要准确!比如把pro-us-east-1写成pro-us-east1这种小错误,会直接导致镜像推不上去,一定要仔细核对。

下面是两种常用的Dockerfile示例:

Wildfly版本(适用于WAR应用)

FROM jboss/wildfly
COPY target/ROOT.war /opt/jboss/wildfly/standalone/deployments/
# CMD - 使用Wildfly默认启动命令

内存优化版本(适用于JAR应用)

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内部仓库

执行命令把本地镜像推送到OpenShift的内部仓库:

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

步骤6-A.1:用new-app命令从已有镜像创建应用(仅首次执行)

第一次创建应用时,执行下面的命令:

oc new-app 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服务器后,必须创建「route」才能让外部客户端访问。这个操作建议通过控制台完成(路径:Applications > Routes),举个配置HTTPS访问的例子:

  • 目标端口设为8080(HTTP服务器运行的端口)
  • 勾选「Secure route」选项
  • TLS Termination保持为「Edge」
  • 不安全流量选择「Redirect」
    设置完成后创建route,稍等片刻就能得到一个支持HTTPS访问的站点了。

步骤6-B:更新镜像后的操作

推送更新后的镜像不会自动触发重新部署,你可以通过在线控制台操作,或者执行下面的命令手动启动新部署:

oc rollout latest dc/mynewapplication -n myproject

之后可以用这些命令检查状态:

  • 检查部署结果:oc status
  • 检查MySQL容器是否运行:oc get pods,拿到容器名称后,执行oc rsh <容器名称>就能进入容器内部操作了。

内容的提问来源于stack exchange,提问作者tm1701

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:58:32