![](/img/trans.png)
[英]How can I create a docker container from a Dockerfile in github inside a Jenkins pipeline?
[英]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.