DockerfileでカスタムDockerイメージを作ってみる

  |   2018/08/22 ( 2018/12/31 ) | 333 views
 0

こんにちはー、ニアです。

前に書いた「Dockerを始めてみよう!(インストール~コンテナ立ち上げ)」では、Dockerの公式リポジトリからイメージをダウンロードしてコンテナを立てていきました。

今回は、Dockerfileの機能を使って、カスタマイズしたDockerイメージを作っていきます。

1. Dockerfileは、こんな時に使います

Dockerの公式リポジトリにあるイメージをベースに、必要なパッケージをインストールしたり、環境変数の設定をしたりする時に、Dockerfileを作成して、そこからカスタムDockerイメージを作成することができます。

また、作成したDockerfileを共有することで、他のPC上でも同じ環境を構築することができるので、チームでの開発に便利です。

Nia12.png
Dockerfileの中身はテキスト形式なので、gitなどで管理しやすいですよ

例えば、PHPのDockerイメージにMySQL用のモジュールを追加したカスタムDockerイメージをチーム内で共有すれば、あとでチームメンバーが開発環境を楽に構築できてかつ、PHPモジュールをインストールし忘れるというミスを防ぐことができます。

2. Dockerfileを作ってみよう

今回は、LinuxのイメージにApacheとPHPをインストールし、さらにPHPコンポーネントをいくつか追加したイメージを作っていきます。

Dockerfileと名付けた空のファイルを作り、テキストエディタで開きます。

touch Dockerfile
Nia02.png
私はVisual Studio CodeにDockerプラグインを入れて使ってます。Dockerfileにシンタックスハイライトがかかるので便利ですよ。

今回作成するDockerfileの中身です。

# ベースのイメージにDebian(Streach-slim)を指定します。
FROM debian:stretch-slim

LABEL maintainer "Nia Tomonaka"

# パッケージ情報を更新し、Apache 2とPHP、PHPのコンポーネントをインストールします。
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        apache2 \
        php \
            php-mysql \
            php-xml \
            php-mbstring \
            php-curl \
            php-mcrypt \
            php-zip \
            php-gd \
        curl \
        unzip \
    && rm -rf /var/lib/apt/lists/*

# Apache用の環境変数を設定します。
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2

# 作業ディレクトリを指定します。
WORKDIR /var/www/html

# コンテナの起動時、Apacheをバックグラウンドで起動します。
ENTRYPOINT ["/usr/sbin/apache2", "-D", "FOREGROUND"]

# 80番ポートをListenします。
EXPOSE 80

Dockerfileは上から順にコマンドを実行しています。

FROMコマンドで元となるイメージ名を指定します。今回はDebian(Streachバージョンのslimパッケージ版)のLinuxイメージを指定します。

LABELコマンドは、Docxkerイメージにメタデータを設定します。ここでは、Dockerイメージの作成者として「maintainer」を設定しています。

RUNコマンドは、Linuxではshコマンドを実行します。ここでは、

  • Debianのパッケージ情報の更新
  • Apacheのインストール
  • PHPのインストール
  • PHPのコンポーネントのインストール

をまとめて行います。

Nia02.png
シェルのコマンドは「\」(バックスラッシュ)で改行できるから、コマンドごとに改行すると見やすいよ!

ENVコマンドは、環境変数を設定します。

WORKDIRコマンドは、Dokcerコンテナ内の作業ディレクトリを設定します。

ENTRYPOINTコマンドは、Dockerコンテナを起動した時に実行するコマンドを設定します。apacheの起動コマンドを指定することで、コンテナの起動時にapacheも起動させることができます。

EXPOSEコマンドは、DokcerコンテナがListenするポート番号を指定します。ここでは80番ポート(HTTP)を指定します。

Dockerfileを作成したら、docker buildコマンドを実行して、カスタムDockerイメージの出来上がり。

# docker build -t ${IMAGE_NAME}:${TAG_NAME} ${Dockerfile_DIR}
docker build -t hoge-php:latest ./

Sending build context to Docker daemon  3.072kB
Step 1/12 : FROM debian:stretch-slim
 ---> 184356db7df7

...

Successfully built 1c20d8564d6e
Successfully tagged hoge-php:latest

docker images

早速コンテナを作ってみましょう。

docker run --name hoge_php -p 80:80 -d hoge-php:latest

作成したコンテナの中の/var/www/htmlディレクトリに、phpinfo関数を呼び出すindex.phpを作成すると、

docker exec -it hoge_php bash
echo '<?php phpinfo(); ?>' > index.php
exit

ブラウザから「localhost/index.php」でPHPの情報が表示することができました!

3. おわりに

今回は、Dockerfileを使って自分好みにカスタマイズしたDockerイメージを作成していきました。

ところで、Dockerを使ってWebアプリの開発環境を構築する時、アプリ用コンテナやデータベース用コンテナ、キャッシュ用コンテナなど複数のコンテナを作成して連携することになるのですが、そこでDocker composeという機能を使うと、それらのコンテナを簡単に管理することができます。

次回はDocker composeを使って、何かWebアプリの開発環境を作っていきたいと思います。

それでは、See you〜!

この記事をシェアする
Chronoir.netのRSSフィードを購読する

ニア(Nia)

サーバー・フロント・DB・インフラ(クラウド)エンジニア。主にC#/PHP(最近はTypeScriptも)を使っています。最近はDockerやWebアプリ、UWPやモバイルアプリ開発(Xamarin)、ブロックチェーン等を探求中。好物は紅茶とコーヒー、シラス丼、趣味は写真撮影と音ゲーです

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください