Dockerについて以前調べたときに以下の記事を書いたのですが、その後時代は進んだようで、2020年5月現在でもっと簡単に構築できるようになっていたのでメモしておきます。
Dockerに関する誤解(Windows版だとLinuxのインストールが必要?)
まずわたしだけかもですが、Windows版のDockerを入れるとWindowsで動くので、Linux環境で動かすにはdockerでLinuxOSを入れて、LinuxOS内にdockerをいれてみたいな手順が必要で手間がかかると思っており、 Windows版を敬遠していましたが、それは大きな誤解でした。
その答えはWindows版をインストールしたらわかりました。Windows版のインストールはHyper-Vを有効にしておくことが必須なのですが、それはなぜかというとWindows版のインストール時にHyper-Vに"DockerDesktopVM"というDockerを動かすためだけのLinux環境が作成されます。
なのでWindowsのコマンドプロンプトからdockerコマンドをたたいたら、実際は内部で動いてるLinuxの環境で実行されるというわけです。
というわけなのでLinux環境で動かしたい方も安心してWindows版を使ってください。(VirtualBoxでCentOSを入れるより簡単で便利です)
Hyper-VはHomeエディションでは使えないのでWindows版は使えない?
Hyper-VはHomeエディションでは使えないことは有名な話だと思いますが、次のWindows10 2004(2020/05/04時点では未リリース)から"WSL2(Windows Subsystem for Linux(WSL) 2)"という機能(Hyper-Vと似たようなもの)がリリースされ、これを使うことでDocker Desktopを動作させることができるみたいです。気になる方はググってみてください。
Dockerとは?
Dockerに興味があるひとがこの記事にたどり着いていると思うので説明不要だと思いますが、簡単に言えば仮想サーバ構築ツールです。
VMと異なるのはサーバごとにOSのインストールは不要で、1つのサーバ上に複数のサーバの構築ができます。
構築したサーバはイメージ化して配布できるので誰がやっても同じ環境が構築できます。
また、各種サーバアプリ(Apache、MySQLなど)のイメージが公開されており、コマンド1つで構築可能です。
僕はインフラ周りはあまりやらないのですが、開発環境やテスト環境構築とかで使えると思います。
それでは以下に手順を記載します。
- Dockerに関する誤解(Windows版だとLinuxのインストールが必要?)
- Hyper-VはHomeエディションでは使えないのでWindows版は使えない?
- Dockerとは?
- Hyper-Vを有効化
- Docker Desktop for Windowsをダウンロード
- Docker Desktop for Windowsをインストール
- Docker用の仮想環境がはいってることを確認 (この手順は省略可)
- Dockerコマンドを実行する
- DockerでWEBサーバを構築
- WEBサーバの起動を確認
- DockerをGUIで操作
- 最後に
Hyper-Vを有効化
Hyper-Vはデフォルトでは有効になっていません。
なのでPowerShellを管理者権限で起動して以下のコマンドを実行します。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
インストールが終わったら再起動が促されます。手順に不安がある方は以下を参照してください。
Docker Desktop for Windowsをダウンロード
Docker公式サイトからDockerDesktop for Windowsをダウンロードします。
以下のサイトの"Docker Desktop"の"Download for Windows"をクリックするとダウンロードが始まります。
ファイルサイズは1GB近くあります。
Docker Desktop for Windowsをインストール
ダウンロードした"Docker Desktop Installer.exe"を実行して、OKを押して次へ進むだけでOKです。
途中、"Use Windows containers instead of Linux containers (this can be changed after installation)"の
チェックがOFFであることを確認してください。(デフォルトでOFFなので何もしなくてよいですが)
これは訳すと"Linuxコンテナーの代わりにWindowsコンテナーを使用する"なのでチェックがOFFの場合Linuxコンテナで動作します。インストール後に切り替えも可能です。
インストールが終わると再起動が促されます。
Docker用の仮想環境がはいってることを確認 (この手順は省略可)
Windowsの再起動後、検索ボックスに"hyper-v"といれて"Hyper-V マネージャー"を立ち上げると以下のように "DockerDesktopVM"という仮想環境が構築されていることが確認できます。これがDockerを動かすためのLinux環境の正体です。
Dockerコマンドを実行する
PowerShellを立ち上げて"docker version"をたたいて、バージョンが表示されればインストール成功です。
コマンドプロンプトでもOKですが、PowerShellのほうがシャットダウンしてもコマンドの履歴が残るので便利です。
> docker version Client: Docker Engine - Community Version: 19.03.8 API version: 1.40 Go version: go1.12.17 Git commit: afacb8b Built: Wed Mar 11 01:23:10 2020 OS/Arch: windows/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.8 API version: 1.40 (minimum version 1.12) Go version: go1.12.17 Git commit: afacb8b Built: Wed Mar 11 01:29:16 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: v1.2.13 GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429 runc: Version: 1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: 0.18.0 GitCommit: fec3683
DockerでWEBサーバを構築
上記までの手順ではDockerのエンジンだけインストールされているのでこっから本領発揮のとこです。
試しにapache webサーバを構築してみます。
Dockerは各種アプリのイメージが公式的に公開されており、そのイメージをダウンロードしてローカルサーバで動かす仕組みとなってます。
どんなイメージがあるかは以下のサイトで確認できると思いますが、RedmineやPostgreSQL、Jenkinsなどわりとなんでもあります。
なので以下の"docker run"コマンドを流すだけで、apche webサーバーの構築ができてしまいます。
構築した環境はコンテナと呼びます。
> docker run -d -p 80:80 --name httpd httpd
オプションの意味を簡単に解説すると以下になります。
- "-d"はバックグラウンドで動作させる(指定しないとコンソールが持っていかれる)
- "-p 80:80"(ホスト:コンテナ)はポート転送設定(試しに8080:80にするとlocalhost:8080でアクセスできる)
- "--name http"は名前を"httpd"にする。(指定しないとランダムでヘンテコな名前が命名される)
- 最後の"httpd"はDocker Hubで公開されているイメージ名
起動したかは以下の"docker ps"コマンドで、httpdがいればOKです。
>docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1b38ad530ec1 httpd "httpd-foreground" 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp httpd
WEBサーバの起動を確認
Windowsからブラウザを起動して、"localhost"をアドレスバーにいれてたたくと さみしいapacheの初期画面がでれば起動しているということです。
DockerをGUIで操作
Windows版ではDockerアプリのDashboardを開けば画面で確認できます。(タスクトレイのクジラのアイコンを右クリックでDashboardを選択)
緑になっていれば動いています。ここから停止とか削除もできます。便利ですね。
さらにhttpdを選択すれば詳細が確認でき、アプリごとのログを確認できます。超便利。
最後に
以前VirtualBoxを使った構築に比べたらだいぶ簡単に構築できました。マシンのスペックによりますが、30min以内でできるんじゃないでしょうか。
まだまだ奥が深いDockerですが、ここまでなんとなくDockerについてさらに手軽になった感じが伝わったかと思います。
ただ、実際の業務で使用するにはまだまだ必要な知識が足りないので、あと実践編としてまとめたいと思います。
では素敵なDockerライフを。