Docker - macOS アプリケーションナビ

macOSAppNavi docker VMware 2019年 7月 8日

docker のインストール (macOS側)

macOS で開発するだけであれば、Docker Desktop for Mac でも十分かもしれない。 ただし、運用までを Docker にするのであれば、最終運用環境と同じにしておいた方が無難だと考えた。 そこで、今回は 前回説明した VMware Fusion にインストールした ubuntu で Docker を直接管理する。 ただし、コンテナの起動・停止などのために毎回 ubuntu にログインするのも面倒なので、macOS 側から直接実行できるようにしておきたい。 そこで、docker-machine を用いて、macOS 側から docker コマンドを実行できるように設定してみることにした。

  1. システム自体は使わないのだが、コマンドは欲しいので、Docker for Mac をインストールする。 Brewfile に以下の行を追加した。
    cask "docker"
  2. brew コマンドでインストールする。
    brew bundle
  3. アプリケーションフォルダにある Docker を一度だけ実行する。 メニューバーに Docker のクジラが表示されるので、Quit して終了しておく。
  4. ターミナルで docker とタイプして、コマンドの使い方が出れば、docker コマンドのインストールは成功である。

docker のインストール (ubuntu 側)

ubuntu 側にも docker をインストールする。また、docker-compose も一緒にインストールしておく。

  1. ubuntu にログインする。
    ssh (cat ~/.ubuntu_ip) # fish の場合
    ssh `cat ~/.ubuntu_ip` # それ以外の場合
  2. 公式から docker の取得スクリプトをダウンロードする。
    curl -fsSL https://get.docker.com -o get-docker.sh
  3. このスクリプトを実行する
    sh get-docker.sh
  4. docker コマンドを一般ユーザで実行できるように、hkob を docker グループに入れる。 ただ、docker コンテナ内では root 権限を持ち、設定次第ではホスト側にアクセスも可能になるので、docker コマンドの取り扱いにはくれぐれも注意すること(よくわからない Dockerfile や docker-compose.yml は実行しないこと)。
    sudo usermod -aG docker hkob

docker-machine の設定

次に docker-machine コマンドで ubuntu の設定をしておく。 この際、 汎用(generic)ドライバ を利用するのだが、設定時にのみパスワードのない sudo 権限が必要となる。 ドライバ設定時のみ NOPASSWD の設定を行うことにする。

  1. ubuntu にログインする(上の続きであればログインした状態のままなのでスキップ)。
    ssh (cat ~/.ubuntu_ip)
  2. sudo visudo を実行し、次のようにパスワードなしで sudo できるようにする。
    #%sudo  ALL=(ALL:ALL) ALL # コメントにする
    %sudo ALL=(ALL) NOPASSWD:ALL
  3. ついでに http_proxy, https_proxy の環境変数を sudo 時にも保持するように設定しておく。
    Defaults        env_keep += "http_proxy"
    Defaults        env_keep += "https_proxy"
  4. パスワードなしで sudo できることを確認する。また、http_proxy や https_proxy が保持されていることも確認する。
    sudo env
  5. ubuntu をログアウトする。
    exit
  6. docker-machine で ubuntu の設定を追加する。これで ubuntu という名前の docker-machine が作成できる。
    docker-machine create --driver generic --generic-ssh-user=hkob --generic-ip-address=(cat ~/.ubuntu_ip) --generic-ssh-key=$HOME/.ssh/id_rsa ubuntu
  7. docker-machine env ubuntu とすると、docker コマンドで参照すべきマシンの情報が環境変数として表示できる。私の場合は、fish を使っているので、次のようなエイリアスを .config/fish/config.fish に登録しておいた。また、--no-proxy を設定することで、ubuntu へのアクセスにプロキシを設定しないようになる。
    alias dockerenv 'eval (docker-machine env ubuntu --shell fish --no-proxy)'
  8. これにより、dockerenv とすることで、必要な環境変数が自動的に設定される。
    dockerenv
  9. これで、docker のコマンドを macOS 側で実行すると、自動的に ubuntu 側で実行される。
    docker image ls -a # docker image の一覧を見る
  10. また、docker-machine コマンドで ubuntu への ssh アクセスも可能になる。
    docker-machine ssh ubuntu
  11. ubuntu にログインしたので、忘れないうちに sudo visudo を実行の上、パスワードなし sudo を解除しておく。
    %sudo  ALL=(ALL:ALL) ALL