気になることメモ

日常の気になることを、とにかくメモしていきます。

【作成途中】Docker+Ansibleで思うこと

1.はじめに

本資料は、Ansibleでdockerコンテナを管理することを考えてみた資料です。

2.dockerとは何か

  • コンテナ
  • ホストマシンのKernel上で動作するため軽快な動作
  • ネットワークはホストOSとのポートマッピングでアクセス
  • Dockerのベストプラクティス記事では、sshでdocker内を操作しない方が良いとのこと

■【翻訳】Dockerコンテナ内でSSHDを実行してはいけない理由 | POSTD

 ⇒ 皆、sshd動かしてるみたいだけどね。便利だからね。

3.Ansibleとは何か

え…
ssh…?
どうしたらいいんだ…(;´Д`)

 ⇒ Ansible公式サイトのドキュメントに下記の記述が。

■Getting Started - Ansible Documentation

As an advanced topic, Ansible doesn’t just have to connect remotely over SSH. The transports are pluggable, and there are options for managing things locally, as well as managing chroot, lxc, and jail containers. A mode called ‘ansible-pull’ can also invert the system and have systems ‘phone home’ via scheduled git checkouts to pull configuration directives from a central repository.

超意訳すると次の解釈でいます。

SSHでのリモート接続は必須じゃないよ~。コンテナの操作は、リモート接続なしでローカルで動作させるAnsibleの使い方が良いんじゃないかな。

あー、そうなんだ…。うーん、AnsibleのPlaybookをローカルで動かすのかな。どういう組合せが良いのかな。わかんないな。
(たしかにコンテナ内でsshdを動作させていた場合、新規にコンテナを作成するごとにsshdのホスト識別IDが変わっちゃうかもしれない。そうすると、鍵認証をしたい場合は面倒かも。)
ちょっと組合せを考えてみようかな。

4.Docker+Ansibleにおける組合せパターンと最適解

想定する組合せパターンは以下の通り。(絵もあとで描く ⇒時間なかった(;´Д`))

  1. Dockerコンテナ(sshあり)+Ansible(コンテナ内へssh接続)
  2. Dockerコンテナ(sshなし)+Ansible(コンテナホストへssh接続)
  3. Dockerコンテナ(sshなし)+Ansible(コンテナホストでローカル実行)
  4. Dockerコンテナ(sshなし)+Ansible(コンテナ内でローカル実行)

 ⇒ 色々と考えたけど、まず、Dockerについて勘違いしていた。

 ⇒ Dockerファイルを綺麗に書かないと、ただ単に「特定コマンドを実行して終了するだけのコンテナ」になっちゃう。(docker runで、とりあえずコンテナを作った場合)

 ⇒ やはりコンテナイメージは、予め仕込みが必要そう。

 ⇒ それでコンテナイメージをどのサーバで実行するか、Ansibleで管理する感じかも。

 ⇒ というわけで、上記の組み合わせでは「2」なんじゃないかなぁ。

 ⇒ すまねぇ!ぶっちゃけ最適解がわからねぇ!(;´Д`)

5.「Dockerコンテナ(sshなし)+Ansible(コンテナホストへssh接続)」をやってみる


目標

Tomcatさんをコンテナ内に立てるよ!


方法

  • tomcatを作るAnsibleのplaybookを作成
  • コンテナホスト上でdockerコマンドを叩くplaybookを作成 ⇒ これは間違い
  • ssh経由でコンテナホスト上のplaybookを実行

(絵を描くよ! ⇒時間なかった(;´Д`))

6.実行結果

やってみた

7.おわりに

正直、使い方がわからねぇ!
きっと未だ見ぬペストプラクティスがあるはず!
Google探索の旅に出るね!

( ゚∀゚)ノシ