以下是从here拍摄的 Jenkins 图像的代码片段:
# 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镜像中安装docker引擎。我的理解是,由于安装了docker引擎,
var/run/docker.sock
是使用Jenkins容器创建的。以下是从here提取的卷映射语法:
volumes:
- jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
在EC2主机上启动jenkins容器(上方)。
EC2主机也正在运行docker守护程序。
因此,EC2主机中正在运行docker守护程序。在Docker容器(Jenkins)中还运行着一个docker守护程序
在套接字文件的docker-compose(上方)中使用此语法(
/var/run/docker.sock:/var/run/docker.sock
),Jenkins容器中的docker守护程序是否会使用EC2主机中存在的套接字文件覆盖其自己的套接字文件?如果是,这意味着什么?
最佳答案
从docs:
Docker-engine is a client-server application
请注意,在安装
docker-engine
时,将安装docker-daemon(服务器)和dockercli(客户端)。这意味着,如果未运行docker守护程序,您仍然可以运行docker cli命令:
docker info
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
您共享的Jenkins镜像没有运行docker引擎的说明。所以我认为它不在容器内运行。
/var/run/docker.sock:/var/run/docker.sock
卷将Docker主机的Docker引擎套接字映射到容器。因此docker cli命令在容器内运行,以控制在docker主机上运行的docker-engine。
如果您从容器化的Jenkins中对主机执行CI / CD,则这很有意义。
Jenkins管道可以使用docker,docker-compose和docker swarm命令来运行测试,构建 Artifact 和部署新版本的应用程序。
关于docker - Docker-套接字文件的卷映射是否是覆盖行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58667897/