DockerのUbuntuコンテナにScala開発環境を構築
この記事を書くに至った動機
エンジニアにはあるあるですが環境構築途中で失敗して、一度削除してまたいちから作成する時に調べ直さなくてもいいように手順を記録していきたいと思います。
(もうすでに1回やり直してます。。)
環境構築の手順
・ベースとなる Ubuntu コンテナの作成
・Redisサーバのインストール
・MySQLサーバのインストール
・JDK 8 のインストール
・Play Framework (Activator) のインストール
・新規プロジェクトの作成
・アプリケーションの起動
・ブラウザからアクセスして確認
・コンテナの保存
・ポートフォワード設定をして実行
・再度ブラウザからアクセスして確認
かなり長い道のりで、おそらくすんなりいかずに1日がかりの作業になると思いますが
頑張ってベースとなる開発環境構築の手順をお伝えできたらと思います。
Ubuntu コンテナの作成
まずは空の Ubuntu コンテナを作成します。
タグは「Trusty」を使います。
$ docker run -it --name develop ubuntu:trusty /bin/bash
すぐに exit してコンテナが正しく作成されたかを確認してみます。
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0309d0f2f1bd ubuntu:trusty "/bin/bash" 5 minutes ago Up 5 minutes develop
正常にコンテナが作成されていることを確認したら再度コンテナに入ります。
$ docker exec -it develop /bin/bash
Redisサーバのインストール
とりあえずホームディレクトリに移動したのち、「redis-server」をインストールしたいと思います。
$ cd ~ $ apt-get update $ apt-get install -y redis-server
少し待つとインストールが完了します。
早速Redisサーバを起動しておきしょう。
正しく起動したかどうかの確認も忘れずに。
$ service redis-server start Starting redis-server: redis-server. $ps -ef | grep redis redis 209 1 0 05:45 ? 00:00:00 /usr/bin/redis-server 127.0.0.1:6379 root 213 46 0 05:45 ? 00:00:00 grep --color=auto redis
MySQLサーバのインストール
次はMySQLのインストールです。
インストール時に root ユーザのパスワード入力を求められるので入力します。
$ apt-get install -y mysql-server
少し待つとインストールが完了します。
こちらも忘れずにMySQLサーバを起動しておきましょう。
$ service mysql start * Starting MySQL database server mysqld [ OK ] * Checking for tables which need an upgrade, are corrupt or were not closed cleanly. $ps -ef | grep redis root 754 1 0 05:48 ? 00:00:00 /bin/sh /usr/bin/mysqld_safe mysql 1101 754 0 05:48 ? 00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 root 1265 46 0 05:49 ? 00:00:00 grep --color=auto mysql
JDK 8 のインストール
次はJavaをインストールします。
Play Framework を利用するにはJDK8以上が必要なようです。
Ubuntu 14.04 では公式リポジトリに JDK8 が用意されていないとのこと。
サードパーティ製のリポジトリを追加してインストール必要があります。
そこで登場するのが「add-apt-repository」ですが、空のUbuntuにはこれすらもありません。
まずは使えるように設定をします。
$ apt-get install -y apt-file $ apt-file update $ apt-file search add-apt-repository
検索して見つかったリポジトリをインストールします。
$ apt-get install software-properties-common
ここまでやるとやっと「add-apt-repository」が使えるようになります。
アップデートを忘れずに実行し、続けて JDK8 をインストールします。
$ apt-add-repository ppa:openjdk-r/ppa $ apt-get update $ apt-get install -y openjdk-8-jdk
しばらく待つとインストールが完了するので、バージョンを確認してみます。
$ java -version openjdk version "1.8.0_72-internal" OpenJDK Runtime Environment (build 1.8.0_72-internal-b15) OpenJDK 64-Bit Server VM (build 25.72-b15, mixed mode) $javac -version javac 1.8.0_72-internal
Play Framework (Activator) のインストール
最後に Scala の Framework である、Play Framework をインストールします。
まずは下記のサイトで配布されている Activator という zip ファイルを wget で取得します。
2016年2月25日時点での最新版は Play 2.4.6 / Activator 1.3.7 のようです。
https://www.playframework.com/download
wget が使えない場合は、wget を先にインストールします。
$ apt-get install -y wget
適当なフォルダ(今回はActivator)を作成し、先ほどの zip ファイルをダウンロードします。
$ mkdir Activator $ cd Activator $ wget https://downloads.typesafe.com/typesafe-activator/1.3.7/typesafe-activator-1.3.7-minimal.zip
ダウンロードが完了したら zip ファイルを解凍します。
解凍するには unzip コマンドを使いますが、例に漏れずこれもインストールが必要です。
$ apt-get install -y unzip
unzip のインストールができたら早速ダウンロードした zip ファイルを解凍します。
$ unzip typesafe-activator-1.3.7-minimal.zip
一瞬で解凍が終わりますが、解凍した後はフォルダが1つ作成されていると思います。
$ ls -al drwxr-xr-x 3 root root 4096 Feb 25 06:18 ./ drwx------ 3 root root 4096 Feb 25 06:13 ../ drwxr-xr-x 2 root root 4096 Dec 2 20:27 activator-1.3.7-minimal/ -rw-r--r-- 1 root root 1056830 Dec 3 01:28 typesafe-activator-1.3.7-minimal.zip
中に入って内容を確認してみます。
$ cd activator-1.3.7-minimal $ ls -al drwxr-xr-x 2 root root 4096 Dec 2 20:27 . drwxr-xr-x 3 root root 4096 Feb 25 06:18 .. -rwxr--r-- 1 root root 9507 Dec 2 20:27 activator -rw-r--r-- 1 root root 1213545 Dec 2 20:27 activator-launch-1.3.7.jar -rwxr--r-- 1 root root 7342 Dec 2 20:27 activator.bat
この activator というファイルは今後よく使うことになるためパスを通しておきます。
$ pwd /root/Activator/activator-1.3.7-minimal $ env | grep PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin $ export PATH=$PATH:/root/Activator/activator-1.3.7-minimal $ env | grep PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/Activator/activator-1.3.7-minimal
こんな感じになったかと思います。
これでいつでもどこでも activator コマンドが利用できます。
新規プロジェクトの作成
新しくプロジェクトを作成するのはコマンドひとつで行えます。
まずはプロジェクト用のフォルダを作成して、その中で「activator new」コマンドを実行します。
※初回実行時のみいろいろインストールされるので非常に時間がかかります。コーヒーでも飲みながら気長に待ちましょう。
$ mkdir sampleapp $ cd sampleapp $ activator new <appname(省略可)> <apptype(省略可)> # ひとまずは「activator new」のみで実行してみてください
事前ダウンロードなどが終わると以下のような画面が出てくると思います。
Browse the list of templates: http://typesafe.com/activator/templates Choose from these featured templates or enter a template name: 1) minimal-akka-java-seed 2) minimal-akka-scala-seed 3) minimal-java 4) minimal-scala 5) play-java 6) play-scala (hit tab to see a list of all templates)
今回は Scala を利用するので「play-scala」と入力してリターンキーを押します。
するとさらに今度はアプリケーションの名前の入力を求められます。
好きな名前を入力しましょう。未入力時は「play-scala」が設定されるようです。
> play-scala Enter a name for your application (just press enter for 'play-scala') > sampleapp OK, application "sampleapp" is being created using the "play-scala" template. To run "sampleapp" from the command line, "cd sampleapp" then: /root/Activator/sampleapp/sampleapp/activator run To run the test for "sampleapp" from the command line, "cd sampleapp" then: /root/Activator/sampleapp/sampleapp/activator test To run the Activator UI for "sampleapp" from the command line, "cd sampleapp" then: /root/Activator/sampleapp/sampleapp/activator ui
こんなメッセージが表示されたらプロジェクトファイル群がすでに作成されています。
アプリケーション名で新たにフォルダが作成されているので、構成を見てみましょう。
$ cd sampleapp $ ls -al -rw-r--r-- 1 root root 591 Feb 25 06:34 LICENSE -rw-r--r-- 1 root root 148 Feb 25 06:34 README -rwxr--r-- 1 root root 9507 Feb 25 06:34 activator -rw-r--r-- 1 root root 1213545 Feb 25 06:34 activator-launch-1.3.7.jar -rwxr--r-- 1 root root 7342 Feb 25 06:34 activator.bat drwxr-xr-x 4 root root 4096 Feb 25 06:34 app -rw-r--r-- 1 root root 472 Feb 25 06:34 build.sbt drwxr-xr-x 2 root root 4096 Feb 25 06:34 conf drwxr-xr-x 2 root root 4096 Feb 25 06:34 project drwxr-xr-x 5 root root 4096 Feb 25 06:34 public drwxr-xr-x 2 root root 4096 Feb 25 06:34 test
これがデフォルト状態(空状態)のプロジェクトファイル構成になります。
ここら辺については Play Framework のチュートリアルやドキュメントで詳しく書かれていますのでそちらを参照してみてください。
アプリケーションの起動
作成した空のアプリケーションを実行してみたいと思います。
実行時にも「activator run」コマンドを利用します。
アプリケーション作成時同様、初回のみいろいろダウンロードしたりチェックが行われたりして非常に時間がかかりますので大人しく待ちましょう。
$ activator run ・ ・ ・ --- (Running the application, auto-reloading is enabled) --- [info] p.c.s.NettyServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000 (Server started, use Ctrl+D to stop and go back to the console...)
こんな表示が出たら見事アプリケーションの起動に成功です!!
おめでとうございます!!
ブラウザからアクセスして確認
アプリケーションが起動したら、実際に見てみたいですよね?
というわけで、早速ブラウザからアクセスしてページを表示してみましょう!
VM環境のIPアドレスとポート番号9000を入力してリターン!
残念つながりませんでした・・・。
でもこれ、当然繋がらなくて当たり前ですよね。
最初にコンテナを起動するときにポートフォワード設定をせずに起動していますから。
コンテナの9000番ポートに対してアクセスするには一度コンテナから抜けて、コンテナ起動時に9000番ポートに対してポートフォワード設定を指定する必要があります。
が、ここで問題が・・・。
ポートフォワード指定は「docker run」コマンド実行時しかできないため、一度コンテナを削除する必要があります。
ここまで数時間かけて作ってきたコンテナを破棄するなんて…。
ということでコンテナを削除する前にここまで設定したコンテナを保存したいと思います。
コンテナの保存
一度コンテナから抜けるために exit して、以下のコマンドを実行します。
$ docker commit -m "ここにコメントが書けます" <Image Id> <Image Name> $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE develop latest 8c7f1c246564 26 seconds ago 1.192 GB
無事にイメージとして保存することができました。
ポートフォワード設定をして実行
develop コンテナを本当に削除して作り直してもいいんですが、ビビリな僕は残したまま別コンテナとして立ち上げることにします。
コンテナ名を「develop9000」、イメージはさっき自分で作成した「develop」イメージを利用します。
$ docker run -it -p 9000:9000 --name develop9000 develop /bin/bash $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9ca7253918d2 develop:latest "/bin/bash" About a minute ago Exited (0) 3 seconds ago develop9000 0309d0f2f1bd ubuntu:trusty "/bin/bash" 4 hours ago Exited (0) 2 hours ago develop
無事に起動されました。
それでは、前の手順に合わせて sampleapp を実行してブラウザで確認してみたいと思います。
まずは作成したコンテナへ入ります。
$ docker start develop9000 $ docker exec -it develop9000 /bin/bash
プロジェクトがあるフォルダへ移動して「activator run」コマンドを実行します。
コンテナを一度抜けるとパス設定が元に戻っていたようなので再度設定しておきます。
$ export PATH=$PATH:/root/Activator/activator-1.3.7-minimal $ cd /root/Activator/sampleapp/sampleapp $ activator run [info] Loading project definition from /root/Activator/sampleapp/sampleapp/project [info] Set current project to sampleapp (in build file:/root/Activator/sampleapp/sampleapp/) --- (Running the application, auto-reloading is enabled) --- [info] p.c.s.NettyServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000 (Server started, use Ctrl+D to stop and go back to the console...)
今回は2回目の実行なので初回に比べたらはるかに早く起動しました。
VirtualBoxのディスク容量を拡張する
VirtualBoxで作業をしていると、想定よりディスクを使用してしまい容量不足になることがあると思います。
作業内容そのままでディスク容量を拡張する手順を残しておきたいと思います。
ディスク容量拡張の手順
・新規ディスクを追加する
・コマンドでHDDをクローンする
・古いディスクをアンマウント
新規ディスクを追加する
まず対象VMの設定画面からストレージメニューを開きます。
ストレージ一覧の右側にあるディスクの+マークを押します。
デフォルト選択が既存ディスクになっていますが間違えないように「新規ディスクの作成(N)」を押します。
するとハードディスクのタイプ選択が求められるので前とVDIを選択して進めます。
ディスクのサイズについては好きな方を選択してください。
ちなみに固定サイズの方が少しだけ速度が速くなるようです。
最後にディスクの名前と容量を決めたら「作成」ボタンを押します。
注意点としては既存のディスクよりも大きい容量にするようにしましょう。
そうしないとこの後行うディスクのクローン作業がおかしくなると思います(^^;
新しいディスクが作成されました。
コマンドでHDDをクローンする
ストレージを選択すると右側にファイルパスが表示されると思います。
ターミナルを開き、この VDI ファイルが置いてあるところまで移動しましょう。
移動したら下記のコマンドを実行してディスクのコピーを行います。
パーセンテージが表示され、100% になれば完了です。
$ VBoxManage clonehd --existing "Ubuntu 14.04 LTS.vdi" "New Ubuntu 14.04.vdi" 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Clone medium created in format 'VDI'. UUID: 4cc3e925-****-4d78-****-5abfe3e36cf8
古いディスクをアンマウント
無事にディスクのコピーが終わったら、起動させるディスクを変更します。
先ほどのストレージ設定画面で古いディスクを削除します。
削除といっても設定が削除されるだけで物理的にはファイルとして残っていますので安心してください。
古いディスクを選択して下部にあるディスクの「ー」ボタンを押すと削除が完了します。
最終的にはこんな感じになると思います。
ここまででディスクの差し替えは完了です。
VM上でパーティション調整(BIOS作業)
パーティションの調整は BIOS 上で行う必要があります。
まず下記のサイトで GParted パーティション編集ツールのイメージファイルをダウンロードします。
GParted Live CD/USB/HD/PXE Bootable Image の Stable Releases にある iso ファイルをダウンロードします。
2016年2月25日時点での最新版は「Download gparted-live-0.25.0-3-i686.iso」のようです。
http://gparted.org/download.php
ダウンロードしたら、パーティションを変更したい VM の設定画面を開きストレージメニューを開きます。
CD設定部分へ先ほどダウンロードしたイメージファイルを設定して IDE プライマリマスターに設定します。
その状態で VM を起動すると BIOS 上で GParted が立ち上がります。
項目2つ目の「Other modes of GParted Live」を選択します。
次は一番上の「GParted Live (Default settings, KMS)」を選択します。
keymap について質問されますが、「Don't touch keymap」を選択したままエンターを押します。
次に言語設定を聞かれるため、「Japan」の 15 を入力してエンターを押します。
最後にモードを聞かれますが、何も入力しなくても大丈夫なのでそのままエンターを押します。
こんな画面が起動します。
実はこの画面…
もうパーティション設定が終わった状態です。
途中のキャプチャを撮るのを完全に忘れていました。。
というわけで、足りない部分は言葉で説明しながら手順を紹介したいと思います!
構成として、まずメインストレージ領域があり、次に linux-swap 領域、最後に未割り当て領域になっていると思います。
この状態のままだと後方に空き領域がなく、メインストレージの領域を拡張することができません。
そのためまず最初に linux-swap 領域を大胆に削除します。
次にその親の領域も削除します。
メインストレージである /dev/sda1 以降に未割り当て領域しかない状態になりました!
この状態で /dev/sda1 のリサイズ作業を行います。
後方に 2GB ほどの領域を残した状態で、好きなサイズまで拡張していきます。
設定が終わったら「リサイズ/移動」ボタンで確定させます。
次に先ほど消してしまった linux-swap 領域をもう一度設定します。
まずは未割り当て領域全てを拡張領域として追加します。
未割り当て領域を右クリックして「New」を選択します。
種類のところを「拡張パーティション」に設定して「Add」ボタンを押します。
こんな感じになったと思います。
これで新規パーティション#1 の配下に未割り当て領域が移動したと思います。
この状態から未割り当て領域を右クリックし、さらに「New」で linux-swap 領域を作っていきます。
ファイルシステムのところを「linux-swap」に変更して「Add」ボタンを押します。
こちらは「論理パーティション」で大丈夫です。
こんな感じになりました。
これでパーティションの設定自体は完了です。
「Apply」ボタンを押して設定したパーティションを確定させましょう!
これでパーティション設定は全て完了です。
VM をシャットダウンし、先ほど設定していた CD ブートからイメージファイルを取り出して再起動すれば無事にディスク容量が増えていると思います。
早速ログインして容量を確認してみます。
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 14G 5.4G 7.6G 42% / none 4.0K 0 4.0K 0% /sys/fs/cgroup udev 991M 12K 991M 1% /dev tmpfs 201M 900K 200M 1% /run none 5.0M 4.0K 5.0M 1% /run/lock none 1002M 72K 1001M 1% /run/shm none 100M 28K 100M 1% /run/user
空き領域がだいぶ増えていますね!
同じような状況の方の参考に少しでもなれば幸いですm(_ _)m
Vagrant を使ったVM環境構築
前回 VirtualBox を利用して、Ubuntu に Docker と SSH を入れるということをしました。
どうやら Vagrant を使うともっともっと簡単に環境構築が行えるようなので実際に試してみました。
※MacOSXで行っております。
Vagrantってなに?
VirtualBox のようなVM環境をとにかく簡単に一元的に扱いやすくしてくれるツールです。
具体的になにをしてくれるのか例を挙げるとこんな感じ。
・SSH接続設定が初めから済みの状態でVM環境が作られる
・面倒な設定なくコマンド1つでVM環境が作成できる
(ざ〜〜〜っくりですが2つあげました)
とにかくすぐに作業に取りかかれると言う点ではものすごい良いツールだと思います。
ただ、個人的には一度は Vagrant を使わず構築してみるといいと思います。
その方が便利になった点がよりよくわかります。
Vagrant の初期設定
パッケージのインストールが完了したら、MacOS のターミナルを起動して以下のコマンドを叩くだけでインストールできます。
$ mkdir Vagrant $ cd Vagrant $ vagrant init --minimal ubuntu/trusty64
まず適当にフォルダを作成して、その中で「vagrant init」コマンドを実行します。
minimal オプションは必要最小限の Vagrantfile を作成しますという指示です。
あってもなくても大丈夫ですが、今回は特に気にせず最小構成で作成します。
コマンドが正常に終了すれば Vagrantfile と言うものが作成されていると思います。
Vagrant が VM を作成するときに使う設定ファイルですが、中身はこんな感じになっています。
Vagrant.configure(2) do |config| config.vm.box = "ubuntu/trusty64" end
Vagrant の VM 作成
さて、実はもうすでに Vagrant を使う準備がすべて整いました!
以下のコマンドを叩いて実際に VM を起動してみましょう。
$ vagrant up
それなりに時間がかかりますが、しばらく待っていると起動が完了します。
正常に終了していれば VirtualBox の画面にも新しく VM が追加されています。
Vagrant の SSH 接続
そして Vagrant を導入する一番のメリット?と言ってもいい部分ですが、
すでに SSH 接続設定などが終わった状態の VM が起動されているため、実際につないでみたいと思います。
以下のコマンドを叩いてみましょ。
$ vagrant ssh Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-79-generic x86_64) * Documentation: https://help.ubuntu.com/ System information as of Wed Feb 24 03:17:38 UTC 2016 System load: 0.42 Processes: 80 Usage of /: 3.5% of 39.34GB Users logged in: 0 Memory usage: 25% IP address for eth0: 10.0.2.15 Swap usage: 0% Graph this data and manage this system at: https://landscape.canonical.com/ Get cloud support with Ubuntu Advantage Cloud Guest: http://www.ubuntu.com/business/services/cloud 0 packages can be updated. 0 updates are security updates. vagrant@vagrant-ubuntu-trusty-64:~$
つながりました!!素晴らしいですね!
VirtualBox内のUbuntuへSSH接続
MacOSXにインストールされているVirtualBoxで起動されたUbuntuで作業するとレスポンスがもっさりしていてストレスたまりますよね?
なのでUbuntuに対してMacOSの端末からSSH接続をすることにしました。
VirtualBoxの設定
VirtualBoxのメニューバーから「環境設定...」を開きます。
設定ウィンドウの「ネットワーク」の「ホストオンリーネットワーク(H)」タブを選択します。
画面右側の「+」マークを押してネットワークアダプターを追加します。
次にドライバーマークのアイコンをクリックして設定内容を見てみます。
環境によって多少違うと思いますが、こんな感じで設定されているかと思います。
バーチャルホスト側の設定
次にUbuntuがインストールされているバーチャルホスト側の設定を行います。
VirtualBoxの画面上で対象のバーチャルホストを選択した状態で「設定(S)」ボタンを押します。
設定ウィンドウの「ネットワーク」を選択すると以下のような画面になると思います。
「ポートフォワーディング(P)」ボタンを押してポートフォワード設定画面を開きます。
画面右側の「+」マークを押してポートフォワード設定を追加します。
こんな感じで、ポート44444に対してポート22を割り当ててみました。
設定が終わったら「OK」ボタンを押して閉じます。
Ubuntu側のSSHインストール
次にUbuntuにSSHサーバをインストールして実行します。
$ sudo apt-get update // 念のため最新にアップデートしておきます。
$ sudo apt-get install openssh-server
もし、自動的にSSHサーバが起動していない場合は手動で起動します。
$ sudo service ssh start
MacOSX側から接続
$ ssh <username>@192.168.99.100 ECDSA key fingerprint is SHA256:sO+PooxempCrdXg1BeKtGMS3DR3cdL0uG**********. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.99.100' (ECDSA) to the list of known hosts.
初回はこんな感じで応答を求められると思います。
2回目以降は何も聞かれることなくすんなり接続ができると思います。
これでいちいちUbuntuのGUIを立ち上げなくてもコマンドのみでサクサク作業ができるようになりました。
作業効率って大事ですよね!
Docker 主要コマンド一覧
みなさん Docker 使ってますか?
この記事ではDockerのコマンドについてまとめてみました。
オプションなど細かく分類するとまだまだたくさんありますが、実務でよく使うものを集めてみました。
Docker 主要コマンド一覧
ローカルにあるイメージ一覧を取得する
$ docker images
コンテナ一覧を取得
$ docker ps -a
オプションについて
※) -a オプションは停止中のコンテナも含めて表示する
コンテナの停止と開始と再始動
$ docker stop <コンテナ名> $ docker start <コンテナ名> $ docker restart <コンテナ名>
コンテナの強制終了
$ docker kill <コンテナ名>
コンテナの作成&実行
$ docker run -it --name <作成コンテナ名> <リポジトリ名:タグ名> /bin/bash
オプションについて
※) -it オプションは --interactive, --tty オプションでコンテナとbashで対話するためのものです。
※) 実行するとコンテナ内のbashにプロンプトが切り替わります。
コンテナの作成&実行(ポートを指定する場合)
$ docker run -it --name -p 33333:80 <作成コンテナ名> <リポジトリ名:タグ名> /bin/bash
※) 33333ポートに対してアクセスするとこのコンテナの80ポートへ流れる
起動中のコンテナに入る
$ docker exec -it <コンテナ名> /bin/bash
コンテナの各種情報を出力
$ docker info <コンテナ名> $ docker inspect <コンテナ名>
コンテナを削除
$ docker rm <コンテナ名>
イメージを削除
$ docker rmi <イメージ名>
イメージの検索
$ docker search <検索イメージ名>
イメージの取得
$ docker pull <リポジトリ名:タグ名>
Mac + VirtualBox + Ubuntu 14.04 + Docker による開発環境構築
仕事でDockerを利用して開発環境を作る機会が頂けましたので環境構築の手順の共有と備忘録として記事を書いていきたいと思います。
各ソフトウェアのバージョン情報など
・MacOSX 10.11.1
・VirtualBox 5.0.14
・Ubuntu 14.04 LTS
・Docker 1.10
VirtualBoxをインストール
VirtualBoxはこちらから最新版をダウンロードできます。
https://www.virtualbox.org/
こちらは特に難しいところはないので、画面に従ってインストールしてください。
VirtualBoxへUbuntuをインストール
VirtualBoxのインストールが終わったら次は実際にUbuntuをインストールします。
まずはUbuntuのイメージファイルが必要なので下記のサイトからダウンロードします。
http://www.ubuntulinux.jp/download/ja-remix
イメージファイルがダウンロードできたら、VirtualBoxの左上にある「新規(N)」ボタンを押して
Ubuntu用のバーチャル環境を作成していきましょう!
まずはバーチャル環境に名前を付けます。それ以外の項目はそのままで良いでしょう。
次に、メモリサイズの指定を行います。
僕は2GBを指定してみました。マシンのメモリ容量と相談して適当に設定しましょう。
次はハードディスクの設定項目です。
仮想ハードディスクを設定するかどうかですが、初回であれば何もないはずですので「仮想ハードディスクを作成する(C)」を選択しましょう。
ハードディスクのファイルタイプは「VDI (VirtualBox Disk Image)」を選択します。
物理ハードディスクの設定は今回は「可変サイズ(D)」にしました。
固定サイズにすると、作成時に少し時間がかかる代わりに処理速度が上がるようですが、ディスク容量の節約のために今回は可変サイズで作成します。
最後にディスク容量を指定して作成します。
Ubuntuをインストールするには最低7GBの容量が必要なため、少し余裕をもたせて8GBとしました。
これで無事にUbuntu用のバーチャル環境の作成が完了です!
それでは「起動(T)」ボタンを押してUbuntuを起動してみましょう!
するとこんな画面が表示されるかと思います。
ここで先ほどダウンロードしておいたUbuntuのイメージファイルを選択して「Start」ボタンを押します。
そうすると起動時にこのイメージファイルがロードされてUbuntuのインストール画面が表示されます。
右の「Ubuntu をインストール」ボタンを押してUbuntuをインストールしていきましょう。
・必要最低限のHDD空き容量があること
・インターネットに接続されていること
この2つがクリアできていればインストールが可能です。
(たぶん大丈夫になってるはず)
警告と書いてあって若干怖いですが、「ディスクを削除してUbuntuをインストール」を選択します。
初回インストールなので特になくなって困るものはありませんので大丈夫です。
住んでいる地域を選択します。
キーボード設定ですが、特に指定がなければそのまま続けます。
ここまで設定が終わるとOSのインストールが始まりますのでしばらく待ちます。(約20分程度)
インストールが終わると再起動が求められます。
再起動した結果が以下の画面になります。
無事にUbuntuをインストールすることができました!
ご覧の通りインストール完了後の初期状態だと解像度がだいぶ小さいです…。
作業効率化のためにまずは解像度の設定を行いましょう。
初期状態だと640x480しか選択することができません。
Ubuntuが表示されているウィンドウのウィンドウメニューから
「Devices」→「Insert Guest Additionas CD image...」を選択します。
すると以下のようなポップアップが表示されるので「実行する」ボタンを押します。
パスワードが求められるのでUbuntuのインストール時に設定したパスワードを入力して「認証する」ボタンを押します。
コマンドラインが起動して何やらインストールが始まります。
画面に「Press Return to close this window...」と表示されたら完了です。
リターンキーを押してウィンドウを閉じましょう。
その後、バーチャル環境を再起動すると640x480以外の解像度も選べるようになっているはずですので、環境に合わせて好きなものを設定しましょう。
UbuntuへDockerをインストール
さて、ようやくUbuntuがインストールできたところで次は本題のDockerをインストールしていきたいと思います!
インストールと聞くと apt-get や yum が思い浮かぶかと思いますが、apt-getを利用すると少し古いバージョンがインストールされるようです。
今回は wget で最新をインストールしていきたいと思います。
$ wget -qO- https://get.docker.com/ | sh
インストールが終わりました。
最後にこんなことが書いてあります。
If you world like to use Docker as a non-root user, you should now consider adding your user to the "docker" group with something like: sudo usermod -aG docker kabayama Remember that you will have to log out and back in for this to take effect!
ようするに、ルートユーザ以外で実行したい場合はこのコマンドを実行しておいてね!ってことみたいです。
それでは Docker コマンドでバージョン確認をしてみましょう。
$ docker version
バージョン情報が表示されました!
さっそく Docker の Hello World を実行してみたいと思います!
あれ・・・。エラーになってしまいました。
この後あちこちググりながら1時間ほどいろいろ試したのですが、結局OSを再起動したら sudo 付けずに一般ユーザで実行できるようになりました。
環境構築手順としてはそれほど多くはありませんが、実際にやってみるといろいろハマるところがあり2〜3時間を要してしまいました。
おそらくこのコマンドが有効化されるために、OSの再起動が必要なようですね。
sudo usermod -aG docker kabayama
再起動しても解決されない場合は、Dockerサービスが上がっていない可能性があるので以下のコマンドで解決するかもしれません。
sudo service docker start
今回はかなり手こずってしまいましたが、次回からはすんなり構築できるようにしっかり覚えたいと思います。
同じような問題でハマっている方、これからDockerを使ってみようという方の少しでも参考になれば嬉しいです。