はじめに
飲み会の帰り道でころんだときにぶつけた頭が未だ痛い今日このごろ。転ぶほど呑んではいけません。
この記事の目的は、乱立するDockerコンテナを整理するコンテナパースを手に入れようとするものです。Dockerの扱い方やDockerfileの作り方を説明したものではありません。
増え続けるDockerコンテナ
本番環境を模してテスト環境を作るときは、下の2つに切り分けておくのが良いのではないかなと個人的には思います。
- 仕様上大きく変わることが考えにくい固定的なもの(ミドルウェアやサーバ構成)
- テストしたりコーディングしたりして、どんどん変わる流動的なもの(DBの中身やソースコード)
前者は皆で足並みを揃えるもの、後者は各人で管理すべきもの。(後者のソースコードも皆で足並みを揃えないといけないですが……)
さらにGitで管理できれば尚良し、ということで登場するのがDocker。
DockerいいよDocker。SVNよりもGitがいいよGit。サクッとお試しできてサクッと潰せる環境。良い……
収拾がつかなくなってきた
かっこよさげに持論を展開したものの、私は本質的にいい加減で適当な生物です。作っては潰し、作っては潰し、ふとコンテナの沼に沈んでいる自分に気が付きます。
果たして今動かしておくべきコンテナはどれか?そもそも動かした目的がわからないコンテナが動いている…… 以前に似たようなコンテナを作ったような気がするけど、その後どうしたっけ?などなど
全ての元凶は、自分がちゃんと片付けずに放ったらかしたから。
対策
さてここからが本題です。おまたせしました。
片付けられないなら管理してもらおう(安直)
何でも人任せは良くないし、どこかの誰かさんも自分のオールは他の人に任せるなとか言っていた気がしますが、好奇心には勝てなかったよ。世の中はとてもありがたいもので、コンテナを管理する仕組みというものを整えていただけている。きっと皆様もコンテナの沼で苦しんでいたんだと思います。
これは使ってみなければ!港湾施設の近くに住んでいた身としては大変馴染み深いガントリークレーンがオサレ。で、Swarmクラスタとは?とりあえず頭の片隅に留めておきます。
導入方法
駆け足でGo! 公式を参考にします。ちなみに英語の読解力はへっぽこです。
公式曰く
$ docker volume create portainer_data
$ docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
Dockerコンテナを管理するためにDockerコンテナを使うとは、妙な感じがしますが続行します。
なお、-v /var/run/docker.sock:/var/run/docker.sock
はLinux環境でのみ必要とのこと。また、自分自身のブラウザからこんにちはするだけなら、8000番のポート指定も要らないようです。
ボリュームは作る必要あるのかな?余計なものは作りたくないので、試しに作らずに行ってみましょう。だめなら作ればいいや。
で、毎度毎度コマンドを打つのは面倒です。私の性格上、多分ミスる。
Docker Compose先生、出番です。
(最終的な状態です。)
version: '2'
services:
portainer:
image: portainer/portainer
ports:
- 9000:9000
volumes:
- /var/run/docker.sock:/var/run/docker.sock
こんな感じでしょうか。
いざ!実行
docker-compose up
ぽちっとな。
\(^o^)/
まずはユーザを作れということですね。いじっていきましょう。
なん…だと…!?
あぁ、ターミナルで何故かCtrl+Cしてました。焦った。
何かいろいろ出てきましたが、今必要なのはLocal。
何か興味深い妙なものが出てますがConnect。
ですよね〜 うん知ってた。ちゃんと注意が表示されてましたもの。
yamlファイルに追記して、再チャレンジ。
散らかしすぎ!ボリュームが51個とはさすがに作りすぎ。
まとめ
視覚的にまとめてくれるっていうのはかなり便利ですね。いじってみて気に入ったらデーモンで実行しておこう。
余談
Dockerはちょくちょくアップデートしておきましょう。肝心なときにアップデートをが走ってしまって、しょんぼりします。
docker-compose.yamlでポートを指定するときは、ホスト:コンテナの順で指定する。逆に勘違いしていて、かなり悩んだ。