参考リンク
alpine とは
色々docker情報を漁っていると出てくるalpine
だが、組み込み系でよく使われているBusyBoxをベースにしたLinuxディストリビューションの一種で、別にDocker専用の何かではない。(ちなみにjessie
やstretch
はDebianのバージョン名になる。)
特徴としては、とても小さいパッケージで、数MBぐらいらしいので、気軽にポンポンとコンテナ立ち上げてもリソース的に困らないので、みんな使っている。ベースとなるホストのディストリビューションと異なっても基本的に問題ないらしい。
ただし、立ち上げたalpineコンテナ内で、マイナーライブラリをビルド&導入は難しいかもしれない。(極限までファイルをそぎ落としているので)あくまで動作させたいミドルウェアを起動すための基盤だと割り切ったほうがいい。
とりあえずコンテナOSを使ってみる
- alpineイメージの取得~コンテナ実行
まず最新版イメージを取得する。
> docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
bdf0201b3a05: Pull complete
Digest: sha256:28ef97b8686a0b5399129e9b763d5b7e5ff03576aa5580d6f4182a49c5fe1913
Status: Downloaded newer image for alpine:latest
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest cdf98d1859c1 11 days ago 5.53MB
次にコンテナを生成する。基本オプションは以下の通りで、大抵のコンテナはずっとバックグラウンドで起動していたいはずなので、以下のオプションはほぼデフォルトになる。
オプション | 内容 |
---|---|
--name | 展開するコンテナに名前を付ける |
-it | コンテナのプロセスにttyを割り当てる |
-d | バックグラウンド実行 |
コマンドの最後にbin/sh
を指定してシェルを起動する。するとコマンドは、バックグラウンド指定しているので、すぐに終了してしまう。docker ps -a
で確認すると、ちゃんとバックグラウンドで起動中であることが分かる。
> docker run -it -d --name alpine01 alpine
27f83d80803157119f9848489560aa1d716828aba295ebb0c9483d63df467d18
> docker ps -a
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
27f83d808031 alpine "/bin/sh" 26 seconds ago Up 25 seconds alpine01
バックグラウンドで起動しているalpineに対してシェルを-it
オプション付きで実行すると、コンテナ内にログインしたような感じになる。
exit
でホストOSに戻ることができる。この後でプロセスを確認すると、まだalpine01が起動中であることが分かる。alpineのOS上で動作するシェルを実行しているだけで、exitして終了したのはシェルだけということになる。
> docker exec -it alpine01 /bin/sh
/ # ls /etc
ls /etc
TZ group logrotate.d network profile.d shells
alpine-release hostname modprobe.d opt protocols ssl
apk hosts modules os-release resolv.conf sysctl.conf
conf.d init.d modules-load.d passwd securetty sysctl.d
crontabs inittab motd periodic services udhcpd.conf
fstab issue mtab profile shadow
/ # exit
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
27f83d808031 alpine "bin/sh" 13 minutes ago Up 4 minutes alpine01
似たような操作でdocker attach
コマンドがある。こちらでもコンテナの中に入る?ことができる。ただし、exitしたあとにdocker ps -a
で確認すると、コンテナが停止状態(Exited)になっている。アタッチはOSコンテナそのものへ接続して、それをexitするのだから停止状態?と理解している。
> docker attach alpine01
/ # cd /home
/home # ls
/home # echo "hello" > hoge
/home # cat hoge
hello
/home # pwd
/home
/home # ls
hoge
/home # exit
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
27f83d808031 alpine "/bin/sh" 20 minutes ago Exited (0) 4 seconds ago alpine01
停止したalpineを起動する場合は、docker start
を使う。
> docker start alpine01
alpine01
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
27f83d808031 alpine "/bin/sh" 26 minutes ago Up About a minute alpine01