Docker 之 資源

Docker 資源隔離技術涉及linux八個命名空間的使用
在這裏插入圖片描述
同時docker還提供了一些選項讓我們能夠對mem, cpu, devices 進行分配。

怎麼判斷一個鏡像的默認用戶呢?

  1. docker run --rm --entrypoint “” busybox:latest whoami
  2. docker run --rm --entrypoint “” busybox:latest id

whoani 和 id 都是linux自帶的命令, 所以我們放心使用。

爲什麼要確定鏡像的默認user, 請看下圖?

在這裏插入圖片描述

如果一個鏡像的默認用戶存在過高權限,會存在黑客攻擊的威脅,那麼怎麼避免折中情況呢, 當我們創建運行容器時可以指定容器的用戶。

  1. 查看鏡像中所支持的用戶

    docker run --rm busybox:latest awk -F: ‘$0=$1’ /etc/passwd

  2. 設置容器運行時用戶

    docker run -u nobody --rm busybox:latest id

有些人可能會問,爲什麼使用默認的root 用戶可能會存在安全隱患,那是因爲Docker 和 宿主機共用了user命名空間。下面分享一個例子來證明:

  1. echo “e=mc^2” > garbage
  2. chmod 600 garbage
  3. sudo chown root:root garbage
  4. docker run --rm -u nobody -v “$(pwd)”/garbage:/test/garbage ubunut:latest cat /test/garbage
    在這裏插入圖片描述
  5. docker run --rm -v “$(pwd)”/garbage:/test/garbage ubunut:latest cat /test/garbage
    在這裏插入圖片描述
    從上述例子中我們可以看到,使用nobody 用戶訪問宿主機中的測試文件提示權限不足,但使用root用戶則可以訪問。
    值得注意的是無論是容器還是宿主機的root 用戶user id 都爲 0.

爲了更好的控制用戶和資源掛載,這裏推薦使用user id: user group的方式來設置容器的用戶訪問, 例子如下:
docker run -u 2000:2000 ubuntu:latest echo “hello world”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章