Help us understand the problem. What is going on with this article?

Ansibleでdocker使用可能ユーザーを一挙に作成する

概要

dockerをインストールした直後は、root以外のユーザーはdockerコマンドを管理者権限sudo付きでないと使用できない。
これを構成管理ツールAnsibleによって、root以外のユーザーでもsudoなしでdockerコマンドを実行できるよう自動設定する。

背景

docker上で色々動かすプロトタイプなマシンサーバーをAnsibleで構成管理したい。
ところが、単にdockerを入れただけでは、dockerコマンドを実行時に面倒な事が起こる。
具体的には、sudo付きでdockerコマンドを実行したり、rootユーザーになったりしなければならない。

そこで、Ansibleでこれも自動設定もしてしまいたいと考えた。

具体と解説

動作検証環境

  • python version:2.7.15
  • ansible-playbook:2.6.3
  • ホストOS:CentOS 7.5.1804

ディレクトリ構造

再利用できるよう、タスクはユーザー設定とdocker関係設定に分割してロール内に記述しました。

ansible/
 ├ hosts/
 ├ roles/
 │ ├ docker/
 │ │ ├ files/
 │ │ │ └ docker.repo
 │ │ └ tasks/
 │ │   └ main.yml
 │ └ user/
 │   └ tasks/
 │     └ main.yml
 └ site.yml

各ファイルの中身

dockerはyumでインストールすることとします。
また、ホストOSはCentOSを想定しています。
(掲題の件の部分に関しては、他の大半のLinux OSでも同様のソースで動作するかと思います。)

roles/docker/tasks/main.yml
- name: Yum update packages
  yum:
    name: "*"
    state: latest
- name: Set docker repo
  copy:
    src: "{{ role_path }}/files/docker.repo"
    dest: /etc/yum.repos.d/docker.repo
    owner: root
    group: root
    mode: 0755
- name: Install docker
  yum:
    name: docker-engine
    state: present
- name: docker setting mkdir
  file: 
    path: /etc/systemd/system/docker.service.d
    state: directory
    owner: root
    group: root
    mode: 0755
- name: Add to docker group
  user:
    name: "{{ item }}"
    groups: docker
    append: yes
  with_items: "{{ docker_users }}"
- name: Start docker
  systemd:
    name: docker
    state: started
    enabled: yes
roles/docker/files/docker.repo
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg

roles/docker/tasks/main.yml 内の Add to docker group というタスクで、実行したいユーザー群docker_usersdockerグループへ入れます。
これによって、docker_usersに登録されているユーザーは、sudoなしでdockerコマンドを実行できるようになります。

docker_users は、Ansibleの実行ファイルsite.yml等で変数として設定します。

site.yml
- hosts: all
  user: user1
  become: true
  vars:
    docker_users:
      - user1
      - user2
  roles:
    - role: user
    - role: docker

docker実行したいユーザー群のユーザーアカウントが存在しておく必要があるため、タスクdockerの実行前にタスクuserにてユーザー作成を行います。

roles/user/tasks/main.yml
- name: Add users
  user:
    name: "{{ item }}"
  with_items: "{{ docker_users }}"

ファイルhostsには、ホストサーバー(デプロイ先の)アドレスを記述します。

127.0.0.1
127.0.0.2
127.0.0.3

実行

$ ansible-playbook -i hosts site.yml

実行は、ホスト側でsudoが利用可能な環境で。

上記は、ゲストにおいて秘密鍵をssh-agentで登録している場合で、
そうでない場合は、--private-keyなど適切なオプションをつけて実行ください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away