VTRyo Blog

一歩ずつ前に進むブログ

超簡単!Ansible Containerのインストールからrunまで

f:id:vtryo:20180716120514p:plain 相変わらずAnsibleの話です。

今回はDockerをAnsibleで構築できるAnsible containerなるものを試してみました。

昨年、弊社で運用しているvagrant + chefをvangrant + ansibleにまるっと書き換える担当をしました。
そしてようやくDocker化が現実的になってきたということで、Ansible containerをやってみることにしました!

ただし、今回はとにかく動かすことに特化してます。
というのも、始めたての時何度やってもエラーを吐きまくってビルドすらできなかったのです。

そういうわけで、エラーに泣いている人はこのブログで希望のひかりを掴んでください!w

さ、細かい説明はあとにして、まずは動かしてみましょう。

前提

公式より以下の環境がすでに動作していることが前提となっています。

  • Python 2.7 or Python 3.5
  • pip
  • setuptools 20.0.0+

ただ、docker Engineも必要なのでインストールしておきます。

sudo yum install docker

インストール

MacOSとLinuxとでインストール方法が違うのを確認しました。

  • linux
python -V
Python 2.7.13
sudo pip install ansible-container[docker,openshift]
  • MacOS
sudo pip install ansible-container docker openshift

ansible-container init

インストール後、バージョン確認するとこうなっていると思います。

/usr/local/bin/ansible-container version
Ansible Container, version 0.9.2

※パスが通ってない場合はコピーしましょう cp /usr/local/bin/ansible-container /bin

ansible-containerの初期ファイルを作成します。

ansible-container init
Ansible Container initialized.

すると以下のファイル群ができます。

ll
合計 20
-rw-r--r-- 1 root root  130  313 14:05 ansible-requirements.txt
-rw-r--r-- 1 root root  144  313 14:05 ansible.cfg
-rw-r--r-- 1 root root 2502  313 14:05 container.yml
-rw-r--r-- 1 root root 1181  313 14:05 meta.yml
-rw-r--r-- 1 root root  298  313 14:05 requirements.yml

ともあれファイルを編集してみる

今回はコピペでやってみましょうw細かいことは後で良いんですよ←
下に書く設定をコピペしてみてください。

centosにnginxをインストールしていくことにします。

vim container.yml

version: "2"
settings:
  conductor:
    base: centos:7
    roles_path:
      - roles
  project_name: oreore-nginx
services:
  nginx:
    from: "centos:7"
    roles:
      - nginx
    command: ["nginx", "-g", "daemon off;"]
registries:
  ecr:
    url: https://0000.dkr.ecr.ap-northeast-1.amazonaws.com
    namespace: test
    repository_prefix: test

そうしたら、rolesの部分を書いていきます。

rolesは作成しないとないのでmkdirします。

mkdir -p roles/nginx/tasks
vim roles/nginx/tasks/main.yml

- name: Add nginx repository
  yum_repository:
    name: nginx_repo
    description: nginx repo
    baseurl: http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck: 0
    enabled: 1
- name: install nginx
  yum: name=nginx state=present
- name: set auto start nginx
  command: chkconfig nginx on
- service:
    name: nginx
    state: restarted
  when: ansible_connection != 'docker'

ansible-container build

ビルドします。container.ymlがあるディレクトリで以下のコマンドでやっていきます。

ansible-container build
Building Docker Engine context...
Starting Docker build of Ansible Container Conductor image (please be patient)...
Parsing conductor CLI args.
Docker™ daemon integration engine loaded. Build starting.       project=oreore-nginx
Building service...     project=oreore-nginx service=nginx

PLAY [nginx] *******************************************************************

TASK [Gathering Facts] *********************************************************
ok: [nginx]

TASK [nginx : Add nginx repository] ********************************************
changed: [nginx]

TASK [nginx : install nginx] ***************************************************
changed: [nginx]

TASK [nginx : set auto start nginx] ********************************************
changed: [nginx]

TASK [nginx : service] *********************************************************
skipping: [nginx]

PLAY RECAP *********************************************************************
nginx                      : ok=4    changed=3    unreachable=0    failed=0

Applied role to service role=nginx service=nginx
Committed layer as image        image=xxxxxxxxxx service=nginx
Build complete. service=nginx
All images successfully built.
Conductor terminated. Cleaning up.      command_rc=0 conductor_id=xxxxxxxxx save_container=False

ビルドでエラーが出る人は一旦以下のコマンド打ってみてください。

ansible-container --debug build

ほんとなぜかはわからないけど、これだとビルドできることがある(汗)あとで、ここはちゃんと調査します。

ansible-container run

containerをrunします。

ansible-container run

Parsing conductor CLI args.
Engine integration loaded. Preparing run.       engine=Docker™ daemon
Verifying service image service=nginx

PLAY [Deploy oreore-nginx] *****************************************************

TASK [docker_service] **********************************************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=0

All services running.   playbook_rc=0
Conductor terminated. Cleaning up.      command_rc=0 conductor_id=xxxxxxxxxxxxxxxx save_container=False

プロセスいる!

docker ps
CONTAINER ID        IMAGE                               COMMAND                  CREATED              STATUS              PORTS               NAMES
9b71956112b5        oreore-nginx-nginx:20180313051600   "nginx -g 'daemon of…"   About a minute ago   Up About a minute                       oreorenginx_nginx_1

ログインしてみましょう。

docker exec -it <container ID> /bin/sh
sh-4.2#

おあーーー動いたーーーw

なんと不親切なブログでしょうか

何の説明もなしに強引に動かすという、なんと不親切なブログなんでしょう。
我ながら最低です。

とはいえ、正直ここまで来るのに、実は再三エラーに泣かされてます。(エラーで動かねえというブログも書くか迷ったくらい)

そういうわけで、多分同じように動かない動かないって唸っている人がいそうだったので「とにかく動かすことはできるぞ!」

という希望のひかりを生み出すブログにしました。

私もansible-containerやっと動いた状態なので、今後はここからさらに掘り下げていきます。

参考

ansible-container

AnsibleでDocker Image作るときのあれこれ - hatappi.blog