docker_rootless

Docker ルートレス Ansible ロール

これは、非ルートユーザーとして動作する Docker デーモンをインストールおよび設定するための Ansible ロールです。

この内容を運用環境で使用する前に、必ず非運用環境でテストしてください。

ルートレスモードにより、Docker デーモンとコンテナを非ルートユーザーとして実行できるようになり、デーモンやコンテナランタイムの潜在的な脆弱性を軽減します。 (docker)

注意 検証用の SLSA アーティファクトが slsa アクションワークフロー に存在します。

要件

---
roles:
  - name: konstruktoid.docker_rootless
    version: v0.53.0
    src: https://github.com/konstruktoid/ansible-role-docker-rootless.git
    scm: git

プレイブックの例

---
- hosts: all
  any_errors_fatal: true
  tasks:
    - name: konstruktoid.docker_rootlessロールを読み込む
      ansible.builtin.import_role:
        name: konstruktoid.docker_rootless

デフォルトのロール変数

---
docker_add_alias: true
docker_allow_ping: false
docker_allow_privileged_ports: false
docker_compose: false
docker_compose_arch: x86_64
docker_compose_release: v2.29.2
docker_compose_release_shasum: d037bd4937bf18fba67cff4366e084ee125a3e15c25657ee1aeceff8db3672b4
docker_compose_url: https://github.com/docker/compose/releases/download
docker_daemon_json_template: daemon.json.j2
docker_driver_network: slirp4netns
docker_driver_port: builtin
docker_release: 27.1.2
docker_release_rootless_shasum: 5565502b4fab26266327f5a018185f5a98cc1714c975b943dcb7c4365cdcdb25
docker_release_shasum: a7fff574037af22bd0239e7e5601c312d9fe9c55e2b9cf5ddea86d5499a4de88
docker_repository_template: docker.repo.j2
docker_rootful_enabled: false
docker_rootful: false
docker_rootful_opts: false
docker_rootful_service_template: docker_rootful.service.j2
docker_rootless_script_template: docker_rootless.sh.j2
docker_rootless_service_template: docker_rootless.service.j2
docker_service_restart: true
docker_url: https://download.docker.com/linux/static/stable/x86_64
docker_user_bashrc: false
docker_user: dockeruser

このロールを使用する前に、ディストリビューションに利用可能なパッケージを使って Docker をインストールするか、静的バイナリをダウンロードして手動でインストールするかを決める必要があります。「ルートフル」インストールと呼ばれ、root 権限が必要です。

docker_rootful: false に設定すると、静的バイナリをダウンロードして手動でインストールし、root 権限は必要ありません。

docker_rootful: true の場合、docker_rootful_enabled がデーモンをサービスとして有効にするかどうかを決定します。

docker_service_restart は、Docker バイナリが抽出された後にルートレスサービスを再起動します。これにより、実行中のコンテナに影響が出る可能性があります。

docker_rootful: truedocker_rootful_enabled: true を使うと、標準の Docker インストールが行われ、追加のDocker デーモンが非ルートユーザーとして動作します。

注意: Debian 10 およびそれ以前のバージョンでは、依存関係が欠けているため docker_rootful: false が必要です。

docker_urldocker_releasedocker_compose_url、および docker_compose_release 変数は、関連するバイナリの入手先や、手動インストール時に使用すべきバージョンを定義します。

docker_user 変数で作成する Docker ユーザーの名前を定義します。このユーザーは、docker_rootful: false の場合にバイナリをダウンロードしてインストールし、そうでない場合はルートレスインストールスクリプトを実行し、隔離されたデーモンを起動します。

注意: docker_user の純粋な目的は、Docker デーモンおよび関連するコンテナを実行することであり、システム管理や通常のユーザーとして使用することではありません。

docker_release_shasumdocker_release_rootless_shasum、および docker_compose_release_shasum は、get_url モジュールを使用してダウンロードする際にファイルを検証するために使用されます。docker_release_shasum は Docker の .tgz ファイルに、docker_release_rootless_shasumdocker-ce-rootless-extras パッケージに使用されます。

docker_rootful_opts は、ルートフルモードで実行する場合に Docker デーモンに適用するオプションで、未設定の場合は docker_rootful_service_template の設定が使用されます。

docker_add_alias: true の場合、.bashrc または .bash_aliasesdocker エイリアスが追加されます。falseの場合は、Ansible ユーザーのホームディレクトリに docker_rootless.sh という名前のシェルスクリプトが作成され、これが docker コマンドの代わりに機能します。これにより、Ansible ユーザーは docker_user からルートレス Docker インストールを実行できます。

