仮想化環境のDocker(Ubuntu)でNode.js&Hello Worldしてみた。
仮想化環境のコンテナを作るDockerが面白そうなので試してみた。
色々つまずいたところがあったが、別途書く事にする。
我が家の環境はUbuntuなので、オフィシャル環境のサンプル(docker-node-hello)をUbuntuベースに修正して動かしてみる。
Dockerfileは以下の通り。
# Node.js for ubuntu # # VERSION 0.1.0 # # ORIGINAL https://github.com/gasi/docker-node-hello # # AUTHER .h2o # # Use the Ubuntu base image provided by dotCloud FROM ubuntu:12.04 # Install Node.js and npm RUN apt-get update RUN apt-get install -y python-software-properties RUN add-apt-repository -y ppa:chris-lea/node.js RUN echo "deb http://archive.ubuntu.com/ubuntu precise universe" >> /etc/apt/sources.list RUN apt-get update RUN apt-get install -y nodejs # App ADD . /src # Install app dependencies RUN cd /src; npm install EXPOSE 8080 CMD ["node", "/src/index.js"]
Dockerfileとオリジナル環境のindex.js,package.jsonを同じフォルダに配置し、以下のコマンドを実行(node.js必須ファイルやnpmでパッケージのインストールが実施されるため5分ほど時間が掛かった...)
$ sudo docker build . Uploading context 10240 bytes Step 1 : FROM ubuntu:12.04 ---> 8dbd9e392a96 Step 2 : RUN apt-get update ---> Using cache ---> a0db8bf1e649 Step 3 : RUN apt-get install -y python-software-properties ---> Running in 6c464e4fceac Reading package lists... Building dependency tree... The following extra packages will be installed: apt-utils ca-certificates file iso-codes krb5-locales libapt-inst1.4 libasn1-8-heimdal libcurl3-gnutls libexpat1 libgcrypt11 libgnutls26 libgpg-error0 libgssapi-krb5-2 libgssapi3-heimdal libhcrypto4-heimdal libheimbase1-heimdal libheimntlm0-heimdal libhx509-5-heimdal libidn11 libk5crypto3 libkeyutils1 libkrb5-26-heimdal libkrb5-3 libkrb5support0 libldap-2.4-2 libmagic1 libp11-kit0 libroken18-heimdal librtmp0 libsasl2-2 libsasl2-modules libsqlite3-0 libtasn1-3 libwind0-heimdal lsb-release mime-support openssl python python-apt python-apt-common python-gnupginterface python-pycurl python2.7 ucf unattended-upgrades xz-lzma Suggested packages: isoquery rng-tools gnutls-bin krb5-doc krb5-user libsasl2-modules-otp libsasl2-modules-ldap libsasl2-modules-sql libsasl2-modules-gssapi-mit libsasl2-modules-gssapi-heimdal lsb python-doc python-tk python-apt-dbg python-gtk2 python-vte python-apt-doc libcurl4-gnutls-dev python-pycurl-dbg python2.7-doc binutils bsd-mailx The following NEW packages will be installed: apt-utils ca-certificates file iso-codes krb5-locales libapt-inst1.4 libasn1-8-heimdal libcurl3-gnutls libexpat1 libgcrypt11 libgnutls26 libgpg-error0 libgssapi-krb5-2 libgssapi3-heimdal libhcrypto4-heimdal libheimbase1-heimdal libheimntlm0-heimdal libhx509-5-heimdal libidn11 libk5crypto3 libkeyutils1 libkrb5-26-heimdal libkrb5-3 libkrb5support0 libldap-2.4-2 libmagic1 libp11-kit0 libroken18-heimdal librtmp0 libsasl2-2 libsasl2-modules libsqlite3-0 libtasn1-3 libwind0-heimdal lsb-release mime-support openssl python python-apt python-apt-common python-gnupginterface python-pycurl python-software-properties python2.7 ucf unattended-upgrades xz-lzma 0 upgraded, 47 newly installed, 0 to remove and 0 not upgraded. Need to get 11.6 MB of archives. After this operation, 42.4 MB of additional disk space will be used. Get:1 http://archive.ubuntu.com/ubuntu/ precise/main libapt-inst1.4 amd64 0.8.16~exp12ubuntu10 [102 kB] Get:2 http://archive.ubuntu.com/ubuntu/ precise/main libexpat1 amd64 2.0.1-7.2ubuntu1 [131 kB] Get:3 http://archive.ubuntu.com/ubuntu/ precise/main libsqlite3-0 amd64 3.7.9-2ubuntu1 [348 kB] Get:4 http://archive.ubuntu.com/ubuntu/ precise/main libroken18-heimdal amd64 1.6~git20120311.dfsg.1-2 [46.0 kB] Get:5 http://archive.ubuntu.com/ubuntu/ precise/main libasn1-8-heimdal amd64 1.6~git20120311.dfsg.1-2 [220 kB] Get:6 http://archive.ubuntu.com/ubuntu/ precise/main libgpg-error0 amd64 1.10-2ubuntu1 [14.5 kB] Get:7 http://archive.ubuntu.com/ubuntu/ precise/main libgcrypt11 amd64 1.5.0-3 [280 kB] Get:8 http://archive.ubuntu.com/ubuntu/ precise/main libp11-kit0 amd64 0.12-2ubuntu1 [34.3 kB] Get:9 http://archive.ubuntu.com/ubuntu/ precise/main libtasn1-3 amd64 2.10-1ubuntu1 [43.1 kB] Get:10 http://archive.ubuntu.com/ubuntu/ precise/main libgnutls26 amd64 2.12.14-5ubuntu3 [459 kB] Get:11 http://archive.ubuntu.com/ubuntu/ precise/main libkrb5support0 amd64 1.10+dfsg~beta1-2 [23.5 kB] Get:12 http://archive.ubuntu.com/ubuntu/ precise/main libk5crypto3 amd64 1.10+dfsg~beta1-2 [79.9 kB] Get:13 http://archive.ubuntu.com/ubuntu/ precise/main libkeyutils1 amd64 1.5.2-2 [7862 B] Get:14 http://archive.ubuntu.com/ubuntu/ precise/main libkrb5-3 amd64 1.10+dfsg~beta1-2 [354 kB] Get:15 http://archive.ubuntu.com/ubuntu/ precise/main libgssapi-krb5-2 amd64 1.10+dfsg~beta1-2 [118 kB] Get:16 http://archive.ubuntu.com/ubuntu/ precise/main libidn11 amd64 1.23-2 [112 kB] Get:17 http://archive.ubuntu.com/ubuntu/ precise/main libhcrypto4-heimdal amd64 1.6~git20120311.dfsg.1-2 [103 kB] Get:18 http://archive.ubuntu.com/ubuntu/ precise/main libheimbase1-heimdal amd64 1.6~git20120311.dfsg.1-2 [33.0 kB] Get:19 http://archive.ubuntu.com/ubuntu/ precise/main libwind0-heimdal amd64 1.6~git20120311.dfsg.1-2 [77.8 kB] Get:20 http://archive.ubuntu.com/ubuntu/ precise/main libhx509-5-heimdal amd64 1.6~git20120311.dfsg.1-2 [125 kB] Get:21 http://archive.ubuntu.com/ubuntu/ precise/main libkrb5-26-heimdal amd64 1.6~git20120311.dfsg.1-2 [234 kB] Get:22 http://archive.ubuntu.com/ubuntu/ precise/main libheimntlm0-heimdal amd64 1.6~git20120311.dfsg.1-2 [16.0 kB] Get:23 http://archive.ubuntu.com/ubuntu/ precise/main libgssapi3-heimdal amd64 1.6~git20120311.dfsg.1-2 [108 kB] Get:24 http://archive.ubuntu.com/ubuntu/ precise/main libsasl2-2 amd64 2.1.25.dfsg1-3 [69.8 kB] Get:25 http://archive.ubuntu.com/ubuntu/ precise/main libldap-2.4-2 amd64 2.4.28-1.1ubuntu4 [186 kB] Get:26 http://archive.ubuntu.com/ubuntu/ precise/main librtmp0 amd64 2.4~20110711.gitc28f1bab-1 [57.1 kB] Get:27 http://archive.ubuntu.com/ubuntu/ precise/main openssl amd64 1.0.1-4ubuntu3 [523 kB] Get:28 http://archive.ubuntu.com/ubuntu/ precise/main ca-certificates all 20111211 [169 kB] Get:29 http://archive.ubuntu.com/ubuntu/ precise/main libcurl3-gnutls amd64 7.22.0-3ubuntu4 [227 kB] Get:30 http://archive.ubuntu.com/ubuntu/ precise/main apt-utils amd64 0.8.16~exp12ubuntu10 [191 kB] Get:31 http://archive.ubuntu.com/ubuntu/ precise/main libmagic1 amd64 5.09-2 [217 kB] Get:32 http://archive.ubuntu.com/ubuntu/ precise/main file amd64 5.09-2 [19.7 kB] Get:33 http://archive.ubuntu.com/ubuntu/ precise/main mime-support all 3.51-1ubuntu1 [30.7 kB] Get:34 http://archive.ubuntu.com/ubuntu/ precise/main python2.7 amd64 2.7.3-0ubuntu3 [2663 kB] Get:35 http://archive.ubuntu.com/ubuntu/ precise/main python amd64 2.7.3-0ubuntu2 [166 kB] Get:36 http://archive.ubuntu.com/ubuntu/ precise/main lsb-release all 4.0-0ubuntu20 [10.7 kB] Get:37 http://archive.ubuntu.com/ubuntu/ precise/main ucf all 3.0025+nmu2ubuntu1 [54.4 kB] Get:38 http://archive.ubuntu.com/ubuntu/ precise/main iso-codes all 3.31-1 [3547 kB] Get:39 http://archive.ubuntu.com/ubuntu/ precise/main krb5-locales all 1.10+dfsg~beta1-2 [8886 B] Get:40 http://archive.ubuntu.com/ubuntu/ precise/main libsasl2-modules amd64 2.1.25.dfsg1-3 [63.4 kB] Get:41 http://archive.ubuntu.com/ubuntu/ precise/main python-apt-common all 0.8.3ubuntu7 [21.5 kB] Get:42 http://archive.ubuntu.com/ubuntu/ precise/main python-apt amd64 0.8.3ubuntu7 [188 kB] Get:43 http://archive.ubuntu.com/ubuntu/ precise/main python-gnupginterface all 0.3.2-9.1ubuntu3 [19.2 kB] Get:44 http://archive.ubuntu.com/ubuntu/ precise/main xz-lzma all 5.1.1alpha+20110809-3 [12.4 kB] Get:45 http://archive.ubuntu.com/ubuntu/ precise/main unattended-upgrades all 0.76 [25.1 kB] Get:46 http://archive.ubuntu.com/ubuntu/ precise/main python-pycurl amd64 7.19.0-4ubuntu3 [49.2 kB] Get:47 http://archive.ubuntu.com/ubuntu/ precise/main python-software-properties all 0.82.7 [22.2 kB] debconf: delaying package configuration, since apt-utils is not installed (一部省略) npm http 200 https://registry.npmjs.org/bytes/-/bytes-0.2.0.tgz npm http 200 https://registry.npmjs.org/qs/-/qs-0.6.4.tgz npm WARN engine formidable@1.0.13: wanted: {"node":"<0.9.0"} (current: {"node":"v0.10.22","npm":"1.3.14"}) express@3.2.4 node_modules/express ├── methods@0.0.1 ├── fresh@0.1.0 ├── cookie-signature@1.0.1 ├── range-parser@0.0.4 ├── debug@0.7.4 ├── buffer-crc32@0.2.1 ├── cookie@0.0.5 ├── commander@0.6.1 ├── mkdirp@0.3.4 ├── send@0.1.0 (mime@1.2.6) └── connect@2.7.9 (pause@0.0.1, qs@0.6.4, bytes@0.2.0, formidable@1.0.13) ---> 49a8f7a4de73 Step 10 : EXPOSE 8080 ---> Running in 3c8b55b6db87 ---> af36f5688a4f Step 11 : CMD ["node", "/src/index.js"] ---> Running in 9f1a7146a9c1 ---> b02edbb349f6 Successfully built b02edbb349f6 $ sudo docker commit 9f1a7146a9c1 .h2o/node-hello
イメージ化も終わったので、それじゃあ動かしてみる。
ポートのマッッピング設定を行わないとコンテナ外からは通信できないので注意
(ここではコンテナ内の8080を実環境の8080にマッピングしてcurlでアクセスする)
$ sudo docker run -p 127.0.0.1:8080:8080 -d -i -t .h2o/node-hello /usr/bin/node src/index.js 029894558827 $ sudo docker logs 029894558827 Running on http://localhost:8080 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 029894558827 .h2o/node-hello:latest /usr/bin/node src/in About a minute ago Up About a minute 127.0.0.1:8080->8080/tcp navy_octopus
リアル環境からアクセスしてみると。
$ curl http://localhost:8080/ Hello World
Good Job!
参考にしたページ:
仮想環境構築に docker を使う - apatheia.info
CoreOS を使って docker を体験した - ようへいの日々精進XP