Skip to content

Instantly share code, notes, and snippets.

@yano3nora
Created May 5, 2023 07:38
Show Gist options
  • Save yano3nora/c8cac454a5f376da1ce7a753d9f9a1c7 to your computer and use it in GitHub Desktop.
Save yano3nora/c8cac454a5f376da1ce7a753d9f9a1c7 to your computer and use it in GitHub Desktop.
[dev: VirtualBox x Docker] old ref. #dev

Docker Toolbox for Windows / Mac OS

Docker Toolbox
Docker ToolBox の使い方
Dockerにホストのフォルダをマウントしたい!

内部的に VirtualBox を利用して Linux OS な VM を建てて Windows や Mac 環境で Docker ツール一式を利用可能にする。複数コンテナ管理のための docker-compose など必要なパッケージが一通り揃っている。

  1. インストーラ 実行
    • Select Components にて Git for Windows や Kitematic など不要なものをチェックアウト
    • VirtualBox は Docker Toolbox とバージョンを合わせる都合上既存のを一度削除してこのインストールで入れ直す
  2. 環境変数設定
    1. win → env → 環境変数を設定
    2. ユーザ環境変数の以下を調整
      • 変数名: COMPOSE_CONVERT_WINDOWS_PATHS
      • 値: 1
    3. PC 再起動
  3. Docker ホスト VM ( docker-machine ) 構築
    • Windows メニューより Docker Quickstart Terminal を起動
    • Docker ホストの IP は開発時にアクセスするのでメモ
      • デフォルト: 192.168.99.100
  4. Windows と Docker ホスト VM の同期設定 ( デフォルト C:\\User )
    1. VM を docker-machine stop で停止
    2. VirtualBox の「設定 → 共有フォルダー」よりディレクトリ設定
      • パス: マウントさせる Windows ディレクトリ ( e.g. D:\ )
      • フォルダ名: Docker ホスト上のディレクトリ名 ( e.g d )
      • パス / フォルダ名は少しでも間違うとマウントされないので注意
      • Windows で C:\\User 以外を同期する場合は 必ずルートディレクトリ c や d をマウントしないと相対パス解決できないっぽい ので注意
  5. PC 再起動 → docker-machine start で Docker ホスト VM 起動

上記設定では、Docker ホストのファイルシステム上の /d ディレクトリに Windows マシンの D:\ 配下がマウントされ、docker コンテナ内から参照・同期が可能になる。

Control Docker host by docker-machine command

Docker Toolbox では docker-machine ツールにより VirtualBox 内に Docker ホスト VM を構築している。なんかおかしくなったら Docker ホスト再起動したり、rm → create で作り直してもよい。

$ docker-machine ls
> NAME      ACTIVE   DRIVER       STATE    URL
> default   *        virtualbox   Running  tcp://192.168.99.100:2376

# SSH でログインする場合は以下
$ ssh -i ~/.docker/machine/machines/default/id_rsa [email protected]

$ docker-machine ssh default      # SSH ログイン ( 簡易版 )
$ docker-machine stop default     # 停止
$ docker-machine start default    # 起動
$ docker-machine restart default  # 再起動
$ docker-machine rm default       # 削除
$ docker-machine create default   # 新規作成

Docker ホスト VM の CPU / Memory 構成変更

Docker for Windows の Docker ホストは VirtualBox で作成した VM なので、CPU やメモリなどハードウェア構成は当然 VirtualBox から行う。

# VM 名が default のとき ...
$ docker-machine stop
$ VBoxManage modifyvm default --cpus 2
$ VBoxManage modifyvm default --memory 4096
$ docker-machine start

VBoxManage.exe: error: Code E_FAIL (0x80004005) - Unspecified error

docker-machine start 時に、Docker Toolbox 側 ( docker-machine ) からは VM が終了してるから起動しようとしているのに、VirtualBox 側からは当該 VM は既に起動していると判定されて起きるエラーっぽい。

VirtualBox さんこの VM 起動/停止判定ずっとバグってるよね ... ? VirtualBox の GUI から当該 VM ( default とか ) を停止させてから docker-machine start したら動いた。

DNS 関連のエラー

dockerでsearchまたはpullした時に名前解決が出来ないエラー

Docker ホスト VM ( docker-machine ) の DNS 参照先が古く、Heroku で Docker アプリをリリースする際に AWS の S3 などに名前解決ができないケースがあった。ホスト側の DNS サーバ参照先を Google 提供の 8.8.8.8 などへ変更することで解決した。

# heroku container:push など内部で Docker ホストの
# docker コマンドを利用するコマンドを実行したところエラー
# ※ 直前まで AWS にて DNS 解決不具合の Issue が立っていた
#
> Head https://xxxx: dial tcp: lookup xxxx on 10.0.2.3:53: server misbehaving
> !    Error: docker push exited with Error: 1

# docker-machine へ ssh して resolv.conf を確認
#
$ docker-machine ssh default
$ cat /etc/resolv.conf
> nameserver 10.0.2.3

# root 権限で DNS サーバ参照先を変更
#
$ sudo su
$ vi /etc/resolv.conf
> nameserver 8.8.8.8
$ exit

# エラーが起きたコマンドを再実行するとちゃんと名前解決できた
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment