上次我在docker for runners中使用了docker,但是它需要特权模式
撰写文件:
version: '3.7'
services:
runner:
image: gitlab/gitlab-runner:latest
volumes:
- ./config:/etc/gitlab-runner
- ./run:/var/run/
# - /var/run/docker.sock:/var/run/docker.sock
docker:
image: docker:dind
restart: always
privileged: true # <-- security problems
volumes:
- ./run:/var/run/
我有一台个人电脑。我有一个 Gitlab 团队需要使用 Gitlab CI 运行docker build
或docker-compose up
编写脚本。我真的想加快 CI 的速度。这就是为什么我分享我的主持人使用跑步者,现在他们有了docker缓存(图像等等),当一个阶段构建图像而另一个阶段需要它时,速度真的很快。
我在 Jenkins 上遇到了同样的问题。我需要与工作节点共享主机 docker。
上次我想测试新方法,并使用自己的 docker 运行运行器。我几乎没有 2 件重要的事情:- 资源限制(我想共享 8 个 CPU 内核中的 7 个、16 GB 内存中的 10 个、一些 HDD 限制)- 安全性
需要补充的是:我没有需要 GPU、网络功能、安装某些设备等的 CI 脚本。它们通常执行简单的操作docker build
,docker push
有时我需要使用来获取工件docker cp
,仅此而已。主要问题:如何在 docker 中以无 root 权限的方式在主机上运行 docker?
两者 - 套接字共享或特权模式都会给主机带来漏洞,并且虚拟机(如 VirtualBox 或类似的东西)运行缓慢且难以操作,我也想共享资源,并且希望 docker能使用 16 GB 中的 10 GB,但是当不使用时,10 GB 应该是免费的。
当我以通常的权限运行 dind contatiner 时(失败之前),出现了一些无信息的错误:
gitlab-runner-docker | mount: permission denied (are you root?)
gitlab-runner-docker | mount: permission denied (are you root?)
gitlab-runner-docker | Could not mount /sys/kernel/security.
gitlab-runner-docker | AppArmor detection and --privileged mode might break.
如果尝试在非特权模式下运行 docker,会遇到什么问题?该怎么办?
答案1
好吧,关于 RAM 内存的负载平衡,我无能为力,但是您可以通过将当前用户添加到 docker 组,在 docker (dind) 中运行 docker,而无需 sudo 权限,
我看不到共享套接字的安全性,因为它失去了完整性,但我建议使用具有特权参数的作曲家参数实例化 dind:true