如果您的應用程序不是非常複雜,比起自己撰寫 Dockerfile 並努力解決 OpenShift 的權限問題,另一種更方便的方法是使用 Source-To-Image (S2I). S2I 使用建構者映像檔(Builder Image)和你的程式碼來生成新的Docker映像檔。 S2I 的建構者映像檔包括許多常用程式語言和服務,例如Python或Ruby,您也可以使用自己定義的腳本來擴展 S2I 社群資源。
使用 S2I 來建構映像檔有以下好處:
本文會介紹如何透過 S2I 創建一個簡單的 nginx 服務映像檔。
在 MAC 可以透過 Homebrew 來安裝
$ brew install source-to-image
我們可以利用 s2i
命令從 git repository 獲取程式碼以直接在 Builder Image 上構建我們的映像檔,您無需從 git repository 下載程式碼,也不用撰寫 Dockerfile。 對於一般的應用程序,這可是大大節省了時間和精力啊!
使用方法:
$ s2i build <git-repo> <S2I Builder Image Repository> <Your New Image Name>
$ s2i build <git-repo> --context-dir=<Path/To/Context> <S2I Builder Image Repository> <Your New Image Name>
$ s2i build . <S2I Builder Image Repository> <Your New Image Name>
例如:
$ s2i build https://github.com/sclorg/nginx-container.git --context-dir=1.16/test/test-app/ centos/nginx-116-centos7 quay-eu-uat/application-images/test:1
Submodule 'common' (https://github.com/sclorg/container-common-scripts.git) registered for path 'common'
Cloning into '/private/var/folders/7z/k_5hdgqx3vq1qrtxrk3619rw0000gn/T/s2i364743917/upload/tmp/common'...
Submodule path 'common': checked out '91d4ac4ceb89c7bced5c7f5ec552dbb45d637e7d'
---> Installing application source
---> Copying nginx.conf configuration file...
'./nginx.conf' -> '/etc/opt/rh/rh-nginx116/nginx/nginx.conf'
---> Copying nginx configuration files...
'./nginx-cfg/default.conf' -> '/opt/app-root/etc/nginx.d/default.conf'
---> Copying nginx default server configuration files...
'./nginx-default-cfg/alias.conf' -> '/opt/app-root/etc/nginx.default.d/alias.conf'
---> Copying nginx start-hook scripts...
Build completed successfully
然後我們就可以把建構好的映像檔放到 Quay ,並在 OpenShift 使用。
$ docker push quay-eu-uat/application-images/test:1
對於一般不太複雜的服務,我們都可以透過 Source-To-Image (S2I) 來建構我們的映像檔。 在撰寫 Dockerfile 之前,不仿先找找是否有現成可以用的 S2I Image 可以利用,以節省時間,當個高效率的懶人工程師。