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: true
と docker_rootful_enabled: true
を使うと、標準の Docker インストールが行われ、追加のDocker デーモンが非ルートユーザーとして動作します。
注意: Debian 10 およびそれ以前のバージョンでは、依存関係が欠けているため
docker_rootful: false
が必要です。
docker_url
、docker_release
、docker_compose_url
、および docker_compose_release
変数は、関連するバイナリの入手先や、手動インストール時に使用すべきバージョンを定義します。
docker_user
変数で作成する Docker ユーザーの名前を定義します。このユーザーは、docker_rootful: false
の場合にバイナリをダウンロードしてインストールし、そうでない場合はルートレスインストールスクリプトを実行し、隔離されたデーモンを起動します。
注意:
docker_user
の純粋な目的は、Docker デーモンおよび関連するコンテナを実行することであり、システム管理や通常のユーザーとして使用することではありません。
docker_release_shasum
、docker_release_rootless_shasum
、および docker_compose_release_shasum
は、get_url モジュールを使用してダウンロードする際にファイルを検証するために使用されます。docker_release_shasum
は Docker の .tgz
ファイルに、docker_release_rootless_shasum
は docker-ce-rootless-extras
パッケージに使用されます。
docker_rootful_opts
は、ルートフルモードで実行する場合に Docker デーモンに適用するオプションで、未設定の場合は docker_rootful_service_template
の設定が使用されます。
docker_add_alias: true
の場合、.bashrc
または .bash_aliases
に docker
エイリアスが追加されます。false
の場合は、Ansible ユーザーのホームディレクトリに docker_rootless.sh
という名前のシェルスクリプトが作成され、これが docker
コマンドの代わりに機能します。これにより、Ansible ユーザーは docker_user
からルートレス Docker インストールを実行できます。
docker_compose: true
の場合、Docker compose
プラグインまたは docker-compose
がインストールされます。docker_compose_arch
は docker-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 Molecule と vagrant プラグイン および関連ソフトウェアがインストールされている場合、molecule test
を実行することがサポートされています。
tox -l
コマンドで利用可能な tox
テスト環境をリストできます。
貢献
貢献したいですか?素晴らしいですね!貢献は大歓迎です。大きいものでも小さいものでも構いません。何かおかしな点を見つけたら、イシューを提出するか、プルリクエストを作成してコードを改善するか、このプロジェクトのスポンサーになる こともできます。
ライセンス
Apache License Version 2.0