Carpe Diem

  Top > スポンサー広告> Docker > Dockerfile を作る  

スポンサーサイト

-- - --/-- [--] - --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Dockerfile を作る

2014 - 09/15 [Mon] - 13:09

前回は docker のコマンドを叩いて試してみました。
今回は Dockerfile なるものを作ってコンテナを起動してみます。
Dockerfile の中で使われるコマンドは以下です。

コマンド用途
FROM元となるDockerイメージの指定
MAINTAINER作者名
RUNビルド時のコマンドの実行
ADDファイル・ディレクトリの追加
CMDdocker run 時の実行コマンド1
ENTRYPOINTdocker run 時の実行コマンド2
WORKDIR作業ディレクトリの指定
ENV環境変数の指定
USER実行ユーザの指定
EXPOSEポートのエクスポート
VOLUMEボリュームのマウント


◆Apache を起動してみよう
Apache を起動するコンテナを Dockerfile から作成します。

$ emacs -nw Dockerfile

FROM ubuntu:latest

MAINTAINER Cicatrice

RUN apt-get update; apt-get -y install apache2

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2

EXPOSE 80

CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]



◆イメージをビルド
apacheというイメージ名でビルドします。最後に「.」があるので注意。Dockerfile のあるディレクトリを指定してます。

$ docker build -t apache .
Sending build context to Docker daemon 2.56 kB
Sending build context to Docker daemon
Step 0 : FROM ubuntu:latest
Pulling repository ubuntu
~~~~~~~~~~~~~~~~~~~~~~~~~いろいろログが出る
Successfully built 3f0133501f53

確認してみましょう。

$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
apache latest 3f0133501f53 29 seconds ago 228.9 MB
ubuntu latest 826544226fdc 10 days ago 194.2 MB

大丈夫ですね。
ちなみに「Successfully built 〜〜」と出ないと失敗したゴミイメージができちゃうので(noneと表示されます)、その時はきちんと削除しておきましょう。


◆起動

$ docker run -p 80:80 -d apache

プロセス確認。

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
50d29075796d apache:latest /usr/sbin/apache2ctl 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp prickly_engelbart

ちゃんと生きたコンテナがいますね。
動作確認してみましょう。

$ curl localhost

Apache のHTMLが表示されたらOKです。


◆以下解説
①FROM ubuntu:latest
最新のUbuntuを引っ張ってきます。

②MAINTAINER Cicatrice
この Dockerfile の作者の名前です。
通常つけるらしいです。

③RUN apt-get update; apt-get -y install apache2
RUN を使うと sudo ユーザでコマンドを実行できます。
なので apt でインストールします。

④ENV APACHE_RUN_USER www-data
 ENV APACHE_RUN_GROUP www-data
 ENV APACHE_LOG_DIR /var/log/apache2
環境変数を設定します。無いとビルド時にコケます。

⑤EXPOSE 80
使用するポートを解放します。

⑥CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
docker run 時に実行するコマンドを指定します。
Docker はなにかプロセスがフォアグラウンドで起動しないとコンテナがすぐストップしてしまいます。
なのでapacheをフォアグラウンドで起動するように引数を指定します。

またDockerは基本的に1プロセスしか起動しないので、CMDを複数使ったりENTRYPOINTを複数書いても無意味です。ご注意下さい。

複数プロセスを使いたいときは supervisord というマルチプロセスデーモンを利用します。


ソース:
Dockerfileとdocker buildコマンドでDockerイメージの作成 (1/2)

コメントの投稿





管理者にだけ表示を許可する

 | ホーム | 

プロフィール

Cicatrice

Author:Cicatrice
備忘録

検索フォーム

カテゴリ

最新記事

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。