💡
この記事は Middleman 時代に書いた古いものです。記録のため、astro-notion-blog に移行していますが、あまり参考にしないでください。
docker のインストール (macOS側)
macOS で開発するだけであれば、Docker Desktop for Mac でも十分かもしれない。 ただし、運用までを Docker にするのであれば、最終運用環境と同じにしておいた方が無難だと考えた。 そこで、今回は前回説明した
📄
VMware Fusion - macOS アプリケーションナビ
にインストールした ubuntu で Docker を直接管理する。 ただし、コンテナの起動・停止などのために毎回 ubuntu にログインするのも面倒なので、macOS 側から直接実行できるようにしておきたい。 そこで、docker-machine を用いて、macOS 側から docker コマンドを実行できるように設定してみることにした。
-
システム自体は使わないのだが、コマンドは欲しいので、Docker for Mac をインストールする。 Brewfile に以下の行を追加した。
cask "docker"
-
brew コマンドでインストールする。
brew bundle
- アプリケーションフォルダにある Docker を一度だけ実行する。 メニューバーに Docker のクジラが表示されるので、Quit して終了しておく。
- ターミナルで docker とタイプして、コマンドの使い方が出れば、docker コマンドのインストールは成功である。
docker のインストール (ubuntu 側)
ubuntu 側にも docker をインストールする。また、docker-compose も一緒にインストールしておく。
-
ubuntu にログインする。
ssh (cat ~/.ubuntu_ip) # fish の場合 ssh `cat ~/.ubuntu_ip` # それ以外の場合
-
公式から docker の取得スクリプトをダウンロードする。
curl -fsSL https://get.docker.com -o get-docker.sh
-
このスクリプトを実行する
sh get-docker.sh
-
docker コマンドを一般ユーザで実行できるように、hkob を docker グループに入れる。 ただ、docker コンテナ内では root 権限を持ち、設定次第ではホスト側にアクセスも可能になるので、docker コマンドの取り扱いにはくれぐれも注意すること(よくわからない Dockerfile や docker-compose.yml は実行しないこと)。
sudo usermod -aG docker hkob
docker-machine の設定
次に docker-machine コマンドで ubuntu の設定をしておく。 この際、 汎用(generic)ドライバ を利用するのだが、設定時にのみパスワードのない sudo 権限が必要となる。 ドライバ設定時のみ NOPASSWD の設定を行うことにする。
-
ubuntu にログインする(上の続きであればログインした状態のままなのでスキップ)。
ssh (cat ~/.ubuntu_ip)
-
sudo visudo を実行し、次のようにパスワードなしで sudo できるようにする。
#%sudo ALL=(ALL:ALL) ALL # コメントにする %sudo ALL=(ALL) NOPASSWD:ALL
-
ついでに http_proxy, https_proxy の環境変数を sudo 時にも保持するように設定しておく。
Defaults env_keep += "http_proxy" Defaults env_keep += "https_proxy"
-
パスワードなしで sudo できることを確認する。また、http_proxy や https_proxy が保持されていることも確認する。
sudo env
-
ubuntu をログアウトする。
exit
-
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
-
docker-machine env ubuntu とすると、docker コマンドで参照すべきマシンの情報が環境変数として表示できる。私の場合は、fish を使っているので、次のようなエイリアスを .config/fish/config.fish に登録しておいた。また、--no-proxy を設定することで、ubuntu へのアクセスにプロキシを設定しないようになる。
alias dockerenv 'eval (docker-machine env ubuntu --shell fish --no-proxy)'
-
これにより、dockerenv とすることで、必要な環境変数が自動的に設定される。
dockerenv
-
これで、docker のコマンドを macOS 側で実行すると、自動的に ubuntu 側で実行される。
docker image ls -a # docker image の一覧を見る
-
また、docker-machine コマンドで ubuntu への ssh アクセスも可能になる。
docker-machine ssh ubuntu
-
ubuntu にログインしたので、忘れないうちに sudo visudo を実行の上、パスワードなし sudo を解除しておく。
%sudo ALL=(ALL:ALL) ALL