Memento memo.

Today I Learned.

プログラマのためのDocker教科書を読み始めた

Dockerを使いこなせないと会社で人権がないので プログラマのためのDocker教科書を読み始めました。

プログラマのための、というタイトルから、 "Dockerの使い方だけ紹介" みたいな雰囲気があるんですが、 想定以上に諸々しっかり書いてありました。

序盤にインフラ・仮想化・コンテナ技術の歴史と概要についてしっかり書かれていて、 非常に参考になりました。定期的に読み直したい内容です。

以下、適当にDocker周りの備忘録を適当にまとめていきます。

Docker の Install(Mac

Docker for Macがリリースされているのでこちらを使います。 (数ヶ月前にちょっと触った時はまだプライベートベータでした)

$ brew update && brew upgrade
$ brew cask install docker

あとは適当にDocker.appでsetupします。

いろいろ試す

docker pull

超軽量Linux Distributionの"Alpine Linux"を使います。

とりあえず docker search してみます。

$ docker search alpine
NAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
alpine                         A minimal Docker image based on Alpine Lin...   1475      [OK]
anapsix/alpine-java            Oracle Java 8 (and 7) with GLIBC 2.23 over...   151                  [OK]
...

docker pull でイメージを落とします

$ docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
c0cb142e4345: Pull complete
Digest: sha256:ca7b185775966003d38ccbd9bba822fb570766e4bb69292ac23490f36f8a742e
Status: Downloaded newer image for alpine:latest

Imageの確認

docker images で一覧確認します。

$ docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
rails                 latest              9df3ff98cd15        9 days ago          840.6 MB
nginx                 latest              ba6bed934df2        2 weeks ago         181.4 MB
alpine                latest              ee4603260daa        2 weeks ago         4.803 MB
msaraiva/elixir-dev   latest              6287638223f3        3 months ago        52.54 MB

いろいろ試しに入れてたので余計なものも出てきてますが、alpineのdocker imageだけ圧倒的に軽いですね。

個別に中身を見たい場合は inspect を使います

$ docker inspect alpine
...
     "Architecture": "amd64",
        "Os": "linux",
        "Size": 4802964,
        "VirtualSize": 4802964,
...

hello world

基本型は

docker run <dockerイメージ名> <コマンド>

です。

$ docker run alpine /bin/echo 'hello world'
hello world

dockerイメージがローカルに見つからなければ勝手にpullしてくれます。

tag

イメージにtagを付けて管理することができます。

$ docker tag alpine:latest shotat/alpine:foo
$ docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
alpine                latest              ee4603260daa        2 weeks ago         4.803 MB
shotat/alpine         foo                 ee4603260daa        2 weeks ago         4.803 MB

コンテナのshellを起動する

単体でshellを起動したい場合は以下のようなコマンドを使います。

$ docker run -it --rm alpine /bin/sh
オプションについて

-it --rm のオプションを見ていきます。

$ docker run --help | grep -E '(?:--tty|--interactive|--rm)'
  -i, --interactive                 Keep STDIN open even if not attached
      --rm                          Automatically remove the container when it exits
  -t, --tty                         Allocate a pseudo-TTY
  • -i : 標準入力を開く
  • -t : 疑似ttyを割り当てる
  • --rm : exit後にコンテナを破棄する

-it を付けないと対話shellをうまく扱えないので必ずつけましょう。 /bin/echo 'hoge' みたいなことしかしない場合は不要です。

マスコットキャラクターの名前

Dockerのクジラのキャラクターの本名は "Moby Dock" というそうです。

白鯨 - Moby-Dick; or The White Whale - を文字ってるみたいですね。( 白鯨 - Wikipedia

blog.docker.com