docker_compose: true の場合、Docker compose プラグインまたは docker-compose がインストールされます。docker_compose_archdocker-compose バイナリのアーキテクチャを定義します。

docker_user_bashrc: true の場合、docker_user のホームに docker および docker compose コマンドの補完がある .bashrc が置かれます。

docker_allow_privileged_ports 変数は、特権ポート (< 1024) を公開することが許可されるかどうかを設定します。

docker_allow_ping 変数は、非特権ユーザーが ICMP エコーソケット を開くことができるかどうかを設定します。一部のディストリビューションでは許可されておらず、それによりコンテナが外部に ping を発信できないことがあります。

docker_driver_network および docker_driver_port 変数は、RootlessKit の ネットワークドライバー および ポートドライバー をそれぞれ設定します。これは、ネットワークパフォーマンスの最適化 に役立ち、ソース IP の伝播 が必要な場合に使用されます。デフォルトでは、builtin ポートドライバーは実際のソース IP を公開しません。代わりに、すべての接続は Docker ゲートウェイ(例: 172.19.0.1)から発信しているように見えます。docker_driver_port: slirp4netns を設定すると、ソース IP の伝播が有効になります。

*_template の名前が付いた変数は、使用する テンプレート の場所を示します。これにより、カスタムのものと置き換えやすくなります。

最も重要なテンプレートは、おそらく docker_daemon_json_template: daemon.json.j2 で、Docker の daemon.json 構成ファイルテンプレートの場所です。

コンテナ管理

スタンドアロンコンテナ

Docker デーモンをルートフルで使用する場合とコンテナを実行する際に、大きな違いはありませんが、非特権ユーザーに切り替えて、ユーザーの作業ディレクトリにパスを適応させる必要があります。

docker_add_alias: true が使用されている場合、docker コマンドは Ansible ユーザーでも通常通り使用可能です。シェルで alias を入力して、キーワード設定を確認できます。

- name: Docker ユーザー情報を登録
  become: true
  ansible.builtin.user:
    name: "{{ docker_user }}"
  check_mode: true
  register: docker_user_info

- name: コンテナの例を示すブロック
  environment:
    XDG_RUNTIME_DIR: "/run/user/{{ docker_user_info.uid }}"
    PATH: "{{ docker_user_info.home }}/bin:{{ ansible_env.PATH }}"
    DOCKER_HOST: "unix:///run/user/{{ docker_user_info.uid }}/docker.sock"
  block:
    - name: Nginx コンテナ
      become: true
      become_user: "{{ docker_user }}"
      community.docker.docker_container:
        name: nginx
        image: konstruktoid/nginx
        state: started
        cap_drop: all
        capabilities:
          - chown
          - dac_override
          - net_bind_service
          - setgid
          - setuid
        pull: true
        hostname: "{{ ansible_nodename }}"
        container_default_behavior: compatibility

Docker Compose サービス

- name: Docker ユーザー情報を登録
  become: true
  ansible.builtin.user:
    name: "{{ docker_user }}"
  check_mode: true
  register: docker_user_info

- name: Docker Compose の例を示すブロック
  become: true
  become_user: "{{ docker_user }}"
  environment:
    XDG_RUNTIME_DIR: /run/user/{{ docker_user_info.uid }}
    PATH: "{{ docker_user_info.home }}/bin:{{ ansible_env.PATH }}"
    DOCKER_HOST: "unix:///run/user/{{ docker_user_info.uid }}/docker.sock"
  block:
    - name: pip 依存関係をインストール
      ansible.builtin.pip:
        name:
          - docker<7 # https://github.com/docker/docker-py/issues/3194
          - docker-compose

    - name: サービスを作成して開始
      community.docker.docker_compose:
        project_src: /var/tmp/
        files: "{{ docker_user }}-docker-compose.yml"
      register: compose_output

モレキュールによるテスト

Ansible Moleculevagrant プラグイン および関連ソフトウェアがインストールされている場合、molecule test を実行することがサポートされています。

tox -l コマンドで利用可能な tox テスト環境をリストできます。

貢献

貢献したいですか?素晴らしいですね!貢献は大歓迎です。大きいものでも小さいものでも構いません。何かおかしな点を見つけたら、イシューを提出するか、プルリクエストを作成してコードを改善するか、このプロジェクトのスポンサーになる こともできます。

ライセンス

Apache License Version 2.0

著者情報

https://github.com/konstruktoid

プロジェクトについて

Docker daemon installation, with rootless support

インストール
ansible-galaxy install docker_rootless
ライセンス
apache-2.0
ダウンロード
7.5k
所有者