はじめに
Docker、非常に便利ですね。Dockerを使用すればローカル環境を汚すことなく、様々なアプリケーションを実行できたりしてしまいます。Dockerに関する記事はネット上に豊富にありますが、いかんせん界隈の技術の進歩も早くすぐに情報が陳腐化してしまいます。
本稿ではDocker/周辺のエコシステムについてインプットして実際に実行したことをアウトプットしたいと思います。
導入環境
- Windows10 Home 64bit
- Intel Core i5-8250U CPU
CPU仮想化を有効にする
インストールの前にCPUの仮想化が有効になっているか確認をします。無効の場合、Virtualization Technologyを有効にします。
BIOSで設定を有効にしたら、タスクマネージャから確認しておきます。
インストール
Windows環境でインストールできるDockerは「Docker Desktop(Windows)」もしくは「Docker Toolbox」です。
Docker Desktop(Windows)は以前はDocker for Windowsと呼ばれていました。Docker Desktop(Windows)はHyper-Vを使用したOSネイティブで動作します。そのため、必然的にHyper-Vを使用可能なエディション(Pro or Enterprise or Education)に限定されます。
今回導入する環境はWindows10のHomeエディションのため、Docker Toolboxをインストールします。
Install Docker Toolbox on Windows
上記サイトの"Get Docker ToolBox for Windows"リンクからダウンロードします。Legacy desktop solutionの記載がありますが、特に問題はありません。インストール後に使用するDockerコマンドもDocker Desktopと違いはありません。
ダウンロードしたインストーラからインストールします(後述のNDIS5 driver以外はデフォルトでOKです)。
※一番下のチェックボックスはデフォルトではOFFですが、ONにしてNDIS5 driverを使用するようにします。
※ユニバーサルシリアルバスコントローラーの確認が表示された場合はインストールします。
インストール後、デスクトップにOracle VM VirtualBox、Docker Quickstart Terminal、**Kitematic (Alpha)**のショートカットが作成されます。
まず、Oracle VM VirtualBoxを実行し、VirtualBoxマネージャーを確認してみると仮想マシンはまだひとつもありません。
次に、Docker Quickstart Terminalを実行します。諸々のセットアップが自動で行われた後、下記のような画面になればセットアップ含めてインストール完了です(途中、VirtualBoxによるコンピュータの変更ウインドウが表示された場合は"はい"を選択します)。
再度、Oracle VM VirtualBoxマネージャーを確認してみます。
default
という名前の仮想マシンが作成されています。これがDocker(Toolbox)の実行環境になります。VirtualBoxマネージャーで何かを行うということは基本的にはありませんので、仮想マシンの作成後はあまり意識することはないかもしれません。
正常にインストールできているか、Dockerコマンドを実行して確認してみます。
$ docker --version
Docker version 18.03.0-ce, build 0520e24302
version情報が出力され、Dockerが正しくインストールされていることを確認できました。
また、現在ローカルPCに存在する実行環境は以下のコマンドで確認可能です。
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://192.168.99.100:2376 v18.09.1
VirtualBoxマネージャーで確認したdefaultという名前の実行環境が起動しています。[ACTIVE]の*
は現在接続しているということを表します。
コンテナ起動
Dockerのインストールが無事完了したので、実際にコンテナを起動してみます。
DockerのコンテナはDockerイメージから作成します。以下のコマンドでローカルPCに存在するイメージの一覧を確認してみます。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
当然ですがまだひとつもイメージが存在しないため、まず、ローカルPCにイメージをpullします。
Dockerには公式のイメージ保管レジストリであるDocker Hubがあり、docker image pull <image-name:Tag>
コマンドによりDocker Hubからイメージを取得可能です。
今回はhello-worldイメージからコンテナを起動してみます。なお、pull時のTagは省略可能で、省略した場合はデフォルトでlatestタグのイメージを取得します。
$ docker image pull hello-world:latest
Digest: sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535
Status: Downloaded newer image for hello-world:latest
再度、イメージ一覧を確認してみます。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest fce289e99eb9 3 weeks ago 1.84kB
hello-worldイメージをローカルPCにpull出来たので、このイメージからコンテナを起動してみます。docker container run <image-name>
コマンドを使用します。
$ docker container run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
コンテナが作成・起動されました。docker container ls -a
コマンドでコンテナの一覧を確認してみます。
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
57b684deeb76 hello-world "/hello" 6 seconds ago Exited (0) 6 seconds ago thirsty_swartz
hello-worldイメージを元にしたコンテナがひとつ存在しているのが確認できます(hello-worldコンテナは起動後、停止するため、STATUSがExitedとなっています)。-a
オプションは停止しているコンテナも含めて一覧表示します。
なお、ローカル上にDockerイメージが存在しない状態でdocker container run ~
コマンドを実行した場合、run時にpullを行いコンテナを起動します。
また、Dockerコマンドについてはコマンド体系に変更があり、ネットの情報でも新旧コマンドが混在しています。がらりと変更になったわけではなく、現在も旧来のコマンドを使用可能ですが、できる限り新しいコマンドを使用するようにしましょう。
以下のQiitaが非常にまとまっており、参考になります。
コンテナはdocker container rm <container-id or container-name>
コマンドで削除できます。
コンテナIDを指定する場合は、削除対象のコンテナを特定できるレベルでOKで、IDを全桁指定しなくても問題ありません。
$ docker container rm 57b
57b
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
おわりに
今回はdocker(toolbox)のインストールを行い、簡単なコンテナの起動までを行いました。hello-worldコンテナの場合、Dockerを使用するメリットが分かりづらいかもしれません。
手軽に有効利用できることとしては、公式のMySQLやPostgreSQL等のDBイメージがDocker Hubにあります。それらのイメージを使用することにより、ローカル環境にDBをインストールすることなく、ローカルの開発で手軽に様々なDB環境を構築・利用することができます。
Docker Desktopが利用できない環境でも、今回のようにDocker toolboxでDockerを利用することが可能ですので、利用してみてください。
最後に、公式ドキュメントのリンクになります。Dockerは開発スピードが早く、既存の機能がレガシーとなってしまうこともありますので公式サイトは適宜チェックするようにしましょう。