MacにDockerをインストール

PHP5とPHP7開発環境の同時構築を切っ掛けに、Dockerを使い始めたのですが、その便利さと手軽さから手を放せなくなってしまいました。

Dockerは非常に軽量なコンテナ型の仮想化環境です。

仮想化環境といえば、ハイパーバイザ型(Hyper-V等)やホスト型(VMware PlayerやVirtualBox等)もありますが、これらの仮想化方法だとそれぞれ独立したOS環境を丸ごと構築することになるため、オーバーヘッドが大きく、リソースも無駄に多く必要になります。

コンテナ型の仮想化環境の場合は、Linuxカーネルが持つコンテナ機能を使って、実行環境を他のプロセスから隔離し、最終的なアプリケーションはホストOS上の1つのプロセスとして実行されているため、余計なオーバーヘッドが発生しません。

開発環境の仮想化というとVargrant/VirtualBoxの組み合わせも挙げられますが、最近はDockerに遥かに圧倒されています。

本記事ではMac OSにDockerをインストールする方法を説明します。
最新の英語版インストールガイドは 公式サイト を参照してください。

インストール

Docker for Macの入手

Docker for Mac から最新版のバイナリファイル Docker.dmg をダウンロードします。

インストーラーの起動

ダウンロードしたdmgファイルを起動して、DockerをApplication フォルダにドラッグアンドドロップします。

初回起動

Application ディレクトリにあるDockerアプリケーションをダブルクリックします。

インストールの確認

以下のコマンドでDockerのバージョンを確認します。

$ docker --version
Docker version 17.03.1-ce, build c6d412e

$ docker-compose --version
docker-compose version 1.11.2, build dfed245

$ docker-machine --version
docker-machine version 0.10.0, build 76ed2a6

イメージ確認

取得済みのイメージは docker images で確認できます。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              0ef2e08ed3fa        5 weeks ago         130 MB
hello-world         latest              48b5124b2768        2 months ago        1.84 kB

コンテナ起動

コンテナの作成と実行

docker run でコンテナを作成して実行します。

$ docker run --name nginx -d -p 8080:80 nginx:latest

コンテナにログイン

$ docker run -it nginx bash

ipコマンドでip確認

$ ip -f inet addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
37: eth0@if38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    inet 172.17.0.3/16 scope global eth0
       valid_lft forever preferred_lft forever

コンテナの停止

$ docker stop nginx

コンテナの再実行

終了したコンテナを再度実行します。

$ docker start nginx

コンテナとイメージ削除

コンテナの削除

終了したコンテナを削除します。

$ docker rm nginx

Docker イメージの削除

不要な Docker イメージを削除します。

$ docker rmi nginx:latest

次の記事 Dockerコマンドまとめ ではDockerでよく使うコマンドを整理しておきます。