ハトネコエ Web がくしゅうちょう

プログラミングとかAndroid

はじめて Docker を使ったので使い方メモ

wercker で使うために Docker を初めて使ってみました。

参考にしたサイト :
今更始めるDocker on Mac、今更覚えるDockerコマンド - 病みつきエンジニアブログ
Docker Machineの作成 - Qiita

1. Docker Toolbox をインストール

brew install Caskroom/cask/docker-toolbox

Docker Toolbox をインストール。

brew install docker ではなく、上記の全部入りパッケージをインストールするのが良さそう。

これで docker コマンドであれこれ出来るようになるのかと思いきや、
このままではまだ Cannot connect to the Docker daemon. Is the docker daemon running on this host? というエラーメッセージが出るだけですので、
まずは仮想環境の設定から始めます。

2. docker コマンドが使えるようになるまで

docker-machine create --driver virtualbox docker-linux

今回は docker-linux という名前のマシン名にしましたが、ここはお好きなように。
VirtualBoxのマシン名一覧がカオスにならないよう docker-*** みたいな名前つけるのがおすすめかな)

docker-machine start docker-linux

これで仮想環境が起動されました。

起動された仮想環境の設定を見ます。

docker-machine env docker-linux

私の環境では以下のように出力されました。

export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/nekonenene/.docker/machine/machines/docker-linux"
export DOCKER_MACHINE_NAME="docker-linux"
# Run this command to configure your shell:
# eval $(docker-machine env docker-linux)

言われたように

eval $(docker-machine env docker-linux)

コマンドを実行し、環境変数を設定してあげます。

これで docker コマンドは動くようになったはずですから

docker images

とコマンドを打ってみます。
今は何も Docker イメージをダウンロードしていないので、以下の1行だけが表示されます。

REPOSITORY   TAG       IMAGE ID      CREATED       SIZE  

3. Docker へのログイン

Docker のアカウントを取得したら、docker login コマンドでログインします。
これをしないと docker pull などがおこなえません。

docker login

ユーザーネームとパスワードが聞かれますので、登録通りに入力します。

ログイン作業が完了したら、

docker run -it hello-world

で、動作確認用の Docker イメージをダウンロードし実行してみます。

しばらく待ち、(自動的に docker pull hello-world:latest がおこなわれたのち)

Hello from Docker!
This message shows that your installation appears to be working correctly.

とメッセージが出てきて成功です。

docker images

とコマンドを打つと、以下のように Docker イメージがダウンロードされたことが確認できます。

REPOSITORY   TAG       IMAGE ID      CREATED       SIZE  
hello-world  latest    c54a2cc56cbb  7 weeks ago   1.848 kB

4. Ubuntu trusty を入れてみる

Docker Hub には、さまざまな Docker イメージがあります。
あなたが Docker Cloud にパブリックで置いたものも、自動的にここで公開されています。

さて、今回は Ubuntu の公式リポジトリ を見てみましょう。

f:id:nekonenene:20160823044439p:plain

ここに書かれている 14.04trustylatest などはすべてタグの名前です。

docker pull の際、リポジトリ名だけでなくタグ名も指定できます。
ですから、Ubuntutrusty タグの Docker イメージを入れて実行する際は、

docker run -it ubuntu:trusty

とコマンドを打ちます。

これは docker run -it ubuntu:14.04 とコマンドを打つ場合と同じだと、
上の写真からわかりますね。

5. Docker イメージの削除

いろいろ入れたあとで docker images を打ってみます。

REPOSITORY     TAG     IMAGE ID      CREATED       SIZE
node           latest  800da22d0e7b  6 days ago    651.4 MB
ubuntu         latest  f8d79ba03c00  11 days ago   126.4 MB
ubuntu         trusty  ff6011336327  11 days ago   188 MB
hello-world    latest  c54a2cc56cbb  7 weeks ago   1.848 kB

このなかの node:latest と ubuntu:latest を削除したくなったとします。

そのときは docker rmi コマンドを使います。

docker rmi -f 800da22d0e7b f8d79ba03c00

そのときに IMAGE ID を使うのですが、
実はこれは完全に記述する必要はありません。

一意に定まるのであれば

docker rmi -f 800 f8d

のようにコマンドしてもしっかり消えてくれます。

6. Dockerfile からのビルド

Dockerfile は例えば以下のように書きます。

文字コードの設定方法に関して、こちら↓の記事にお世話になりました。
Docker: コンテナのlocaleを設定したい - Qiita

で、こう作った Dockerfile からイメージを作成するコマンドは、例えば以下のような感じ。

この Dockerfile が現在いるディレクトリから見て、config というフォルダの下に入っている場合、

docker build -t my-docker-image-name:v1.0 ./config

ここで気を付けるのが、指定するのは ./config/Dockerfile と、Dockerfile のファイル名まででなく、Dockerfile があるディレクトリ名までを書くことです。

ファイル名まで書いてしまうと
unable to prepare context: context must be a directory: とエラーメッセージが出て怒られます。

それから、ビルドが始まるまではけっこう時間がかかりますのでその点もお気をつけて。
何も表示が出ないから動いてないんじゃないかと心配になりますが、1分くらい待つと表示が始まります。