LoginSignup
0
2

More than 3 years have passed since last update.

Ansible と Docker でサーバを綺麗に保持

Posted at

あらすじ

仕事で Ansible と Docker を使っているうちに、
より良い使い方(コラボ方法)がわかってきた気がする。
独り言 memo。

Ansible だけでも十分管理できそうですが、
よりクリーンな環境、安全なデプロイを実現するには Docker も必要と考えるようになりました。

今までのデプロイの問題点

さて、あなたは新しく現場に配置されました。
保守のため、ローカル環境に本番環境と同様の環境を作らなければなりません。
「サーバには何がインストールされているでしょうか?」
と聞かれたときにすぐにはわからないでしょう。
さらに、
「入っているパッケージのうち使っているものはどれでしょうか?」
と聞かれてもよりわからないでしょう。
特に出入りの多い環境では、先にいた人でもわからないことの方が多いのではないでしょうか。

また、検証環境の A サーバには入っていたのに
本番環境のB サーバにはとあるパッケージが入っていない!なんてことも考えられます。
これでは検証環境で作成したソースコードを展開しても動かなくなってしまい、
最悪本番環境が止まってしまうことも考えられます。

そうです。サーバの中が今までの積み重ねになってしまい、綺麗な状態(最小限で実行できる状態)がわからなくなり、正しいパッケージ管理が不可能になってしまいます。

Ansible

 デプロイメントツール

メリット

  • サーバにあらかじめソフトを入れておかなくても実行可能(SSH 接続できれば可能)

これがいちばんの強みだと思います。
一台だけ汚れ仕事を担う司令塔を作っておけば後は失敗なく作ることが可能
その司令塔もDocker 内に作ればサーバは汚れない!

  • Jinja を用いたテンプレートによって変数を自由に変えられる

開発環境や、本番環境でデプロイの仕方は基本的に変わらないが、
環境変数は異なるのが普通だと思います。
そんな時、各環境の vars.yml を用意しておいて、
実行時に引数に追加するだけで同じコードで別環境のデプロイができる。
これは、本番環境との誤差をなくすためにもなくてはならないものだと考えます。

  • 人の代わりにデプロイ

Ansible の実行コードもシェルで固めておけば、人がデプロイに関わらないので
人為的ミスによるリスクが大幅に軽減可能。

Docker

 パッケージ管理

メリット

  • 最小構成の把握

システムで用いる最小構成を Dockerfile を見るだけで把握することが可能。
もし新たいパッケージが必要となった時は前項の Ansible で
追加していくのではなく Dockerfile に追記し、Image を更新します。

  • パッケージが万が一落とせなくなった時にも対応できる

Ansible でパッケージ追加をしていると、何らかのはずみで
install ができなくなってしまった際、そのパッケージを使わない改修が
必要となってしまいます。
ですが、Image として環境を保存しておけば、次 Image を更新するまでは
一時的に今までのパッケージを使うことが可能です。

  • デプロイ時の時間短縮

パッケージの容量にもよりますが、大きいものを毎回のデプロイ時に実行するのは
時間の無駄になってしまう。

二つに共通すること = 定義書としての活用

コードと定義書を別々に作るのはとってもめんどくさいことであると感じます。
よく「コードを見てくれればわかる」と言う人がいます。
リバースエンジニアリングはこりごりです。

しかし、Docker と Ansible に関してはその通りだと思います。

Dockerfile にはサーバの環境整備に必要な手順をそのまま埋め込めます。
次の例のように環境にどのようなパッケージを入れたかが一目でわかります。
例)

Dockerfile
# 基本的なパッケージのインストール
RUN yum -y install httpd

一方 Ansible では一動作に対し name で何の動作をさせているか
自由記述が可能です。
例)

- name: start httpd
  systemd:
    name: httpd
    state: started
    enabled: yes

これら2つを見れば、手動での構築も容易です。

まとめ

  • Docker を用いてシステムを運用することで、ホストの環境を汚さない
  • 後から見た時にわかりやすい環境構築
    • Dockerfile でパッケージ管理
    • Ansible で環境整備
0
2
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
0
2