Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Docker中设置Jenkins的最佳实践_Docker_Jenkins_Dockerfile_Jenkins Pipeline - Fatal编程技术网

在Docker中设置Jenkins的最佳实践

在Docker中设置Jenkins的最佳实践,docker,jenkins,dockerfile,jenkins-pipeline,Docker,Jenkins,Dockerfile,Jenkins Pipeline,我正在开发一个应用程序,我希望使用Jenkins进行持续集成,此外,我希望能够控制CI的环境。我正在OSX上进行本地开发,我正在推进一个远程Ubuntu 16.04虚拟机所有这些让我想到了Docker。基本上我想要的是Docker中的Jenkins,但也是Jenkins中的Docker。我的构建从属服务器最初仅限于主服务器 在过去的几天里,我一直在阅读一些关于Docker的帖子,但我仍然不能完全确定我是否深入理解了它。所以这个问题 目前,这是我的设置: 詹金斯: /docker compose.

我正在开发一个应用程序,我希望使用Jenkins进行持续集成,此外,我希望能够控制CI的环境。我正在OSX上进行本地开发,我正在推进一个远程Ubuntu 16.04虚拟机所有这些让我想到了Docker。基本上我想要的是Docker中的Jenkins,但也是Jenkins中的Docker。我的构建从属服务器最初仅限于主服务器

在过去的几天里,我一直在阅读一些关于Docker的帖子,但我仍然不能完全确定我是否深入理解了它。所以这个问题

目前,这是我的设置:

詹金斯:

/docker compose.yml

版本:“3”
服务:
詹金斯:
建造:/詹金斯
卷数:
-/var/run/docker.sock:/var/run/docker.sock#允许docker中的docker
-/jenkins\u home:/var/jenkins\u home
端口:
- 8080:8080
/jenkins/Dockerfile

FROM docker:17.12 AS docker
FROM jenkins/jenkins:lts

COPY --from=docker /usr/local/bin/docker /usr/local/bin/docker
上面的设置工作得很好-直到我在Jenkins中使用Docker。Jenkins已经安装好了,但是当我构建任何使用Docker的作业时,我会得到一个错误

尝试连接到Docker守护程序时,权限被拒绝 插座unix:///var/run/docker.sock: Post(…)拨号unix /var/run/docker.sock:connect:权限被拒绝

CI来源:

/Jenkinsfile

FROM docker:17.12 AS docker
FROM jenkins/jenkins:lts

COPY --from=docker /usr/local/bin/docker /usr/local/bin/docker
管道{
代理{dockerfile true}
舞台{
阶段(‘初始’){
台阶{
打印“你好,世界!”
}
}
}
}
/Dockerfile

FROM python:3.6-slim-jessie
COPY requirements.txt ./
RUN pip install -r requirements.txt --no-cache-dir
CMD ["python"]
现在开始提问

首先,显然我缺少容器使用主机Docker守护程序的一些权限。我知道(除其他外)有一些答案


其次,这甚至是我们想要的方式吗?我想以正确的方式学习docker,我不知道我是否遗漏了关于多阶段构建的内容?

请与docker一起查看jenkins的此docker文件

FROM jenkins/jenkins:lts
MAINTAINER "artem@aleksashkin.com" Artem Aleksashkin

USER root
RUN apt-get update && \
    apt-get -y install apt-transport-https \
         ca-certificates \
         curl \
         gnupg2 \
         software-properties-common && \
    curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \
    add-apt-repository \
       "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
       $(lsb_release -cs) \
       stable" && \
    apt-get update && \
    apt-get -y install docker-ce && \
    rm -rf /var/lib/apt/lists/* && \
    curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && \
    chmod +x /usr/local/bin/docker-compose && \
    usermod -aG docker jenkins

USER jenkins
使用此Dockerfile:

FROM jenkins/jenkins

USER root

RUN apt-get update RUN apt-get -y install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg2 \
    software-properties-common RUN curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | apt-key add - RUN add-apt-repository \    "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \   $(lsb_release -cs) \    stable" RUN apt-get update RUN apt-get -y install docker-ce

USER jenkins

Jenkins插件和执行对如何设置进行了假设,这使得使用现有插件尝试和实现这样的设置变得困难。有几种可能加快速度的方法(1)查看执行的Jenkins
docker
命令。Jenkins正在控制Docker的执行您可能会对您的发现感到惊讶(2)尝试绘制每个容器的容器、卷装载、用户和组的图片(我以前做过,发现这对我个人很有帮助)(3)首先在本地解决它。首先在Jenkins上了解这一点,我称之为“艰难之路”。因此,对于
被拒绝的权限
——我的第一个猜测是,即使Docker客户端可以与套接字通信,它也没有正确的用户/组来使用。如果您尝试将
root
拥有的文件装载到您的工作区并尝试读取它,您可能会看到类似的错误。我建议在代理上运行
stat-c%g/var/run/docker.sock
,查看docker套接字所属的组是什么,然后添加
args'--group add=that group id'
(from),看看这是否能让您更进一步。您是否阅读了docker推荐的博客文章:?请注意末尾关于在Docker的最新版本中复制Docker二进制可执行文件的警告。你应该把它从Jenkins Dockerfile的最后一行删除。很好的片段。让我的生活变得轻松。请添加openssh服务器以便与docker一起安装好吗?如果有人想使用jenkins作为从机进行调试,就需要ssh。