簡體   English   中英

如何創建子域以公開運行到Jenkins管道中的docker容器中的應用程序

[英]How can I create a subdomain to expose an application running into a docker container in Jenkins pipeline

大家:

我在AWS的ec2實例中發布了bitnami jenkins。 在同一台機器上,我正在啟動我的管道,我在其中使用docker進行多個進程,其中一個為a.war應用程序啟動數據庫和tomcat。 事實是,我希望能夠從子域或另一個域(我在該docker容器中啟動的應用程序,以便能夠觀察更改)訪問它。

為此我使用traefik,我可以看到在同一個EC2網絡中運行的所有容器。 我也可以將它重定向到某個網址。 我不知道的是如何創建一個新的子域來使其工作。 Traefic使用以下命令啟動它(因此您可以看到我如何映射端口):

sudo docker run -d -p 9090:8080 -p 8888:80 --network public --name traefik -v $PWD/traefik.toml:/etc/traefik/traefik.toml -v /var/run/docker.sock:/var/run/docker.sock traefik

在下面的圖像中,我展示了我希望暴露給外部的ip traefik和路徑(在這種情況下,它是具有擴展名的域,但我也嘗試過子域):

在此輸入圖像描述

badbin中的traefic配置文件如下: 鏈接到pastebin中的配置文件

從我所看到的,bitnami應用程序使用tomcat,如果不是,請糾正我。 我有freenom中的域名,因為它是我正在進行的測試。

創建子域名以及擴展名是值得的:http:/midominio.ga/test

非常感謝,歡迎任何幫助。


編輯1:我知道我可以通過將容器端口映射到我運行jenkins的免費EC2端口來公開它,但我更喜歡在子域中創建它,或者理想地在原始域的擴展中動態創建它。

編輯2:

我會嘗試更好地解釋我的情況。 我有一個運行bitnami jenkins的EC2實例。 在我的管道里面,我有以下內容:

 stage ('Postgres: despliegue inicial de la base de datos') {
            def dbImage = docker.build("catalogador/catalogador-tfg-db:${BRANCH_NAME}","--label jenkins ./database")
            dbHostname = "${BRANCH_NAME}-${BUILD_NUMBER}-db"
            db = dbImage.run("-p 5432:5432 --network public --name ${dbHostname}")
            timeout(time: 3, unit: 'MINUTES') {
                sh "until [ \$(docker logs ${dbHostname} --tail 50 2>&1 | grep 'init process complete' | wc -l) -gt 0 ]; do sleep 10; done"
            }

        }

        stage ('Tomcat: despliegue de la aplicación') {
            def webImage = docker.build("asd/asd-tfg-app:${BRANCH_NAME}","--label jenkins ./appserver")
            def webJavaOpts = "-Dspring.datasource.url=jdbc:postgresql://${dbHostname}:5432/${dbName} " +
                    "-Dspring.datasource.username=${dbUser} " +
                    "-Dspring.datasource.password=${dbPassword} "
            webHostname = "${BRANCH_NAME}-${BUILD_NUMBER}-app"
            def proxyOpts = "-l 'traefik.frontend.rule=Host:${testingDomainName};PathPrefixStrip:/${webProxyPrefixPath}' " +
                    "-l 'traefik.port=9090'"
            web = webImage.run("-p 9999:8080 -p 9898:80 --network public --link ${dbHostname} --name ${webHostname} -e JAVA_OPTS='${webJavaOpts}' ${proxyOpts}")
            timeout(time: 3, unit: 'MINUTES') {
                sh "until [ \$(docker logs ${webHostname} --tail 50 2>&1 | grep 'Server startup' | wc -l) -gt 0 ]; do sleep 10; done"
            }
        } 

我想知道的是如何使用Bitnami Jenkins在這個EC2實例中創建一個子域。 因此,不是通過http:// mydomain:9999訪問我的應用程序,而是可以通過子域http://subdomain.mydomain.com的url或擴展名為http:// mydomain.com/extension的普通域來訪問它。

我不知道怎么做,因為bitnami jenkins的形象有tomcat,apache2等。我甚至不知道它正在使用哪一個。 我認為tomcat,因為那是他得到jenkins戰爭的地方。 即使每次運行我的管道時創建一個不同的子域也可能很棒。

再次感謝你。

我有一個非常類似的問題,我已經將子域的CNAME配置為指向運行我的docker容器的同一台機器,啟動了一個Nginx反向代理,它偵聽所有docker容器,然后轉發來自端口80的所有流量到所需的容器。 工作也像生產中的魅力。 這樣一台機器可以服務多個具有不同子域的docker容器:)讓我知道如果不清楚我可以提供示例和鏈接來解決問題。

這是我正在使用的nginx docker鏡像,它監聽機器上的所有容器,並根據容器已啟動的環境變量將http請求轉發到特定容器,設置子域變量,如README中所述。以下鏈接。 在此輸入鏈接描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM