相変わらず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 3月 13 14:05 ansible-requirements.txt -rw-r--r-- 1 root root 144 3月 13 14:05 ansible.cfg -rw-r--r-- 1 root root 2502 3月 13 14:05 container.yml -rw-r--r-- 1 root root 1181 3月 13 14:05 meta.yml -rw-r--r-- 1 root root 298 3月 13 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やっと動いた状態なので、今後はここからさらに掘り下げていきます。