【问题标题】:How to configure a dockerfile and docker-compose for Jenkins如何为 Jenkins 配置 dockerfile 和 docker-compose
【发布时间】:2017-09-12 04:16:23
【问题描述】:

我也是 Docker 和 Jenkins 的新手。我对 Dockerfile 和 docker-compose.yml 文件的配置有疑问。我尝试使用最简单的配置来正确设置这些文件。构建和推送已正确完成,但 jenkins 应用程序未在我的本地主机 (127.0.0.1) 上运行。

如果我理解正确,现在它应该默认在端口 50000 上运行(在 jenkins“官方”Dockerfile 中,ARG agent_port=50000)。我也尝试使用 50000、8080 和 80,但没有任何效果。请问您有什么建议吗?我正在使用这些文件:https://github.com/fdolsky321/Jenkins_Docker

第二个问题是,处理容器崩溃的最佳方法是什么。可以说,如果容器崩溃,我想重新创建一个具有相同设置的新容器。最好的方法是创建一个像“crash.sh”这样的新shell文件并在那里提供我想创建具有相同设置的新容器的信息吗?就像这里提到的:https://blog.codeship.com/ensuring-containers-are-always-running-with-dockers-restart-policy/

感谢您的建议。

【问题讨论】:

  • 您使用的是哪个 docker?在哪个操作系统上?
  • 对不起,我忘了提供这个非常重要的信息。 Windows 10 专业版,x64
  • 什么 docker 版本?什么是码头客?适用于 Windows 的带有 docker 的 HyperV? VirtualBox 与 dockerm-machine?
  • PS C:\Users\admin> docker 版本客户端:版本:17.06.2-ce API 版本:1.30 Go 版本:go1.8.3 Git 提交:cec0b72 构建:9 月 5 日星期二 19:57: 19 2017 OS/Arch:windows/amd64 服务器:版本:17.06.2-ce API 版本:1.30(最低版本 1.12) Go 版本:go1.8.3 Git 提交:cec0b72 内置:2017 年 9 月 5 日星期二 19:59:19 OS/ Arch:linux/amd64 实验:true
  • 我在 Windows 上使用 HyperV 和 docker。

标签: docker jenkins docker-compose dockerfile


【解决方案1】:

Jenkins 的 docker-compose

docker-compose.yml

version: '2'
services:
  jenkins:
    image: jenkins:latest
    ports:
      - 8080:8080
      - 50000:50000
    # uncomment for docker in docker
    privileged: true
    volumes:
        # enable persistent volume (warning: make sure that the local jenkins_home folder is created)
        - /var/wisestep/data/jenkins_home:/var/jenkins_home
        # mount docker sock and binary for docker in docker (only works on linux)
        - /var/run/docker.sock:/var/run/docker.sock
        - /usr/bin/docker:/usr/bin/docker

根据需要在主机中替换端口 8080、50000。

重新创建具有相同设置的新容器

安装在卷上的 jenkins_home 是您存储所有作业和设置等的地方。

在创建每个作业时备份已安装的卷 jenkins_home 或以您想要的方式。 每当发生任何崩溃时,使用相同的 docker-compose 文件运行 Jenkins,并将 jenkins_home 文件夹替换为备份。

重新运行/重新启动 jenkins

列出容器

docker ps -a

重启容器

docker restart <Required_Container_ID_To_Restart>

【讨论】:

    【解决方案2】:

    我一直在使用如下所示的 docker-compose.yml:

    version: '3.2'
    
    volumes:
      jenkins-home:
    
    services:
      jenkins:
        image: jenkins-docker
        build: .
        restart: unless-stopped
        ports:
          - target: 8080
            published: 8080
            protocol: tcp
            mode: host
        volumes:
          - jenkins-home:/var/jenkins_home
          - /var/run/docker.sock:/var/run/docker.sock
        container_name: jenkins-docker
    

    我的镜像是基于 jenkins/jenkins:lts 的本地构建的 Jenkins 镜像,它添加了一些其他组件,例如 docker 本身,并且我正在安装 docker 套接字以允许我在 docker 主机上运行命令。您的用例可能不需要这。对您来说重要的部分是正在发布的端口,对我来说只有 8080,以及 /var/jenkins_home 用于在映像更新之间保留 Jenkins 配置的卷。

    为了从错误中恢复,我在 docker-compose.yml 中有 restart: unless-stopped 来配置容器以自动重启。如果你在 swarm 模式下运行它,那将是自动的。

    我通常避免定义容器名称,但在这种情况下,只有一个 jenkins-docker 容器,我希望能够使用 docker logs jenkins-docker 查看日志以收集初始管理员登录令牌等信息.

    我的 Dockerfile 和此映像的其他依赖项位于:https://github.com/bmitch3020/jenkins-docker

    【讨论】:

    • 谢谢你们的帮助。所以现在它可以工作了,但是,如果我使用这个命令:,它在默认端口 8080/tcp 上运行, 50000/tcp。但是我在我的 docker-compose 文件中指定了另一个端口(这次我尝试使用端口 49003,在 docker-compose.yml 中进行了更改)。所以我需要像这样指定端口:。然后,如果我想在端口 49003 上运行它,那么第二个端口 8080 是什么意思?因为如果我使用 49003:49003,它就不起作用。有什么建议吗?但是你帮了我很多!
    • 我希望端口应该在 docker-compose.yml 中指定,而不是在 Dockerfile 中,对吧?看起来,它忽略了撰写文件中的设置。
    • docker-compose.yml文件被docker-compose使用,调用docker run完全忽略这个文件。
    • 谢谢BMitch,那么我应该如何使用docker-compose创建容器呢?我构建了它,将它推送到我的 Docker 集线器,然后我想在 docker-compose 中指定的端口上运行它。请问我该怎么做?
    【解决方案3】:

    HyperV 与 Windows 的 docker。

    在这种情况下,您必须确保端口转发任何已发布的端口(如 5000)。

    打开 HyperV 管理器,然后右键单击那里定义的机器:您将能够添加端口转发规则,以便 localhost:5000 访问您的 VM:5000。

    【讨论】:

    • 有必要吗?因为这应该没问题,当我尝试手动发布它时,它在端口 49001 上工作,例如...
    • @FrantisekDolsky 好的(我没有从你的问题中得到)。至少尝试 docker ps -a,查看正在运行的容器以及发布的端口。然后尝试使用 docker 机器 ip 而不是 127.0.0.1 访问它们
    • @FrantisekDolsky 他们看起来不错(但我无法访问环境来测试他们)。你看到使用docker ps -a 运行的容器了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多