Windows版Dockerの使い方
Dockerとは
Dockerとは仮想化技術の一つです。個人レベルだと次の二種類がメインでしょうか。
- コンピュータ本体を仮想化するハイパーバイザー型
- ソフトウェアを仮想化するコンテナ型
1のハイパーバイザー型では、MicrosoftのHyper-VやOracleのVirtualBoxなどが有名です。Hyper-VはWindows10に標準でついてくるので、私はよく遊んでます。記事にもしていますのでよろしければ御覧ください。
今回は2のコンテナ型の代表格であるDockerを使ってLinuxのUbuntuを動かしてみます。

レイヤー構成はこのようなイメージです。Windows10とLinuxのUbuntuはどちらもOSなので、同時に動かすことはできません。そのため、Dockerというコンテナ管理システムをWindows10にインストールして、そのDockerの上の一つのコンテナという形でUbuntuを動かします。
なにができるか
今回はお試しでUbuntuをコンテナで動かしますが、このコンテナでいろいろなものが動かせます。Webサーバ(Apache、nginx等)や、DBサーバ(MySQL、PostgreSQL等)などもコンテナ上で動かすことができます。

Ubuntuは仕方ないけど、WebサーバやDBサーバはWindows10にインストールすれば動くけど、Dockerのコンテナ上で動かすのはなぜ?

Dockerコンテナ上に構築するメリットは、インストール先の環境に依存しないため、Dockerさえあればどの環境でもコンテナは同じように動かせるので乗せ換えたら動かなくなったというトラブルを回避できるよ。

乗せ換えとかしないからあまりメリットを感じないなー

1つのパソコンで複数のバージョンを同時に動かすこともできるよ。例えば、今は最新バージョンを使っているけど、古いバージョンだとどう動くのか確認したい、という場合に、古いバージョンを入れ直す必要はなく、追加で古いバージョンのコンテナを作って動かすことができるので、すぐに検証ができるんだ。
インストール方法
Docker公式サイトからダウンロード
Windows版Dockerの本体は、公式サイトからダウンロードします。

ページが表示されたら、Docker Hubから取得します。

Get Dockerをクリックします。

Dockerのインストールファイルは1GBぐらいありますので、ダウンロードにちょっと時間がかかります。ダウンロードが終わったら、Docker Desktop Installer.exeを起動します。

チェックボックスはデフォルトでOKです。
- Enable required Windows Features … 自動でWindowsのHyper-Vを有効化
- Add shortcut to desktop … デスクトップにアイコンを作成
- Use Windows Containers instead of Linux containers … Windowsをコンテナ化する


最近は自動でHyper-Vを有効化してくれるよ。便利になった!

インストール完了したら、コンピュータを再起動します。

Docker 起動
パソコンの起動が完了すると、このような通知が表示されて、自動でDockerが起動します。

Dockerはステータスバーの中にいます。クジラのマークがDockerです。コンテナがピコピコ動いている時は、Docker起動中です。動きが止まったらDocker起動完了です。

初回起動時は、Welcome画面が開いて、なにやらログインを勧められますが、右上の✕ボタンを押してスルー可能です。

インストールはこれで完了です。
動作確認
Docker本体のインストールが完了しましたので、dockerコマンドが使えるか確認してみます。バージョン番号が表示されれば正常にインストールできています。
> docker -v
Docker version 19.03.5, build 633a0ea
Windows上でLinuxのシェルを起動する
次は実際にDockerコンテナをダウンロードしてきて、動かしてみます。Windows上でLinuxを動かしてみましょう。一昔前ではWindows上でLinuxを動かすなんて不可能でしたが、Dockerのおかげで簡単にできてしまうのです。
Ubuntu公式Dockerイメージの入手と起動
本当は段階を追ってイメージを入手して起動という流れなのですが、Dockerは気が利くので、これを実行したい!って言えば、そこまでに必要なものを自動で準備してくれるのです。
例えば、次のDockerコマンドを実行します。
> docker run -it ubuntu /bin/bash
すると、このような感じで、Dockerが起動し、ubuntuのコンテナイメージをダウンロードした後、ubuntnコンテナを起動してBashを起動します。

Bashが起動すると、そこはもうLinuxの世界です。試しにnameコマンドを実行すると、OSがLinuxであることが確認できましたし、lsコマンドでファイル一覧も確認できました。
最後はexitコマンドでBashを終了させると、コンテナは終了して元のWindowsのコマンドプロンプトに戻ります。

これでWindowsを使っていても、すぐにLinuxのBashが起動できるんだ。VMだと重いし、Cygwinは本物とはちょっと違うので、この軽さで本物が動かせるDockerはスゴイ!!
Windowsとディスクを共有
コンテナの中と外を接続するには、単純にコンテナを起動するだけでは無理で、ちょっと設定を追加するがあります。
この辺の設定を毎回dockerコマンドで実行すると面倒なので、docker-composeというものを使います。dockerでコンテナを起動する時に必要な設定を定義しておき、それに基づいて毎回自動でその設定を適用して起動してくれるスグレモノです。ここからがdockerの真骨頂です。
docker-compose
これは次の記事で書きたいと思います。
まとめ
こんな方にはDockerオススメ
Windows10上でLinuxやその他いろいろなソフトが動かせます。こんなことをやりたい方にはオススメです。
- Windows使っているけど、手元にLinuxが動く環境を持っておきたい。
- DOSやPowerShellは使いにくいから、Linuxのシェルが使いたい。
- 今使っているバージョンのソフトはそのままに、別のバージョンを動かしたい。
- いろいろソフトを試したいけど、インストール・アンインストールを繰り返すことでWindowsの環境が汚れるのは嫌だ。
- 技術屋だから、いろんなソフトがすぐに動かせるよう武装しておきたい。

エンジニア的には、ソフトが複数バージョンすぐに動かせることや、ホストに環境依存しないところが魅力的!
オススメ技術書紹介
Dockerとはなんぞや? という方にオススメの一冊です。
Webエンジニアだけど自分の作ったアプリを自分の手元のコンテナで動かしてみたい、テスト用のアプリ環境を複数作りたい、などなどDockerを使うとインフラエンジニアにお願いしていたことが自分でもできるようになります。そんなあなたにオススメな一冊がこちらです。
最後にインフラエンジニアやっててDockerを極めたい、という方はオライリー本でとことん深くまで突き進んでください。
コメント