几分钟前,我在蒙克的WJAX下了舞台。 当我的同事Jan谈论这个惊人的客户成功故事AMADEUS时 ,我很高兴能对他的想法和观点进行一些阐述,并从开发人员的角度讨论如何使用OpenShift和Docker Images完成DevOps。
微服务和DevOps
如果您有数百个甚至更多的容器在生产中运行,那么一切不再仅仅是操作问题。 不仅因为每个人都是当今DevOps运动的一部分,而且主要是因为,如果我们希望能够从不可变和无状态容器提供的协同作用中获利,我们必须以不同的方式构建应用程序。 我在主题演讲中使用的示例几乎与之前的博客中使用的示例相同。 单个WidlFly Swarm JAX-RS服务,除了打印一些包含环境变量和时间戳的JSON外,其他功能不多。 该系列所缺少的是跨环境的过渡。 尽管在OpenShift上有Veer Muchandi撰写的一些很棒的博客,但它们都假定您使用OpenShift方式来构建图像和应用程序。
让我们坚持朴素的Docker
我想展示一下,使用纯Docker映像有多么容易。 因此,假设您有一个非常简单的环境设置:
我们有一个开发环境,开发人员可以使用它来推送其更新的图像。 还有另一个QA环境,测试人员可能会发疯,而且可能还会发疯。 我展示的示例仅使用了提到的两个。 您添加的每个其他env几乎相同。 让我们看看它如何与Maven,Docker和OpenShift一起使用
准备工作
在这种情况下,我在幕后使用了fabric8流浪图像。 只是因为他们总是采用最新的OpenShift构建,并且我想显示HEAD中已经存在的新可视化效果。 因此,安装vagrant和OpenShift二进制文件并启动openshift流浪者计算机。 我将内存和cpu设置略微调整为8 GB和4核。 确保公开内部Docker Registry,如先前的博客文章所示。 如果相应地设置了DOCKER_HOST变量,则可以开始演练。 该演示的录制将在大约10分钟内为您提供完整的演示。 是的,这没有声音。
个别步骤
有时,自己遵循各个步骤会比较容易。 他们来了:
以管理员身份以密码admin登录到OpenShift
oc login https://vagrant.f8:8443 --insecure-skip-tls-verify=true
构建基于Maven的项目(也许只是git clone我的示例并使用它)
mvn clean install
运行本地WildFly Swarm胖子罐
java -jar target/swarm-sample-0.0.1-SNAPSHOT-swarm.jar
将您的浏览器指向http:// localhost:8080 / api / v1 / service并确认一切正常
在从应用程序构建Docker映像之前,请确保拉出jboss / base-jdk:8映像。 我不知道为什么,但是该插件似乎在解决该问题。
docker pull jboss/base-jdk:8
现在构建您的Docker映像
mvn clean install docker:build
查看生成的Dockerfile
cat target/docker/development/swarm-sample/latest/build/Dockerfile
在OpenShift中创建一个新的开发项目。 此时,无论是同一实例中的项目还是其他环境中的项目,都没有关系。 当我要在笔记本电脑上进行本地演示时,这个决定很容易。 如果您想了解如何在物理环境中过渡,请从上方比较Veers帖子。
oc new-project development --display-name="WildFly Swarm Development Project"
为用户dev1和test1添加查看和编辑用户的权限
oc policy add-role-to-user edit dev1
oc policy add-role-to-user view test1
在OpenShift中创建质量检查项目
oc new-project test --display-name="WildFly Swarm QA Project"
授予test1用户编辑权限:
oc policy add-role-to-user edit test1
向系统帐户添加角色,以便能够将质量检查中的图像拉出开发环境
oc policy add-role-to-group system:image-puller system:serviceaccounts:test -n development
以dev1身份使用密码dev1登录并获取访问令牌
oc login https://vagrant.f8:8443 -u dev1
oc whoami -t
在pom.xml的authConfig部分中更改令牌。 现在,您准备将WildFly Swarm Docker映像推送到OpenShift Docker注册表中
mvn docker:push
根据图片创建应用
oc new-app --docker-image=development/swarm-sample:latest
为新创建的路线公开一条路线。 并确保在通过浏览器访问主机文件之前,使用正确的映射更新主机文件。
oc expose service swarm-sample --hostname=wildfly-swarm.vagrant.f8
检查http://wildfly-swarm.vagrant.f8/api/v1/service,看看一切是否正常。
从图像获取OpenShift图像流
oc get is
oc describe is
标记最新图片以进行宣传
oc tag 172.30.238.11:5000/development/swarm-sample@sha256:6a53f0d875d75459eca6192e83cf4f8d879bb7cf9260e2a8addf412745b434fc development/swarm-sample:promote
以用户test1的身份使用密码test1登录并切换到测试项目
oc login -u test1
oc project test
从升级的图像创建应用程序
oc new-app development/swarm-sample:promote
将服务公开为一条路线
oc expose service swarm-sample --hostname=wildfly-swarm-test.vagrant.f8
检查是否可以访问:http://wildfly-swarm-test.vagrant.f8/api/v1/service
如果您现在再次以dev1身份登录,则进入完整的开发周期并更改应用程序,构建新映像并再次推送它,您会看到,只有开发环境得到更新,而QA环境仍停留在升级的标签上。 当开发人员希望再次更新质量检查时,您可以升级映像的“新”最新版本,并且测试环境也将得到更新。
翻译自: https://www.javacodegeeks.com/2015/11/promoting-docker-images-across-environments.html