Dockerをvagrantに入れてwebサーバーを立ち上げるまで
dockerは話にはよく聞くけど全くわからなかったので、とりあえずインストールして動かすところまでやってみた。
Ubuntu
Dockerはlinux環境でのみ動作可能、ということで、Vagrantにlinux環境を作って、そこにdockerをインストールする。
さらに、dockerはUbuntuで開発されているとのことなので、同じくUbuntuにインストールしてやるのが一番無難っぽい。
VagrantBoxの作成
Ubuntu14の64bit版を使ってvagrantboxを作成する。
http://www.vagrantbox.es/
このページ内で、trusty
で検索。
(Ubuntu14はtrustyと呼ばれているらしい)
その64bit版のURLをコピー。ちなみに以下のURL。
VagratBoxの追加
vagrantに追加する。
$ vagrant box add trusty64 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box
box add
で先程コピーしたURLから追加する。
trusty64
としたところはboxの名前なので任意でよい。
10分くらい待つと完了した。
初期化
導入したいディレクトリに移動して、初期化する。
$ vagrant init trusty64
先程指定したboxの名前を使用する。
ここでもしばらく待つと完了。
Vagrantfile
というファイルが作成される。
特に編集する必要はないが、IPアドレスのみ変更した。
起動
で、起動。
$ vagrant up
sshで入ってみる。
1 2 3 4 |
|
Doker
インストール
で、Dockerをインストール。
公式に沿って実行する。
https://docs.docker.com/installation/ubuntulinux/
まずは必要なパッケージをインストール。
1 2 3 |
|
再起動後、dockerのインストール。
wget
がインストールされているかを確認。
インストールされていたので、そのまま進む。
$ which wget
/usr/bin/wget
で、dockerパッケージをダウンロードし、インストールする。
$ wget -qO- https://get.docker.com/ | sh
しばらく待つと完了。
$ docker --version
Docker version 1.6.2, build 7c8fca2
Docker image
pull
https://registry.hub.docker.com/
上記サイトから任意のimageを引っ張ってくる。
centos
のイメージを入れてみる。
centosの検索結果
$ sudo docker pull centos
入っているimageのリストは以下で確認できる。
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos latest fd44297e2ddb 6 weeks ago 215.7 MB
Container
で、落としてきたimageからcontainerを作成して、その上で簡単なコマンドを走らせてみる。
$ sudo docker run centos echo "hello world!"
hello world!
docker run
で指定したimageからcontainerを作成。
その後に続くコマンドをそのcontainer上で実行している。
実行されたcontainerを確認スルには以下。
(-a
のオプションを外すすと実行中のcontainerが表示される。)
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0a84f937b7c centos:latest "echo 'hello world!' About a minute ago Exited (0) About a minute ago agitated_banach
Webサーバーの立ち上げ
dockerfile
dockerfileを作る。
$ vim Dockerfile
中身は簡単に以下のように。
1 2 3 4 5 6 7 |
|
MAINTAINER
は作成者の名前などを書いてやるのが習慣らしい。
index.htmlを適当に作成。
1 2 3 4 5 |
|
build
で、ビルドする。
ビルドで、imageからdockerfile内のコマンドを使用してcontainerを作成し、さらにその結果を新しくimageに出力する、ところまでをやってくれるコマンドのよう。
$ sudo docker build -t test/httpd .
test/httpd
はcontainerの名前。任意でよい。
最後の.
は現在のディレクトリでビルド、ということ。
しばらく待って完了…と行きたいところだけど、どうやらエラーが出て止まってしまってるよう。
1 2 |
|
Complete!って出てるけど、その先のStepに進まない…。
エラー回避
ググってみると以下がヒット。
Dockerのcentosでapacheインストール失敗する。rpmがうんちゃらとか言われる
どうやらpullしてきたcentOSがあたらしすぎてダメだったよう。
なので、この記事どおりcentos6をpullして使う。
$ sudo docker pull centos:centos6
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos centos6 b9aeeaeb5e17 6 weeks ago 202.6 MB
で、Dockerfile
の中身をcentos6を使うように修正。
1 2 3 4 5 6 7 |
|
これで再度実行。
$ sudo docker build -t test/httpd .
ようやく無事、完了。
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
test/httpd latest 74ea9508c04c 52 seconds ago 271.2 MB
centos centos6 b9aeeaeb5e17 6 weeks ago 202.6 MB
run
ポートを指定してバックグラウンドで実行。
$ sudo docker run -p 8080:80 -d test/httpd
起動している。
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4aca4268ffa3 test/httpd:latest "/usr/sbin/httpd -D 15 seconds ago Up 15 seconds 0.0.0.0:8080->80/tcp compassionate_poincare
Vagrantfileで指定したIPアドレスに8080のポートをつけてやればアクセスが出来る。
アクセスすると、先程作成したindex.html
が表示された。
なんだかんだで大変だったけどとりあえず起動できた。
参考
Docker入門 (全11回) – プログラミングならドットインストール
【社内勉強会】Docker入門してみました | LexTech