fbpx

Ebook連載:『5分x10回で学ぶ 開発者のためのDocker コンテナ入門』第7章 –コンテナ化アプリの実行 #docker #DX #Mirantis

コンテナ化はDXの第一歩に最適な取り組みです。本シリーズでは10回にわたってMirantis社が発行するEbook「Learn Containers 5 Minutes at a Time An introductory guide for developers」 (Eric Gregory著)を翻訳・編集し、チャプターごとにCL LABで公開しています。本稿はその第7章です。皆さまのクラウドネイティブジャーニーやアプリケーションのモダナイズの一助になれば幸いです。

  • 第1章 コンテナとは?
  • 第2章 コンテナの作成・調査・削除
  • 第3章 Dockerfile でのコンテナイメージのビルド
  • 第4章 イメージレジストリ
  • 第5章 ボリュームと永続的なストレージ
  • 第6章 コンテナネットワークとコンテナのポートの開設
  • 第7章 コンテナ化アプリの実行
  • 第8章 ユーザ定義ネットワーク上のマルチコンテナアプリケーション
  • 第9章 Docker Compose
  • 第10章 Webアプリをコンテナサービスとして構築する

第7章: コンテナ化アプリの実行

前章では、コンテナネットワーキングの中核となる概念を定義し、コンテナのポートを公開してコンテナのサービスを外部からのトラフィックに開放する方法を学びました。この章ではこれまで学んだことをまとめて、永続ボリュームと公開ポートがあるコンテナ化された Web アプリを起動します。今回は知識共有型の Wiki プラットフォームを作成します。

これまで学んだことのおさらい

Wikipedia は Mediawiki というオープンソースのプラットフォームで構築されており、そのアプリケーションの公式 Docker イメージはDocker Hubで管理されています。つまり、あなた専用の Wiki プラットフォームを簡単に、しかも5分もかからずに立ち上げることができます。

このアプリケーションのデプロイの基本構成は非常にシンプルで、アプリケーション用の単一のコンテナでボリュームにデータを書き込むよう設定されています。また、商用利用に耐えうるグレードのデータベースを実行している第2のコンテナと連携して動作するオプションもあります。これは、wiki を実際に公開する場合に使用されるであろうオプションです。

この章の演習では、まず単一のコンテナ構成から始めますが、それだけにとどまらず、8章ではコンテナと連携して、より実運用に近い構成にする方法について説明します。

しかし、この章では、Wiki の立ち上げに集中しましょう。

演習: コンテナ化 されたWiki アプリケーション

Wiki の永続的なデータを格納する新しいボリュームを作成するところから始めましょう。

% docker volume create wiki-data

公式 Mediawiki イメージを基盤とする Docker コンテナを実行し、ホストマシンのアプリケーションにアクセスできるようにポートを公開し、ボリュームを追加しましょう。

% docker run --name solo-wiki -v wiki-data:/wiki-data -p 8000:80 -d mediawiki

ウェブブラウザから localhost:8000 にアクセスすると、アプリのセットアップが必要であることがわかります。“Set up the wiki”をクリックします。

言語を選択し、Continue ボタンをクリックします。

環境チェックをパスしたら、Continue ボタンをクリックします。

データベースの設定画面で、SQLite を選択し、data directory テキストボックスにボリュームでリンクしたディレクトリ wiki-data/ を入力します。

Continue ボタンをクリックします。

wiki に名前を付け、管理者アカウントのユーザ名とパスワードを作成し、インストールを完了します。画面に congratulations と表示され、LocalSettings.php というファイルが自動的にあなたのマシンにダウンロードされるはずです。もし自動的に行われない場合は、リンクをクリックしてください。

このファイルは、データベースの種類・サーバ・認証情報など、選択した設定を取り込み、アプリで使用される変数と関連付けます。

ダウンロードした LocalSettings.php ファイルを、ホストマシンと wiki をインストールしたベースディレクトリに設置する必要があります。設置する方法は数多くありますが、今回は実行中のコンテナ内に入り、Shell セッションを開きファイルを手動で追加してみましょう。

% docker exec -it solo-wiki bash

次のコマンドでディレクトリのファイルを確認しましょう。

% root@e9537d7c33e3:/var/www/html# ls -1a
.
..
CODE_OF_CONDUCT.md
COPYING
CREDITS
FAQ
HISTORY
INSTALL
README.md
RELEASE-NOTES-1.37
SECURITY
UPGRADE
api.php
autoload.php
cache
composer.json
composer.local.json-sample
docs
extensions
images
img_auth.php
includes
index.php
jsduck.json
languages
load.php
maintenance
mw-config
opensearch_desc.php
resources
rest.php
skins
tests
thumb.php
thumb_handler.php
vendor
wiki-data

ここに LocalSettings.php ファイルを配置します。配置する方法は、ホストマシンのテキストエディタ nano でファイルを開き、あなたのマシンにあるLocalSettings.php ファイルの全ての内容をコピーして、コンテナ内のLocalSettings.php ファイルにペーストします。

% touch LocalSettings.php

nano エディタをダウンロードします。

% apt update
% apt install nano

nano で開いたLocalSettings.php ファイルにペーストし、CTRL+Oでファイルを保存し、CTRL+Xで Shell を抜けてから、apt remove nano で nano を削除します。使用済みのアプリを削除することは、イメージのフットプリントを最適化するための弛まぬ努力となります。塵も積もれば山となる、です。習慣付けておきましょう。

ここで、永続ボリューム以外で変更を行ったのでコンテナのファイルシステム自体に変更を加えました。新しいターミナルタブで、この変更を新しいイメージにコミットしておきます。

% docker commit solo-wiki solo-wiki

ここでは、solo-wiki という名前のコンテナの状態を、solo-wiki という同じ名前の新しいイメージにコミットしています。このイメージをローカルに保存することで、これまで作業していたコンテナを停止して削除することができます。

% docker container stop solo-wiki
% docker container rm solo-wiki

保存したイメージから、最初に実行した wiki コンテナとよく似たコマンド文で、新しいコンテナを作成してみましょう。

% docker run --name solo-wiki -v wiki-data:/wiki-data -p 8000:80 -d solo-wiki

今回異なる唯一の点は、先ほどコミットした solo-wiki を基盤のイメージとして新しいコンテナを作成し、そのイメージにはすでに LocalSettings.php ファイルが含まれ、ボリュームにもすでに設定データが含まれていることです。

localhost:8000 をブラウザからアクセスすると、構成済みのwikiがあるはずです。

管理者アカウントでログインして、メインページに変更を加えてみてください。

% docker container stop solo-wiki
% docker container start solo-wiki

これで、単一のコンテナで動作するWiki のコンテナ化アプリケーションが完成しました。次章では、コンテナの基礎学習を続け、アプリケーションのマルチコンテナ構成について学びます。

※Docker Enterprise事業は2019年11月14日にMirantis社によって買収されました。
当時のDocker Enterprise製品は、現在は下記のように名称変更されています。

Mirantis製品に関するお問い合わせはこちら

Mirantisについて
Mirantisは、Fortune 1000 企業の 2/3 以上にコンテナやマルチクラウドの導入を加速させ、データセンター運用のストレスを取り除く支援をしています。日本では、クリエーションラインと提携し、Kubernetes、OpenStack、その他のオープンクラウドテクノロジーを、現地語でのサポートやサービスとともに提供しています。Mirantis Kubernetes Engine(旧Docker Enterprise)および関連製品を含む、深い技術的専門知識とベンダーにとらわれない柔軟なプラットフォームが、お客様から選ばれています。
詳細は www.mirantis.com でご確認ください。

新規CTA