- DevOptsが流行ってきて、ローカルでの開発や検証が多くなってきた
- Vagrant使い出したが、毎日Destroy→up(休憩時間)で効率わるい
- Dockerやりだした→便利すぐる→ちょっとミスったらrun・stop・run・stop・・・→docker ps -a、docker images→どれで何してたか覚えてないorz
ちょっとしたリリース手順やインストール手順の確認したい時用にこんな記事を見つけたので触ってみた
シェルスクリプトで書かれた軽量コンテナ MINCS がすばらしい
環境
- EC2 + RHEL7.1 + Root権限
(´・ω・`) AWS♪ root$ uname -r
3.10.0-229.11.1.el7.x86_64
(´・ω・`) AWS♪ root$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.1 (Maipo)
(´・ω・`) AWS♪ root$
ダウンロード
(´・ω・`) AWS♪ root$ git clone https://github.com/mhiramat/mincs.git
Cloning into 'mincs'...
remote: Counting objects: 572, done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 572 (delta 5), reused 0 (delta 0), pack-reused 559
Receiving objects: 100% (572/572), 81.82 KiB | 0 bytes/s, done.
Resolving deltas: 100% (344/344), done.
(´・ω・`) AWS♪ root$
実行
シェルスクリプトなので叩くだけ
(´・ω・`) AWS♪ root$ ./mincs/minc
(´・ω・`) AWS♪ root$
なにも変わってないようだけどコンテナ起動してログインしているし早い!!
環境は実行した環境そのまま引き継ぎで全ファイルもってきている
(´・ω・`) AWS♪ root$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 14:29 ? 00:00:00 /bin/bash -i
root 70 1 0 14:31 ? 00:00:00 ps -ef
(´・ω・`) AWS♪ root$ ls /proc/ |grep [0-9]
1
90
91
(´・ω・`) AWS♪ root$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.1 (Maipo)
(´・ω・`) AWS♪ root$ ls ~/git/mincs/
install.sh libexec LICENSE marten minc polecat README.md samples
(´・ω・`) AWS♪ root$
コンテナ内なので何しても残らない
(´・ω・`) AWS♪ root$ yum install -y httpd
(´・ω・`) AWS♪ root$ rpm -qa httpd
httpd-2.4.6-31.el7_1.1.x86_64
(´・ω・`) AWS♪ root$ which httpd
/sbin/httpd
(´・ω・`) AWS♪ root$
(´・ω・`) AWS♪ root$ exit # ホストに戻る
exit
(´・ω・`) AWS♪ root$ rpm -qa httpd
(´・ω・`) AWS♪ root$ which httpd
/usr/bin/which: no httpd in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/go/bin:/root/bin)
٩(๑òωó๑)۶ AWSだお root$ # ホスト側には残らない
環境を全部引き継いでくれることが一番うれしい!
/から全部マウントした環境なので、ローカルインストールしていたエディタやコンパイラの設定などもそのまま引き継ぐので、コンパイルはMINCS上でやればローカル汚れないし、いちいち設定修正する度にDocker commitしまくってどれが何?状態にならない
(´・ω・`) AWS♪ root$ go version
go version go1.5.1 linux/amd64
(´・ω・`) AWS♪ root$ ./mincs/minc
(´・ω・`) AWS♪ root$ go version
go version go1.5.1 linux/amd64
(´・ω・`) AWS♪ root$
保存したいとき
(´・ω・`) AWS♪ root$ ./mincs/minc
(´・ω・`) AWS♪ root$ export PS1='MINC コンテナ上$ ' # わかりやすくするため
MINC コンテナ上$
MINC コンテナ上$ yum install -y httpd
MINC コンテナ上$ ll /etc/httpd/
total 4
drwxr-xr-x. 2 root root 35 Sep 14 15:05 conf
drwxr-xr-x. 2 root root 78 Sep 14 15:05 conf.d
drwxr-xr-x. 2 root root 4096 Sep 14 15:05 conf.modules.d
lrwxrwxrwx. 1 root root 19 Sep 14 15:05 logs -> ../../var/log/httpd
lrwxrwxrwx. 1 root root 29 Sep 14 15:05 modules -> ../../usr/lib64/httpd/modules
lrwxrwxrwx. 1 root root 10 Sep 14 15:05 run -> /run/httpd
MINC コンテナ上$
実際にはホスト上の/tmp/mincxxxx/storage/をマウントしている
(´・ω・`) AWS♪ root$ export PS1='EC2のホスト$ ' # わかりやすくするため
EC2のホスト$ ll /tmp/minc3093-5ldwq6/storage/etc/httpd/
total 8
drwxr-xr-x. 5 root root 86 Sep 14 15:05 .
drwxr-xr-x. 6 root root 4096 Sep 14 15:05 ..
drwxr-xr-x. 2 root root 35 Sep 14 15:05 conf
drwxr-xr-x. 2 root root 78 Sep 14 15:05 conf.d
drwxr-xr-x. 2 root root 4096 Sep 14 15:05 conf.modules.d
lrwxrwxrwx. 1 root root 19 Sep 14 15:05 logs -> ../../var/log/httpd
lrwxrwxrwx. 1 root root 29 Sep 14 15:05 modules -> ../../usr/lib64/httpd/modules
lrwxrwxrwx. 1 root root 10 Sep 14 15:05 run -> /run/httpd
EC2のホスト$
mincxxxx 配下をそのままコピる
EC2のホスト$ rsync -a /tmp/minc3093-5ldwq6/* ~/httpdインストールしたやつ
-t でマウント先を指定してmincを起動
EC2のホスト$ ./mincs/minc -t ~/httpdインストールしたやつ
(´・ω・`) AWS♪ root$ ll /etc/httpd/
total 4
drwxr-xr-x. 2 root root 35 Sep 14 15:05 conf
drwxr-xr-x. 2 root root 78 Sep 14 15:05 conf.d
drwxr-xr-x. 2 root root 4096 Sep 14 15:05 conf.modules.d
lrwxrwxrwx. 1 root root 19 Sep 14 15:05 logs -> ../../var/log/httpd
lrwxrwxrwx. 1 root root 29 Sep 14 15:05 modules -> ../../usr/lib64/httpd/modules
lrwxrwxrwx. 1 root root 10 Sep 14 15:05 run -> /run/httpd
(´・ω・`) AWS♪ root$
いろいろ応用は効きそう