上次我在 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 快取(映像等),當一個階段建立映像而另一個階段需要它時,速度非常快。
我和詹金斯有同樣的問題。我需要與工作節點共用主機 docker。
上次我想測試新方法並使用自己的 docker 運行跑步者。我幾乎沒有 2 件重要的事情: - 資源限制(我想共享 8 個 CPU 核心中的 7 個、16 GB 記憶體中的 10 個、一些 HDD 限制) - 安全性
需要補充的是:我沒有需要 GPU、網路功能、掛載某些裝置等的 CI 腳本。他們通常做的很簡單docker build
,docker push
有時我需要用 來抓取工件docker cp
,僅此而已。主要問題:如何在 docker 中執行 docker,無需主機的 root 權限?
套接字共享或特權模式都會為主機帶來漏洞,而虛擬機器(如 VirtualBox 等)速度緩慢且難以做到,而且我想共享資源,並且想要那個 docker能使用 16 GB 中的 10 個,但 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 中執行 docker 會遇到什麼問題?怎麼做?
答案1
好吧,關於ram內存的負載平衡,我忍不住,你可以通過將當前用戶添加到docker組來在docker(dind)中運行docker而無需sudo權限,
我沒有看到共享套接字的安全性,因為它失去了完整性,但我建議使用帶有特權參數的作曲家實例化 dind:true