《OpenShift 4.x HOL教程汇总》
文章目录
- 创建Repository
- Push Image
- Pull Image
- 更新镜像
- 回滚镜像
- 查看并修复漏洞
- 公有-私有 Repository切换
- 删除 Repository
说明:在开始本文操作前需根据《Quay(1) - 用Quay Operator配置Quay环境》准备Quay运行环境。
创建Repository
- 登录Quay,在控制台上点击“+”,然后在菜单中选择“New Repository”。
- 在“Create New Repository”页面中创建名为hello-php的Repository,并将其设为Public类,最后点击“Create Public Repository”。这样我们就在当前用户(quay)下创建了一个Repository。
说明:Public代 Repository表所有人都可以不经身份认证就可以进行pull操作(但push操作还需要身份认证);而Private Repository只能是通过身份认证后才可进行pull操作。
Push Image
我们可以使用以下多种方式向Quay上传镜像。本文会使用podman构建镜像,然后再上传至Quay的Repository。
- 获得Quay的访问地址。
$ QUAY=$(oc get route quayecosystem-quay -n quay-enterprise -o jsonpath={.spec.host})
- 在hello-php目录中创建Dockerfile文件。
$ mkdir $HOME/
$ cd $HOME/hello-php
$ cat << EOF > $HOME/hello-php/Dockerfile1 \
FROM registry.redhat.io/ubi7/php-72:1-25 \
EXPOSE 8000
COPY ./index.php /opt/app-root/src/index.php
CMD /bin/bash -c 'php -S 0.0.0.0:8000'
EOF
- 创建容器用到的index.php文件。
cat << EOF > ./index.php
<?php
print "Hello World, from your favorite PHP " . PHP_VERSION . " version!\n";
?>
EOF
- 用podman的build命令构建镜像,然后查看本地的镜像。
$ podman build -t hello-php:v0.1 .
STEP 1: FROM registry.access.redhat.com/ubi7/php-72:1-25
Getting image source signatures
Copying blob 7f4603f2fdb7 done
Copying blob b8ac0895426d done
Copying blob 519689a97152 done
Copying blob d853dce25a2e done
Copying blob adb08cdc8943 done
Copying config f89402d6d9 done
Writing manifest to image destination
Storing signatures
STEP 2: EXPOSE 8000
5c09c75a948fea1008ba1a174450d0179338f74627a6c05bf88db2bbe3c7b3c2
STEP 3: COPY ./index.php /opt/app-root/src/index.php
43f70ea80aacde1e797440835845ecc4d6ef0a255407a0f1a74f8883d3efed4f
STEP 4: CMD /bin/bash -c 'php -S 0.0.0.0:8000'
STEP 5: COMMIT hello-php:v0.1
12598f7490ee114bac1c2b36799020ab0a6a4a4cc3f5f6ced433c5cb98eb5432
$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/hello-php v0.1 12598f7490ee About a minute ago 602 MB
registry.access.redhat.com/ubi7/php-72 1-25 f89402d6d9cb 12 months ago 602 MB
- 对hello-php镜像重新打标签。
$ podman tag localhost/hello-php:v0.1 ${QUAY}/quay/hello-php:v0.1
- 登录Quay,然后推送到Quay中。
$ podman login -u quay -p password ${QUAY} --tls-verify=false
Login Succeeded!
$ podman push ${QUAY}/quay/hello-php:v0.1 --tls-verify=false
Getting image source signatures
Copying blob 6e36fa15a16d done
Copying blob 94704c8acbb7 done
Copying blob a81bc04aca7e done
Copying blob da289ed398e8 done
Copying blob 5eee25e13b93 done
Copying blob 302a24b8cc36 done
Copying config 12598f7490 done
Writing manifest to image destination
Copying config 12598f7490 done
Writing manifest to image destination
Storing signatures
- 在Quey中的Repositories中可以看到“quay/hello-php”的Repository,进入后可以在Tags标签页中看到v0.1的镜像Tag。
Pull Image
- 为了验证对Public Repository的访问无需登录,可以先退出Quey。
$ podman logout ${QUAY}
Removed login credentials for quayecosystem-quay-quay-enterprise.apps.cluster-beijing-959a.beijing-959a.example.opentlc.com
- 删除本地相关镜像。
$ podman rmi localhost/hello-php:v0.1 ${QUAY}/quay/hello-php:v0.1
- 从Quay上pull镜像到本地。
$ podman pull ${QUAY}/quay/hello-php:v0.1 --tls-verify=false
Trying to pull quayecosystem-quay-quay-enterprise.apps.cluster-beijing-959a.beijing-959a.example.opentlc.com/quay/hello-php:v0.1...
Getting image source signatures
Copying blob 2206ab0383e8 skipped: already exists
Copying blob 23debac483b0 skipped: already exists
Copying blob 6cb6e4d94045 skipped: already exists
Copying blob 11e9f32eaf6e skipped: already exists
Copying blob f94f448e8c1a skipped: already exists
Copying blob 4d968305006a done
Copying config 12598f7490 done
Writing manifest to image destination
Storing signatures
12598f7490ee114bac1c2b36799020ab0a6a4a4cc3f5f6ced433c5cb98eb5432
- 运行pull到本地的镜像。
$ podman run -d -p 8000:8000 ${QUAY}/quay/hello-php:v0.1
22dc5e912e2d5f60e48678b93f49b2d0a7fd9b6b1986c08a49d585b4e72265aa
- 访问运行于容器中的应用。
$ curl http://localhost:8000
Hello World, from your favorite PHP 7.2.10 version!
- 关闭运行的容器
$ podman stop $(podman ps -q)
更新镜像
- 执行命令,更新index.php文件的内容。
$ cat << EOF > $HOME/hello-php/index.php
<?php
print "Hello World, from my favorite PHP " . PP_VERSION . " version!\n";
?>
EOF
- 重新build镜像。
$ podman build -t hello-php:v0.1 .
STEP 1: FROM registry.access.redhat.com/ubi7/php-72:1-25
STEP 2: EXPOSE 8000
df32b3b9d363af08bcba85ea61914b9e5efcceb0a4ef5ccc28105dff311c07db
STEP 3: COPY ./index.php /opt/app-root/src/index.php
614ecef4841233979040ab03503230fbce42140020aeef324d14de310a257668
STEP 4: CMD /bin/bash -c 'php -S 0.0.0.0:8000'
STEP 5: COMMIT hello-php:v0.1
fc10a9751abdb7df414413ce71e675270e42c28282b3e2b24b05ad340ac03e55
- 更改标签后重新将镜像上传到Quay。
$ podman tag localhost/hello-php:v0.1 ${QUAY}/quay/hello-php:v0.1
$ podman login -u quay -p password ${QUAY} --tls-verify=false
$ podman push ${QUAY}/quay/hello-php:v0.1 --tls-verify=false
- 此时可以在Quay的“quay/hello-php”中的History Tags中看到v0.1的Tag变化情况。
- 先删除本地镜像,然后在运行更新后的镜像,确认应用已经返回更新后的内容了。
$ podman rmi ${QUAY}/quay/hello-php:v0.1
$ podman pull ${QUAY}/quay/hello-php:v0.1 --tls-verify=false
$ podman run -d -p 8000:8000 ${QUAY}/quay/hello-php:v0.1
51fde445b810a433508fb1a1a6cce021cccd53ec61637c3a55190a8a0e74bc1c
$ curl http://localhost:8000
Hello World, from your favorite PHP 7.2.10 version!
$ podman stop $(podman ps -q)
回滚镜像
- 在Quay控制台进入“”quay/hello-php"的Repository。在History Tag中点击"Revert v0.1 to …"链接。
- 在弹出窗口中点击Restore Tag按钮。
- 此时当前镜像已经回滚到上一次push的镜像了。
- 再次将镜像pull到本地,然后运行镜像并测试应用,确认应用再次返回第一次的结果。
$ podman rmi ${QUAY}/quay/hello-php:v0.1
$ podman pull ${QUAY}/quay/hello-php:v0.1 --tls-verify=false
$ podman run -d -p 8000:8000 ${QUAY}/quay/hello-php:v0.1
$ curl http://localhost:8000
Hello World, from your favorite PHP 7.2.10 version!
$ podman stop $(podman ps -q)
查看并修复漏洞
- 在Quay控制台进入quay/hello-php的Repository,然后查看“SECURY SCAN”一列的链接。
- 在Security San页面中显示了该镜像漏洞数量、严重级别信息、及其其所属Package。
- 执行以下命令修改本地Dockerfile文件内容,使用最新的ubi7/php-72镜像。
$ cat << EOF > $HOME/hello-php/Dockerfile
FROM registry.access.redhat.com/ubi7/php-72:latest
EXPOSE 8000
COPY ./index.php /opt/app-root/src/index.php
CMD /bin/bash -c 'php -S 0.0.0.0:8000'
- 再次build这个镜像,注意将镜像的Tag改为“v0.2”。
$ podman build -t ${QUAY}/quay/hello-php:v0.2 .
STEP 1: FROM registry.access.redhat.com/ubi7/php-72:latest
Getting image source signatures
Copying blob 9e7a6dc796f0 done
Copying blob e7021e0589e9 done
Copying blob fc5b206e9329 done
Copying blob 3705d1d0bdce done
Copying blob c9ae4966e101 done
Copying config 776a429326 done
Writing manifest to image destination
Storing signatures
STEP 2: EXPOSE 8000
d07d5d1c668db8f0b5e3199fffd23ede34179bbb6d5c76b3860b925bbea14c3c
STEP 3: COPY ./index.php /opt/app-root/src/index.php
7682a8a2e17ee4f6963df145a7065a582c0cbfd143a0872cc68255177d2988a4
STEP 4: CMD /bin/bash -c 'php -S 0.0.0.0:8000'
STEP 5: COMMIT quayecosystem-quay-quay-enterprise.apps.cluster-beijing-959a.beijing-959a.example.opentlc.com/quay/hello-php:v0.2
2b5f49d049b6a086f3ac7ad5498a2701a038c4889be07926899d0a1a2bc46522
- 在Quay控制台查看quay/hello-php的Tags,可以看到Tag为v0.2的镜像,进入它的SECURITY SCAN链接。
- 确认该镜像只有一个High-level vulnerabilities了。
- 查看Usage Logs,查看日志描述。
公有-私有 Repository切换
当Repository创建完后,可以在它的Settings的界面中通过设置“Repository Visibility”为“Make Public”或“Make Private”完成。
删除 Repository
进入Repository的Settings的界面,在下方通过“Delete Repository”删除该Repository。