OpenShift v3:使用WildFly和MySQL的Java EE 7入门

OpenShift v3:使用WildFly和MySQL的Java EE 7入门 OpenShift是Red Hat的开源PaaS平台。 OpenShift v3 (将于今年发布)将提供使用Docker和Kubernetes运行微服务的整体体验。 以经典的Red Hat方式,所有工作都在OpenShift Origin的开源中完成。 这也将推动OpenShift OnlineOpenShift Enterprise的下一个主要版本。

OpenShift v3使用了一个新的平台堆栈,该平台使用了Red Hat贡献的大量社区项目,例如Fedora,Centos,Docker,Project Atomic,Kubernetes和OpenStack。 结合了Docker,Kubernetes,Atomic和更多内容的OpenShift v3平台详细解释了该平台堆栈。

OpenShift v3:使用WildFly和MySQL的Java EE 7入门

该技术提示将说明如何开始使用OpenShift v3,让我们开始吧!

OpenShift v3入门

可以从GitHub的Origin下载用于OpenShift v3的预构建二进制文件。 但是,最简单的入门方法是将OpenShift Origin作为Docker容器运行。

OpenShift Application Lifecycle提供了从头开始运行示例应用程序所需的完整详细信息。 本博客将使用这些步骤,并使它们适应于在Mac上使用boot2docker VM运行。 在此过程中,我们还将在WildFly上部署Java EE 7应用程序,该应用程序将访问单独的MySQL容器上的数据库。

这是我们的部署图:

OpenShift v3:使用WildFly和MySQL的Java EE 7入门

  • WildFly和MySQL在不同的Pod上运行。
  • 它们每个都包装在Replication Controller中,以简化扩展。
  • 每个复制控制器均作为服务发布。
  • WildFly与MySQL服务对话,而不是直接与pod对话。 这一点很重要,因为Pod和分配给它们的IP地址都是短暂的。

让我们开始吧!

配置Docker守护程序

  1. 在主机上配置Docker守护程序以信任将要启动的Docker注册表服务。 该注册表将用于推送映像以进行构建/测试/部署。
    • 以以下方式登录到boot2docker VM:
      boot2docker ssh
    • 编辑档案
      sudo vi /var/lib/boot2docker/profile

      这将是一个空文件。

    • 添加以下名称/值对:
      EXTRA_ARGS="--insecure-registry 172.30.17.0/24"

      保存文件,然后退出编辑器。

    这将指示Docker守护程序信任172.30.17.0/24子网中的任何Docker注册表。

查看OpenShift v3和Java EE 7示例

  1. 下载并安装Go并设置GOPATH和PATH环境变量 签出OpenShift原始目录:
    openshift> git clone https://github.com/openshift/origin.git
    Cloning into 'origin'...
    remote: Counting objects: 21451, done.
    remote: Compressing objects: 100% (76/76), done.
    remote: Total 21451 (delta 26), reused 15 (delta 1)
    Receiving objects: 100% (21451/21451), 35.11 MiB | 1.24 MiB/s, done.
    Resolving deltas: 100% (11392/11392), done.
    Checking connectivity... done.
    

    请注意其检出的目录。 在这种情况下,它的〜 /workspaces/openshift

    构建工作空间:

    make release
    origin> make release
    rm -rf _output Godeps/_workspace/pkg
    hack/build-release.sh
    Unable to find image 'openshift/origin-release' locally
    Pulling repository openshift/origin-release
    c59f040a4054: Download complete 
    511136ea3c5a: Download complete 
    5b12ef8fd570: Download complete 
    dade6cb4530a: Download complete 
    bd195712b86c: Download complete 
    4aae29c1c846: Download complete 
    d8738da3ed4c: Download complete 
    7f7491063665: Download complete 
    b5cfa9eebdb5: Download complete 
    2f6297477756: Download complete 
    dc98bd93df2f: Download complete 
    1be2a7550a3d: Download complete 
    42fd088f8c55: Download complete 
    b6f6ad4012df: Download complete 
    Status: Downloaded newer image for openshift/origin-release:latest
    
  2. 检出已转换为Kubernetes应用程序的javaee7-hol工作区
    origin> git clone https://github.com/bparees/javaee7-hol
    Cloning into 'javaee7-hol'...
    remote: Counting objects: 1159, done.
    remote: Compressing objects: 100% (49/49), done.
    remote: Total 1159 (delta 35), reused 37 (delta 21)
    Receiving objects: 100% (1159/1159), 20.35 MiB | 1.78 MiB/s, done.
    Resolving deltas: 100% (605/605), done.
    Checking connectivity... done.
    

    这也可以在~/workspaces/openshift目录中完成。

