大学院生Macユーザーへ Dockerの勧め
最近研究でDockerを使うようになり、Linuxサーバー上で実行環境を作成するなどしていました。
使っているうちに「Docker面白いな」と感じたので手持ちのMac上でも使えるようにして詳しくなりたいと思った次第です。
Dockerとはなんぞ。
qiita.com
色々なサイトで紹介されています。上記のサイトは余計な絵が少なくておすすめ。
筆者はDockerを環境構築をサボれるツールだと考えています。
「全く同じ開発環境(Docker image)をどのマシンでも使うことができる。」
これはチームでの開発はもちろんですが、理系大学院生にとって後輩への引継ぎ、指導が楽になることを意味します。
研究室で必要なツールを1から後輩のPCにインストールするとなると指導や質問対応に多くの時間を割かねばなりません。
それはそれぞれのPCの環境(OSやバージョン)が異なることが大きな理由の一つです。
特にMacユーザーの私がプログラミングの講習会をする際には、Windowsユーザーのことも考える必要がありました。
手元の動かせるWindowsマシンで環境構築を試さなければなりません。
Dockerを導入すれば同一の開発環境をWindowsでもmacOSでも準備できます。
今回はまず、MacOSへの導入についてです。
Dockerの導入
まずはmacOSにインストール。
環境はこちらの記事を参照。今回もHomebrewを使います。
salt22g.hatenablog.jp
% brew install docker % brew cask install docker
インストールできたか確認。
% docker --version Docker version 19.03.8, build afacb8b
Dockerの主なコマンドはこちらのサイトによくまとまっています。
qiita.com
Docker imageを作成、起動
今回作ったDocker imageについては後日詳しくお話しします。
Dockerfileの作り方についてもこのブログで公開する予定です。
Dockerfileを作成したフォルダに移動して
% docker build -t <イメージ名> .
イメージが作成できているか確認してみましょう。
% docker images REPOSITORY TAG IMAGE ID CREATED SIZE 自分が作ったイメージ名 latest イメージID 作成された時刻 ファイルサイズ ubuntu 18.04 c3c304cb4f22 2 weeks ago 64.2MB
自分が作ったイメージの名前が表示されればOKです。
早速起動しましょう。
% docker run -it <イメージ名> [root@8fc1f79b0233] /workspace
docker runには様々なoptionがあるのでそれはまたどこかで…
自分のイメージをDockerhubにpush
Docker hub
作成したimageをクラウド上で管理するのがDocker hubです。
他の人が作ったimageはもちろん。公式imageも掲載されています。
今回は筆者が作ったimageをpushしてみます。
アカウントを作成
hub.docker.com
予めdockerhubでリポジトリを作成。
% docker tag <ビルドしたimageの名前> <DockerhubのユーザID>/<さっきDockerhubで作ったリポジトリ名>:<tag名(latestとするのが一般的)>
% docker login -p="Dockerhubのパスワード" -u="Dockerhubのユーザー名" WARNING! Using --password via the CLI is insecure. Use --password-stdin. Login Succeeded
なんかWARNINGが出たけれど無視。
Login Succeededが出ればOK。
docker push salt22g/docker-rpg:latest
GUIを使ってみる
まずはsocatをインストール。
brew install socat
XQuartzもインストール。
salt22g.hatenablog.jp
この記事でも紹介したソフトです。
sshで接続した先の画像やGUIを取得するサーバーみたいなものです(多分)
brew install caskroom/cask/brew-cask brew cask install xquartz open -a XQuartz #普通にlaunchpadから起動してもOK
Docker側から見たMac(hostマシーン)のIPアドレスを取得。
ifconfig en0 | grep inet | awk '$1=="inet" {print $2}' xxx.xxx.xxx.xxx #ipアドレス
socatを起動。
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
ターミナルから返答がないはずなので別ターミナルからdockerを以下のオプション付きで起動。
docker run -it <イメージ名>-e DISPLAY="xxx.xxx.xxx.xxx:0"
dockerコンテナ内で作成したグラフが表示できるか見てみましょう。
後輩や部下の環境構築に困っている方々いかがでしょう。