Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@KentoDodo

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

More than 1 year has passed since last update.

概要

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

0
Help us understand the problem. What is going on with this article?
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
KentoDodo
docker-composeが大好き。 昔はiOSやAndroidのフロントエンジニア、今はB向けか社内向けのwebサービスのアプリエンジニアやってます。 実は、気象予報士資格を持ってたりします。趣味は、旅行 のち 天体写真撮影 です。
weathernews
ウェザーニューズは、気象リスクを軽減するための気象情報サービスを行なっています。そのための気象予測やその情報活用に関するサービス開発や研究を行っています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?