Tech Racho エンジニアの「?」を「!」に。
  • 開発

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

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

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

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

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

追伸: MacbookをクリーンインストールしたらDocker for Macを正常にインストールできました。

必要なもの

  • Mac OS X (High Sierra使用)
  • Homebrew -- リンク先の「インストール」に貼ってあるシェルスクリプトでインストールできます
  • VirtualBox -- brew 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についてよくある勘違い


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。