Macに素のDockerをHomebrewでインストールする

こんにちは、hachi8833です。アドベントカレンダー3日目です。

半年ほど前からなぜかDocker for Macが起動できなくなってしまい、issue #1760にも音沙汰がないので、仕方なく緊急避難として素のDockerをHomebrewでインストールしました。

本来なら正規版であるDocker for Macを使う一手なのですが、やむを得ずdocker-toolboxを使うことにしました。一応docker-toolboxは一応現在もメンテはされているようですが、条件を満たせないMac向けのソフトウェアなので、その点ご了承ください。

docker pullできるようにするのが目標です。

必要なもの

  • Mac OS X (High Sierra使用)
  • Homebrew — リンク先の「インストール」に貼ってあるシェルスクリプトでインストールできます
  • VirtualBoxbrew cask install virtualboxでインストールしました

コマンドはいずれもbash用です。

インストール手順

1. VirtualBoxとdocker-toolboxのインストール

  • caskでVirtualBoxとdocker-toolboxをインストールします。ハイフンをお忘れなく。
$ brew cask install virtualbox docker-toolbox

やってみると、docker-toolboxをインストールすればdocker本体やdocker-machine、docker-composeなども全部インストールされたので、brew install docker docker-machineは不要でした。いつの間にか随分楽になりました。

バージョンを確認しておきます。

$ docker --version
Docker version 17.10.0-ce, build f4ffd25
$ docker-compose --version
docker-compose version 1.16.1, build 6d1ac21
$ docker-machine --version
docker-machine version 0.13.0, build 9ba6da9

2. Docker-machineのセットアップ

HomebrewでDockerをインストールすると、brew servicesでdocker-machineを管理できます。

$ brew services list
Name           Status  User      Plist
postgresql     started hachi8833 /Users/hachi8833/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
docker-machine stopped
memcached      stopped
nginx          stopped
mysql          stopped
  • brew services start docker-machineを実行し、docker-machineを起動します。以後docker-machineは常駐します。

  • Dockerを初めて使う場合はVirtualBoxに仮想マシンを作成しておきます。名前は自由に付けられますが、ここではdefaultにしておきます。

$ docker-machine create --driver virtualbox default

docker-machine lsで仮想マシンが作成されたことを確認します。

$ docker-machine ls  # 仮想マシン一覧表示
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376           v17.10.0-ce

なお、この時点で仮想マシンにsshでログインすることもできます。

$ docker-machine ssh
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 17.10.0-ce, build HEAD : 34fe485 - Wed Oct 18 17:16:34 UTC 2017
Docker version 17.10.0-ce, build f4ffd25
docker@default:~$
  • 次のコマンドで、その仮想マシン用の環境変数を設定します。Dockerの利用頻度が高いのであれば、.bashrcに書いておくとよいでしょう。
eval $(docker-machine env)

おまけ1: docker pullしてみる

ここまで終わればdocker pullできるようになっているはずです。この間のPostgreSQL 10記事を元にPostgreSQL 10のDockerイメージをpullして動かしてみました。

$ docker pull postgres:10
$ docker run --name new-postgres -d postgres:10

以下でPostgreSQL 10にログインできます。

$ docker run -it --rm --link new-postgres:postgres postgres:10 psql -h postgres -U postgres

Dockerイメージとコンテナを表示してみます。

$ docker images  # イメージ一覧
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
postgres            10                  599272bf538f        13 days ago         287MB

$ docker ps -a   # コンテナ一覧(停止しているものも含む)
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
636a1f9212c0        postgres:10         "docker-entrypoint..."   About a minute ago   Up About a minute   5432/tcp            new-postgres

やっとDockerが帰ってきた…

おまけ2: イメージとコンテナを削除する

確認できたのでイメージとコンテナを削除します。

$ docker stop 636a1f9212c0  # コンテナを停止
$ docker rm 636a1f9212c0    # コンテナを削除
$ docker rmi postgres:10    # イメージを削除

イメージやコンテナ以外も全部きれいにしたいときは以下を実行します。

$ docker system prune

関連記事

Dockerでsupervisorを使う時によくハマる点まとめ

HomebrewからDockerにMySQL環境を移行する

[翻訳] Dockerについてよくある勘違い

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833、GitHub: @hachi8833

コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。
これまでにRuby on Rails チュートリアル第2版の半分ほど、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れてそれぞれ一部を翻訳。
かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。
実は最近Go言語が好き。
仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

BPSアドベントカレンダー

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