启动OpenShift v3容器

  1. 将OpenShift Origin作为Docker容器启动:
    ~> docker run -d --name "openshift-origin" --net=host --privileged \
      -v /var/run/docker.sock:/var/run/docker.sock  \
      -v /Users/arungupta/workspaces/openshift:/workspaces/openshift \
      -v /usr/local/bin/docker:/usr/bin/docker \
      openshift/origin start --public-master=$(boot2docker ip)
    
    The VM's Host only interface IP address is: 
    
    0ae85091e7ad7e85697575369f008273a6673d112b49860f5557a61d9e82d908
    

    注意~/workspaces/openshift目录在容器中作为/workspaces/openshift卷挂载。 还安装了一些其他卷。

    检查容器是否正在运行:

    ~> docker ps
    CONTAINER ID        IMAGE                    COMMAND                CREATED             STATUS              PORTS               NAMES
    0ae85091e7ad        openshift/origin:beta1   "/usr/bin/openshift    2 minutes ago       Up 2 minutes                            openshift-origin
    
  2. 以以下方式登录到容器:
    openshift> docker exec -it `docker ps | grep origin:beta1 | awk '{ print $1 }'` bash
    [[email protected] openshift]#
    
  3. 通过提供以下命令在容器中安装Docker注册表:
    export CERT_DIR=/var/lib/openshift/openshift.local.certificates/openshift-client && \
    export KUBECONFIG=/var/lib/openshift/openshift.local.certificates/admin/.kubeconfig && \
    cd /workspaces/openshift/origin && hack/install-registry.sh
    
  4. 通过获取Pod列表来确认注册表正在运行:
    [[email protected] origin]# osc get pods
    POD                       IP                  CONTAINER(S)         IMAGE(S)                    HOST                    LABELS                                                                                                             STATUS
    docker-registry-1-gfkbz   172.17.0.14         registry-container   openshift/docker-registry   boot2docker/127.0.0.1   deployment=docker-registry-1,deploymentconfig=docker-registry,name=registrypod,template=docker-registry-template   Running
    

    oscOpenShift Client CLI ,可用于创建和管理OpenShift项目。 一些kubectl命令也可以使用此脚本。

  5. 确认注册表服务正在运行。 请注意,实际IP地址可能会有所不同:
    [[email protected] origin]# osc get services
    NAME                LABELS                                    SELECTOR            IP                  PORT
    docker-registry     template=docker-registry-template         name=registrypod    172.30.17.142       5001
    kubernetes          component=apiserver,provider=kubernetes   <none>              172.30.17.2         443
    kubernetes-ro       component=apiserver,provider=kubernetes   <none>              172.30.17.1         80
    
  6. 确认注册表服务可访问:
    curl `osc get services docker-registry -o template --template="{{ .portalIP}}:{{ .port }}"`

    并寻找输出:

    "docker-registry server (dev) (v0.9.0)"

访问OpenShift v3 Web控制台

  1. OpenShift Origin服务器现在已启动并正在运行。 使用boot2docker ip查找主机的IP地址,然后打开http:// <boot2docker主机的IP地址>:8444在浏览器中查看OpenShift Web控制台,例如,可通过https://192.168.59.103:8444访问该控制台/在这台机器上。

    OpenShift v3:使用WildFly和MySQL的Java EE 7入门

    您需要让浏览器在https://<host>:8444处接受证书,然后控制台才能查询OpenShift API。 当然,使用合法证书就不需要这样做。

  2. 出现OpenShift Origin登录屏幕。 输入用户名/密码作为admin / admin:

    OpenShift v3:使用WildFly和MySQL的Java EE 7入门

    然后点击“登录”按钮。 默认的Web控制台如下所示:

    OpenShift v3:使用WildFly和MySQL的Java EE 7入门

创建OpenShift v3项目

  1. 在OpenShift v3容器中使用github.com/openshift/origin/blob/master/examples/sample-app/project.json中的project.json并创建一个测试项目,如下所示:
    [[email protected] origin]# osc create -f /workspaces/openshift/origin/examples/sample-app/project.json 
    test
    

    现在刷新Web控制台将显示:

    OpenShift v3:使用WildFly和MySQL的Java EE 7入门

    单击“ OpenShift 3 Sample”将显示一个空的项目描述:

    OpenShift v3:使用WildFly和MySQL的Java EE 7入门

  2. 请求创建应用程序模板:
    [[email protected] openshift]# cd javaee7-hol/
    [[email protected] javaee7-hol]# osc process -n test -f application-template-jeebuild.json | osc create -n test -f -
    frontend
    origin-jee-sample
    wildfly-8-centos
    jee-sample-build
    frontend
    mysql
    database
    
  3. Web控制台自动刷新并显示:

    OpenShift v3:使用WildFly和MySQL的Java EE 7入门

    正在运行的服务列表可以看成是:

    OpenShift v3:使用WildFly和MySQL的Java EE 7入门

