Docker Engine 的 Linux 安裝後步驟

這些選用的安裝後程序說明如何設定您的 Linux 主機,以便更好地與 Docker 搭配使用。

以非 root 使用者身分管理 Docker

Docker daemon 綁定到 Unix 通訊端,而不是 TCP 連接埠。 根據預設,擁有 Unix 通訊端的是 root 使用者,其他使用者只能使用 sudo 存取它。 Docker daemon 一律以 root 使用者身分執行。

如果您不想在 docker 命令前面加上 sudo,請建立一個名為 docker 的 Unix 群組,並將使用者新增至其中。 Docker daemon 啟動時,它會建立一個 docker 群組成員可以存取的 Unix 通訊端。 在某些 Linux 發行版本中,系統會在使用套件管理程式安裝 Docker Engine 時自動建立此群組。 在這種情況下,您不需要手動建立群組。

警告

docker 群組會授予使用者 root 級權限。 如需這如何影響系統安全性的詳細資訊,請參閱 Docker Daemon 攻擊面

備註

如需在沒有 root 權限的情況下執行 Docker,請參閱 以非 root 使用者身分執行 Docker daemon (Rootless 模式)

若要建立 docker 群組並新增您的使用者

  1. 建立 docker 群組。

    $ sudo groupadd docker
    
  2. 將您的使用者新增至 docker 群組。

    $ sudo usermod -aG docker $USER
    
  3. 登出並重新登入,以便重新評估您的群組成員資格。

    如果您在虛擬機器中執行 Linux,則可能需要重新啟動虛擬機器才能使變更生效。

    您也可以執行下列命令來啟用對群組的變更

    $ newgrp docker
    
  4. 確認您可以在沒有 sudo 的情況下執行 docker 命令。

    $ docker run hello-world
    

    此命令會下載測試映像檔並在容器中執行它。 容器執行時,它會列印訊息並結束。

    如果您在將使用者新增至 docker 群組之前最初使用 sudo 執行 Docker CLI 命令,您可能會看到下列錯誤

    WARNING: Error loading config file: /home/user/.docker/config.json -
    stat /home/user/.docker/config.json: permission denied

    此錯誤表示 ~/.docker/ 目錄的權限設定不正確,因為先前使用了 sudo 命令。

    若要解決此問題,請移除 ~/.docker/ 目錄(它會自動重新建立,但任何自訂設定都會遺失),或使用下列命令變更其所有權和權限

    $ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
    $ sudo chmod g+rwx "$HOME/.docker" -R
    

使用 systemd 設定 Docker 在開機時啟動

許多現代 Linux 發行版本都使用 systemd 來管理系統開機時啟動的服務。 在 Debian 和 Ubuntu 上,Docker 服務預設會在開機時啟動。 若要使用 systemd 在其他 Linux 發行版本上設定 Docker 和 containerd 在開機時自動啟動,請執行下列命令

$ sudo systemctl enable docker.service
$ sudo systemctl enable containerd.service

若要停止此行為,請改用 disable

$ sudo systemctl disable docker.service
$ sudo systemctl disable containerd.service

您可以使用 systemd 單元檔案來設定啟動時的 Docker 服務,例如新增 HTTP 代理伺服器、為 Docker 執行階段檔案設定不同的目錄或分割區,或其他自訂。 如需範例,請參閱 設定 daemon 以使用代理伺服器

設定預設記錄驅動程式

Docker 提供 記錄驅動程式,用於收集和檢視主機上執行的所有容器的記錄資料。 預設記錄驅動程式 json-file 會將記錄資料寫入主機檔案系統上的 JSON 格式檔案。 隨著時間的推移,這些記錄檔的大小會擴展,導致磁碟資源可能耗盡。

為避免磁碟記錄資料過度使用的問題,請考慮下列其中一個選項

後續步驟

  • 查看 Docker 工作坊 以瞭解如何建置映像檔並將其作為容器化應用程式執行。