VirtualBox
docker
Docker-Toolbox

WindowsでのDocker環境構築からコンテナ起動まで ~DockerToolboxインストールの際、既にVirtualBoxを利用している場合は注意!

はじめに ※環境構築前にインストールされているVirtualBoxを一旦アンインストールしてください。

やらないとDocker環境及び既存の仮想マシンが全て立ち上がらなくなるので焦ります。この記事で主に書きたかったのはこれだけ。
後はよくある環境構築~dockerコンテナ起動までの覚書です。

環境構築

Dockerのインストール

Windows 10 Pro, Windows serverの場合

上記なら通常のインストーラーを利用したインストール方法は以下でいけるようです。

  1. Docker for windowsのInstallerサイトへ移動し、[Get Docker CE for Windows]をクリック。インストーラーをダウンロード
  2. ダウンロードしてきた[Docker for Windows Installer.exe]を実行

※HomeエディションではDocker for Windows requires Windows 10 Pro or Enterprise version 14393, or Windows server 2016 RTM to runというエラーが発生。

私はHomeエディションなので試せていませんが、Windows 10 Proの方が快適なDocker環境を得る方法もせっかくなので載せておきます。
Docker for Windowsで快適な環境を得るまでの そこそこ長い闘い

Windows 10 Home(64 bit)の場合

私の環境はこちら。通常のインストーラーでエラーが発生したので"Docker for Windows" "Home edition"で検索。こちらの記事を参考にDockerToolboxのインストール実施。

  1. Docker for windowsの代わりにDocker Toolboxをインストール。
  2. 「Docker Quickstart Terminal」を実行。しばらく初期設定としてアプリケーションのダウンロードが行われます。[Oracle Virtual Box]もここでインストールされます。
  3. 正常にインストールが完了していればこれだけでOK。

正しく起動できた場合には以下アスキーアートが表示されます。かわいい
docker.png

  • 注意

はじめに記載したように、VirtualBoxインストール済みの環境で上記を実行するとdockerをはじめVirtualBoxの各イメージが起動できなくなります
VirtualBoxをアンインストールせずにDockerToolboxをインストールした場合は、慌てずにVirtualBox, DockerToolboxをアンインストールし、DockerToolboxのみをインストールしてください
DockerToolboxインストール後の初期設定時にVirtualBoxがデフォルト設定でインストールされるので、既存の仮想マシンも含めて正しく起動できるようになります。

初期設定でインストールされた仮想マシンはなんなのか?

Docker Toolboxを起動し、docker-machine sshで仮想マシンにログインできます(ログイン先は当然VirtualBoxで起動されているマシンと同じ)。ちょっと中身を見てみました。

OS: TinyCoreLinux 8.2.1

初めて聞いたOSですが、Linuxの中でもサイズの小さいものみたいですね。

開発リーダーのRobertはTiny Core Linuxのプロジェクトにおいて「より小さなLinux」を作ることを標榜しており、Tiny Core Linux自身(Core)は13MBしかなく、デスクトップ向けLinuxとしてはもっとも小さい部類に入る。一番大きいパッケージであるCorePlusでも179MB。

最小構成で、新しいコマンドはtceというコマンドを使ってインストールするようです。少し覗いてみましたが、Linux経験者になじみのあるdebianやredhatの構成とは若干違う。デフォルトもusキーボードなのでちょっと面倒ですが、中身を色々見てみるのも面白そうです。
Tiny Core Linux7のCoreをHDDにインストールをはじめ、Tiny Core Linuxに関するQiitaの記事も沢山あります。

Dockerを利用する

Dockerコマンドを利用してコンテナを動作させるまでの流れ

Dockerコマンドを利用して、仮想環境でコンテナを動かすまでの流れはこんな感じ。

  1. docker build or docker pullでイメージを用意
  2. docker run イメージ名でコンテナを作成。コンテナ上で設定されたプロセスが動作する。
  3. docker start/stop コンテナ名でコンテナ内のプロセスが開始/停止。runの時点で開始している。
  4. docker commitでコンテナをイメージ化することも出来ます。

触っていないとすぐ忘れそうなので図にしておきます。参考:Dockerにおけるコンテナのライフサイクル
dockerイメージ.png

DockerイメージはDockerhubにあるものをpullして利用することが出来ます。便利ですね。
その他のDockerコマンド一覧:Dockerコマンドメモ

実際に動かしてみる

試しにhttpd(apache)のイメージを落としてきて使ってみました。Docker Toolboxで以下を実行。

  1. docker pull httpd
  2. docker run -p 8080:80 httpd

-pオプションで仮想マシンの8080ポートアクセスをコンテナ側の80ポートに転送するよう設定しています。

一旦ctr+Qで抜けた後docker psで確認。brave_lewinという名前のコンテナが動作しているのが確認できます。
このデフォルトのコンテナ名、有名な学者の名前からランダムで設定されるらしいです。こういう遊び心いいですよね。

$ docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                  NAMES
f3a4130f6dbd        httpd               "httpd-foreground"   26 minutes ago      Up 26 minutes       0.0.0.0:8080->80/tcp   brave_lewin

上記を実行することでhttpdが仮想環境内のdockerコンテナ上で動作します。仮想マシンのIP宛に、run時に指定したポートに向けてアクセスすればこのようにコンテナへのアクセスが出来、デフォルトのトップページが表示されます。

ItWorks.png

Dockerのネットワーク構成を弄る

ポートフォワードで接続する形だと遊べる幅が狭まるので、色々ネットワーク構成を弄れるようになりたいですね。
以下記事を見ているとdocker networkで色々とネットワーク構成が変えられそうです。楽しそう!

Dockerで自由なネットワーク構成を組む