建立项目

  1. 触发项目的初始构建:
    [[email protected] javaee7-hol]# osc start-build -n test jee-sample-build
    cee73fbc-b32d-11e4-a0f2-5282784576db
    
  2. 监视构建并等待状态变为“完成”(这可能需要几分钟):
    [[email protected] javaee7-hol]#  osc get -n test builds
    NAME                                   TYPE                STATUS              POD
    cee73fbc-b32d-11e4-a0f2-5282784576db   STI                 Running             build-cee73fbc-b32d-11e4-a0f2-5282784576db
    

    您可以添加–watch标志以等待更新,直到构建完成:

    [[email protected] javaee7-hol]#  osc get -n test builds --watch
    NAME                                   TYPE                STATUS              POD
    cee73fbc-b32d-11e4-a0f2-5282784576db   STI                 Running             build-cee73fbc-b32d-11e4-a0f2-5282784576db
    NAME                                   TYPE                STATUS              POD
    cee73fbc-b32d-11e4-a0f2-5282784576db   STI                 Complete            build-cee73fbc-b32d-11e4-a0f2-5282784576db
    

    等待STATUS栏显示Complete 设置所有组件(WIldFly,MySQL,Java EE 7应用程序)将花费几分钟。 实际上,将创建它们的新Docker映像并将其推送到较早启动的本地注册表中。

    状态更改为Complete后, Ctrl+C停止监视构建。

  3. 构建的完整日志可以看成是:
    [[email protected] javaee7-hol]# osc build-logs -n test cee73fbc-b32d-11e4-a0f2-5282784576db
    2015-02-13T03:10:07.065718606Z Cloning into '/tmp/sti552730161/upload/src'...
    2015-02-13T03:11:03.184576532Z I0213 03:11:03.184326       1 build.go:160] Successfully built 172.30.17.142:5001/test/origin-jee-sample
    2015-02-13T03:11:07.261489310Z The push refers to a repository [172.30.17.142:5001/test/origin-jee-sample] (len: 1)
    2015-02-13T03:11:07.261489310Z Sending image list
    2015-02-13T03:11:07.275256699Z Pushing repository 172.30.17.142:5001/test/origin-jee-sample (1 tags)
    2015-02-13T03:11:07.307836081Z Pushing
    Buffering to disk07.314345045Z Buffering to disk 1.024 kB
    2015-02-13T03:11:07.315452728Z Buffering to disk
    Pushing-13T03:11:07.323973430Z Pushing [=========================>                         ]    512 B/1.024 kB 0
    
    . . .
    
    Pushing-13T03:13:05.932725921Z Pushing [================================================>  ]  6.56 MB/6.704 MB 0
    Pushing-13T03:13:05.942989165Z Pushing [=================================================> ] 6.635 MB/6.704 MB 0
    Pushing-13T03:13:05.943025109Z Pushing [=================================================> ] 6.702 MB/6.704 MB 0
    Pushing-13T03:13:05.947665528Z Pushing [==================================================>] 6.704 MB/6.704 MB
    2015-02-13T03:13:05.953476634Z Image successfully pushed
    2015-02-13T03:13:05.953476634Z Pushing tag for rev [b0a7868377c1] on {http://172.30.17.142:5001/v1/repositories/test/origin-jee-sample/tags/latest}
    
  4. 检查要启动的应用程序容器:
    [[email protected] javaee7-hol]# osc get -n test pods    
    POD                                          IP                  CONTAINER(S)        IMAGE(S)                                                                                                     HOST                    LABELS                                                                              STATUS
    build-cee73fbc-b32d-11e4-a0f2-5282784576db   172.17.0.17         sti-build           openshift/origin-sti-builder:v0.3                                                                            boot2docker/127.0.0.1   <none>                                                                              Succeeded
    database-1-axe6d                             172.17.0.16         jee-database        mysql                                                                                                        boot2docker/127.0.0.1   deployment=database-1,deploymentconfig=database,name=database,template=jee-sample   Running
    frontend-1-pkcia                             172.17.0.20         jee-sample          172.30.17.142:5001/test/origin-jee-sample:b0a7868377c10a50b40019be70e22d040b9a2bb2d87fa3932b700494e50a4de6   boot2docker/127.0.0.1   deployment=frontend-1,deploymentconfig=frontend,name=frontend,template=jee-sample   Running
    

    请注意,“前端”和“数据库”窗格现在正在运行。

  5. 确定“前端”服务的IP:
    [[email protected] javaee7-hol]# osc get -n test services
    NAME                LABELS                SELECTOR            IP                  PORT
    frontend            template=jee-sample   name=frontend       172.30.17.115       8080
    mysql               template=jee-sample   name=database       172.30.17.75        3306
    
  6. 通过http:// <“前端”的IP地址>:8080 / movieplex7-1.0-SNAPSHOT可以访问应用程序。 请注意,IP地址可能(很可能会)有所不同。 在这种情况下,它将是http://172.30.17.115:8080/moviexplex7-1.0-SNAPSHOT。由于将OpenShift v3用作Docker容器时,在Mac上配置防火墙,需要进一步调试才能配置该应用程序。 在弄清楚这一点之前,您可以在boot2docker VM中执行docker docker ps以查看所有容器的列表:
    origin> docker ps
    CONTAINER ID        IMAGE                                                                                                       COMMAND                CREATED             STATUS              PORTS               NAMES
    c776cabb72f8        172.30.17.17:5001/test/origin-jee-sample:91d1b5a5ed58e1642aafbd652eba0b7eae3a0ac08c17729d205ae88204f64449   "/tmp/scripts/run"     2 hours ago         Up 2 hours                              k8s_jee-sample.7af25557_frontend-2-9ciae.test.api_12a0d77e-b3b5-11e4-81f6-5282784576db_53f91f55                      
    e7f87112c473        openshift/origin-pod:beta1                                                                                  "/pod"                 2 hours ago         Up 2 hours                              k8s_POD.9cbfdefa_frontend-2-9ciae.test.api_12a0d77e-b3b5-11e4-81f6-5282784576db_64263b61                             
    7e7579db5f82        openshift/origin-pod:beta1                                                                                  "/pod"                 2 hours ago         Up 2 hours                              k8s_POD.123cbdd6_build-e075047d-b3b4-11e4-81f6-5282784576db.test.api_e07bcdb2-b3b4-11e4-81f6-5282784576db_376c0e63   
    74082d7791ec        openshift/origin-pod:beta1                                                                                  "/pod"                 2 hours ago         Up 2 hours                              k8s_POD.123cbdd6_build-76364bb6-b3b2-11e4-81f6-5282784576db.test.api_7639e3a5-b3b2-11e4-81f6-5282784576db_f653c7fd   
    3e42dacb0da7        mysql:latest                                                                                                "/entrypoint.sh mysq   3 hours ago         Up 3 hours                              k8s_jee-database.f12628ae_database-1-bqg8v.test.api_56093bac-b3b2-11e4-81f6-5282784576db_193dddf7                    
    cb551c8cf7bf        openshift/origin-pod:beta1                                                                                  "/pod"                 3 hours ago         Up 3 hours                              k8s_POD.95f2def6_database-1-bqg8v.test.api_56093bac-b3b2-11e4-81f6-5282784576db_295fc320                             
    e8719152df42        openshift/docker-registry:latest                                                                            "\"sh -c 'echo \"$OP   3 hours ago         Up 3 hours                              k8s_registry-container.4e338487_docker-registry-1-bt49s.default.api_177a691c-b3b0-11e4-81f6-5282784576db_a6f4f83b    
    d3ecc5841c3b        openshift/origin-pod:beta1                                                                                  "/pod"                 3 hours ago         Up 3 hours                              k8s_POD.8a29deef_docker-registry-1-bt49s.default.api_177a691c-b3b0-11e4-81f6-5282784576db_ba53d62b                   
    a506222fae91        openshift/origin:beta1                                                                                      "/usr/bin/openshift    3 hours ago         Up 3 hours                              openshift-origin
    

    然后以以下方式登录到与前端关联的容器:

    docker exec -it `docker ps | grep origin-jee-sample | awk '{ print $1 }'` bash

    这将登录到Docker容器,您可以通过提供以下命令来检查应用程序是否已成功部署:

    bash-4.2$ curl http://localhost:8080/movieplex7-1.0-SNAPSHOT/

    这将从应用程序中打印index.html页面,该应用程序的顶部和顶部都有许可证。

    现在,一旦防火墙问题解决,此页面也将在主机Mac上也可以访问。

让我们总结一下:

  • 克隆了OpenShift Origin和Java EE 7示例存储库
  • 将OpenShift v3作为Docker容器启动
  • 加载了OpenShift v3 Web控制台
  • 创建一个OpenShift v3项目
  • 加载的Java EE 7应用程序模板
  • 触发了构建,从而部署了应用程序

请享用!

翻译自: https://www.javacodegeeks.com/2015/02/openshift-v3-getting-started-java-ee-7-using-wildfly-mysql.html