下面是这里采取jenkins image的代码片段:
# Install Docker Engine
RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D && \
echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" | tee /etc/apt/sources.list.d/docker.list && \
apt-get update -y && \
apt-get purge lxc-docker* -y && \
apt-get install docker-engine=${DOCKER_ENGINE:-1.10.2}-0~trusty -y && \
usermod -aG docker jenkins && \
usermod -aG users jenkins
它安装jenkins image内docker引擎。我的理解是,var/run/docker.sock
创建withing Jenkins容器,由于安装docker引擎。
下面是从这里截取的卷映射语法:
volumes:
- jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
一个启动EC2主机上jenkins container(above)。
EC2主机也有docker后台程序。
因此,有在EC2主机运行docker守护进程。还有docker container(Jenkins)内运行的docker守护
有了这个syntax(/var/run/docker.sock:/var/run/docker.sock
)在docker-compose(above)套接字文件,
是否Jenkins容器内docker守护覆盖与目前在EC2主机套接字文件自身的套接字文件?如果是...是什么启示?
从文档:
Docker-engine is a client-server application
请注意,当您安装docker-engine
安装docker-daemon (server)和docker CLI (client)。
这意味着,如果一个docker守护程序没有运行,你仍然可以运行docker CLI命令:
docker info
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Jenkins image您共享没有说明运行docker引擎。所以,我认为这不是在容器内运行。
/var/run/docker.sock:/var/run/docker.sock
量docker主机的docker引擎插槽映射到容器中。
因此,容器内运行docker CLI命令控制docker主机上运行的docker-engine。
这是有道理的,如果你从集装箱内Jenkins主机上做CI/CD。
Jenkins管道可以使用泊坞窗,docker-compose和docker群命令来运行测试,建立文物和部署应用程序的新版本。