Palmsonntagmorgen

NGSデータを使った解析と、その周辺。

【Win】【Mac】【Linux】Dockerのインストール 【2019年7月現在】

Dockerベースで提供されるパッケージの割合が目に見えて増えてきたように感じるので、簡単なまとめ。

Dockerとは

Dockerとはマシン上に違うマシンを立ち上げるための仮想化技術です。 WindowsMac上でLinux環境を立ち上げたり、Linux上に異なる複数のLinux環境を構築したりできます。
OSの仮想化技術としては VMwareVirtualBox が有名ですが、これらのホスト型仮想化は仮想OSの立ち上げ自体にPCリソースを多く取られるため、仮想OS内でのCPUやメモリ消費に制約がかかってしまうのが難点でした。一方Docker はコンテナ型仮想化という仕組みにより仮想化時のオーバーヘッドを抑えることができます。

更なるDockerの技術詳細については以下をご覧ください。

【図解】Dockerの全体像を理解する -前編- - Qiita

何がうれしいのか?

ひとつには、複数の物理的マシン上で完全に同一の環境を構築できることがあります。
マシンごとにOSのバージョンや構成、インストールされているツールは異なるので、あるツールを利用した時にエラーが起きたとしても、それがツールのバグなのか、環境依存の問題なのか、切り分けが難しいという問題がありました。 また、開発者が新しいパッケージをリリースした際に、開発者が想定する環境とユーザの実環境に食い違いがあり、開発者がユーザ環境ごとのエラー処理に追われる(質問受けに忙殺される)ということもしばしば起こります。しかし、ユーザに完全に同一の環境を作らせることは大変難しいことでした。 Dockerは環境そのものをイメージとして保存しますので、同じイメージを利用する限り、完全に同一の環境であることが保証されます。これはユーザにとってはインストールの苦労から解放されますし、開発者もエラートラブルを回避することができ、お互いにストレスは大幅に軽減されます。 また、仮にイメージ内で設定をいじってしまい再起不能になったとしても、イメージを再インストールすることでリセットでき、マシンを壊す心配はなくなります*1

もうひとつの利点は、ローカルの環境を汚さない、という点です。
Linux上に複数のパッケージをインストールする際、それぞれのパッケージが要求するライブラリのバージョンが異なることが原因で、同時にインストールすることができないということはよくあります (過去ブログ記事参照)。また、後からインストールしたパッケージが既存のライブラリを上書き更新(アップグレード、ダウングレード)してしまったために既存のツールがエラーで動かなくなるというような経験をされた方も多いのではないでしょうか。Dockerを使うと、それぞれのツールを個別にイメージ化することでこのコンフリクトはなくなります。

3つめは、新しくマシンを購入した際、あるいはOSを再インストールした際に、毎回環境構築をやり直さなくて済むという点です。 必要な時にイメージファイルをダウンロードすればよく、イメージファイルの更新は一元管理可能なので、管理者にとって利点が大きいです。

他にもいくつかありますが、大まかにはこんなところです。

Dockerのインストール

これは山ほど記事がありますので、ここではリンクを貼るのにとどめます。

LinuxにDockerをインストールする - Qiita

Ubuntuにdockerをインストールする - Qiita

Docker for MacMacターミナル上で homebrewを用いる方法があります。

Docker for Mac: DockerをMacにインストールする(更新: 2019/7/13) - Qiita

homebrew: 【初心者向け】MacにDockerを手軽にインストールする方法! | Aprico

Docker for Windowsを使うか、WSL上でインストールします。WSLはWSL2がおすすめです。

Docker for Windowsをインストール

【Windows10】Windows PreviewにリリースされたWSL2をインストールしてみた (7/9追記あり) - Palmsonntagmorgen

Windows HomeではHyper-Vが使えませんので、Docker Toolboxをインストールするか、WSL上でインストールします。
なお、WSL2自体がHyper-Vを使っているので、Windows Homeでは今のところWSL1しか使えません。

Docerk Toolbox: windows 10 home で docker を導入するメモ - Qiita

WSL1: WSL上でDocker Engineが動くようになっていたっぽいという話 - Qiita

僕はWSL1を使っていましたが、管理者権限でWSLを起動すればけっこういけました。 Windowsに関してはWSL2の本リリースがまだであることもあり、状況は流動的です。来年くらいにはスタンダードが固まるのではと予想しています。

動作確認

まずはDockerを起動します。起動方法は上のインストールのページ参照。
Dockerを起動する際にIDとパスワードが必要になるかもしれませんが、これはDockerHubsign upして作成したIDを入力してください。DockerHubは生成されたDockerイメージを共有するための仕組みです。

ターミナル上で以下のコマンドが動けば成功です。

 sudo docker run hello-world

*1:本当はDocker内からでもホストマシンを壊せますが、それについてはこのエントリのスコープ外ということで。