2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

概要

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など適切なオプションをつけて実行ください。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?