Dockerの説明:Memcachedを実行するDockerコンテナを作成する方法
ステータス:非推奨
この記事は非推奨になり、保守されなくなりました。
理由
この記事の手法は時代遅れであり、Dockerのベストプラクティスを反映していない可能性があります。
代わりに参照してください
序章
ほとんどのWebアプリケーションでは、CPUがドロップされたHTTP要求の原因であるか、それらをホストしているWebサーバーを窒息させていることを見つけることは非常にまれです。 これは通常、キャッシュレイヤーが関与しない、設計が不十分なセットアップであり、バックエンドデータストアのすべてのリソースを消費します(つまり、 選択したデータベース)。
Memcached (これまでは紹介する必要はありません)は、使用可能なリソースを変更することなく、アプリケーションデプロイメントスタックのパフォーマンスを大幅に向上させることができます(ジュースの最後のビットをすべて絞ることができます)。
このDigitalOceanの記事では、特に複数のWebアプリケーションをホストしている人を念頭に置いてください(例: 複数のWordPressインスタンス、Pythonアプリケーションなど)、 docker イメージを作成して、個別に操作できる Memcachedコンテナーの実行をすばやく開始します(オンデマンド)。 これらのコンテナーは、独自の環境内で保持および保護されており、ホストされているアプリケーションと連携して、コンテナーの改善と高速化を支援します。
用語集
1. Dockerの概要
2. Memcachedの概要
3. UbuntuへのDockerのインストール
4. 基本的なDockerコマンド
- Dockerデーモンの実行とCLIの使用法
- dockerコマンド
5. Memcachedイメージの作成を開始する
- 簡単な要約:Dockerfilesとは何ですか?
- Dockerfileコマンドの概要
- Dockerfileの作成
- 最終的なDockerfile
- MemcachedコンテナのDockerイメージの作成
6. ドッキングされたMemcachedコンテナの実行
- Memcachedでインストールされたコンテナの作成
- Memcachedコンテナのメモリを制限する
- Memcachedコンテナのテスト
Dockerの概要
dockerプロジェクトは、いくつかのLinuxカーネル機能の上に構築された、連携して動作する高レベルのツールを提供します。 目標は、開発者とシステム管理者が、すべての依存関係を組み合わせてアプリケーションを移植し、システムとマシン間で実行できるようにすることです。頭痛の種はありません。
Dockerは、安全なLXC(つまり、 Linux Containers)Dockerコンテナと呼ばれるアプリケーション用のベースの環境。 これらのコンテナーは、Dockerイメージを使用して作成されます。このイメージは、コマンドを手動で実行するか、Dockerfileを介して自動的に実行することで構築できます。
注: Dockerとそのパーツの詳細(例: dockerデーモン、CLI、イメージなど)、プロジェクトの紹介記事をチェックしてください: docker Explained:GettingStarted。
Memcachedの概要
Memcachedは、分散型のオープンソースデータストレージエンジンです。 特定の種類のデータを(低速の従来のディスクではなく)RAMに保存して、アプリケーションによる非常に高速な取得を実現するように設計されており、より重いデータセットやAPIなどに対して実行されるクエリの数を減らすことでリクエストの処理にかかる時間を短縮します。従来のデータベース(例: MySQL)。
スマートで、よく計画され、最適化されたキャッシングメカニズムを導入することにより、一見大量のリクエストを処理し、アプリケーションによるより多くの手順を実行することが可能になります。 これは、他のキャッシングアプリケーションやコンポーネントと同様に、Memcachedの最も重要なユースケースです。
Memcachedは、Webサイトやその他のさまざまなアプリケーションの本番環境に大きく依存し、使用されており、追加のハードウェアを使用することなく、パフォーマンスを向上させるための頼りになるツールの1つになっています。 より多くのサーバーまたはサーバーリソース)。
これは、キーとそれに対応する値(最大1 MBのサイズ)を連想配列(つまり、 ハッシュテーブル)これは、スケーリングして多数の仮想サーバーに分散できます。
UbuntuへのDockerのインストール(最新)
VPSでDockerプロジェクトの使用を開始するには、Ubuntu 13.04用のDigitalOceanのDockerイメージを使用するか、自分でインストールします。 このセクションでは、Docker0.7.1の基本的なインストール手順について簡単に説明します。
Ubuntuのインストール手順
ドロップレットを更新します。
sudo aptitude update
sudo aptitude -y upgrade
aufsサポートが利用可能であることを確認してください:
sudo aptitude install linux-image-extra-`uname -r`
パッケージ検証のためにDockerリポジトリキーをapt-keyに追加します。
sudo sh -c "wget -qO- https://get.docker.io/gpg | apt-key add -"
Dockerリポジトリをaptitudeソースに追加します。
sudo sh -c "echo deb http://get.docker.io/ubuntu docker main\
> /etc/apt/sources.list.d/docker.list"
新しい追加でリポジトリを更新します。
sudo aptitude update
最後に、dockerをダウンロードしてインストールします。
sudo aptitude install lxc-docker
Ubuntuのデフォルトファイアウォール( UFW :Uncomplicated Firewall)は、Dockerが必要とするすべての転送トラフィックをデフォルトで拒否します。
UFWで転送を有効にする:
nanoテキストエディタを使用してUFW設定を編集します。
sudo nano /etc/default/ufw
下にスクロールして、DEFAULT_FORWARD_POLICYで始まる行を見つけます。
交換:
DEFAULT_FORWARD_POLICY="DROP"
と:
DEFAULT_FORWARD_POLICY="ACCEPT"
CTRL + X を押し、 Y で承認して、保存して閉じます。
最後に、UFWをリロードします。
sudo ufw reload
基本的なDockerコマンド
dockerの使用を開始する前に、最初の Getting Started の記事から、使用可能なコマンドをすばやく調べてメモリを更新しましょう。
Dockerデーモンの実行とCLIの使用法
インストール時に、dockerデーモンはバックグラウンドで実行され、dockerCLIによって送信されたコマンドを受け入れる準備ができている必要があります。 dockerを手動で実行する必要がある特定の状況では、以下を使用します。
Dockerデーモンの実行:
sudo docker -d &
docker CLIの使用法:
sudo docker [option] [command] [arguments]
注: dockerを機能させるには、sudo権限が必要です。
コマンドリスト
現在利用可能な(バージョン0.7.1)dockerコマンドの概要は次のとおりです。
添付
実行中のコンテナに接続する
建てる
Dockerfileからコンテナーを構築する
専念
コンテナの変更から新しいイメージを作成します
cp
コンテナファイルシステムからホストパスにファイル/フォルダをコピーします
差分
コンテナのファイルシステムの変更を検査します
イベント
サーバーからリアルタイムのイベントを取得する
書き出す
コンテナのコンテンツをtarアーカイブとしてストリーミングする
歴史
画像の履歴を表示する
画像
画像を一覧表示
輸入
tarballのコンテンツから新しいファイルシステムイメージを作成します
情報
システム全体の情報を表示する
入れる
画像にファイルを挿入する
検査する
コンテナに関する低レベルの情報を返します
殺す
実行中のコンテナを強制終了します
ロード
tarアーカイブから画像をロードする
ログインする
Dockerレジストリサーバーに登録またはログインします
ログ
コンテナのログを取得します
ポート
PRIVATE_PORTにNAT変換された公開ポートを検索します
ps
コンテナの一覧表示
引く
Dockerレジストリサーバーからイメージまたはリポジトリをプルします
押す
イメージまたはリポジトリをDockerレジストリサーバーにプッシュします
再起動
実行中のコンテナを再起動します
rm
1つ以上のコンテナを削除します
rmi
1つ以上の画像を削除する
走る
新しいコンテナでコマンドを実行する
保存する
画像をtarアーカイブに保存します
探す
Dockerインデックスで画像を検索する
始める
停止したコンテナを起動します
止まる
実行中のコンテナを停止します
鬼ごっこ
画像をリポジトリにタグ付けする
上
コンテナの実行中のプロセスを検索します
バージョン
Dockerのバージョン情報を表示する
Memcachedイメージの作成を開始する
dockerシリーズの以前の記事から得た知識に基づいて、Dockerfileの構築に飛び込み、dockerにMemcachedでインストールされたイメージ(サンドボックス化されたMemcachedインスタンスの実行に使用される)を自動的に構築させましょう。
簡単な要約:Dockerfilesとは何ですか?
Dockerfileは、新しいdockerイメージを自動的に作成するために、dockerによって指定された順序で実行される、連続して宣言されたコマンドを含むスクリプトです。 それらは展開に大いに役立ちます。
これらのファイルは常に、FROMコマンドを使用したベースイメージの定義で始まります。 そこから、ビルドプロセスが開始され、実行された後続の各アクションが、ホスト上でコミット(イメージ状態の保存)を伴う最終を形成します。
使用法:
# Build an image using the Dockerfile at current location
# Tag the final image with [name] (e.g. *nginx*)
# Example: sudo docker build -t [name] .
sudo docker build -t memcached_img .
注: Dockerfileの詳細については、次の記事をご覧ください: Dockerの説明:Dockerfileを使用したイメージの構築の自動化。
Dockerfileコマンドの概要
追加
ホストからコンテナにファイルをコピーします
CMD
実行またはENTRYPOINTに渡されるデフォルトのコマンドを設定します
エントリーポイント
コンテナ内にデフォルトのエントリポイントアプリケーションを設定します
ENV
環境変数を設定します(例: 「キー=値」)
公開
ポートを外部に公開する
から
使用するベースイメージを設定します
メンテナ
Dockerfileの作成者/所有者データを設定します
走る
コマンドを実行し、終了結果(コンテナー)イメージをコミットします
ユーザー
イメージからコンテナーを実行するようにユーザーを設定します
音量
ホストからコンテナにディレクトリをマウントします
WORKDIR
実行するCMDのディレクティブのディレクトリを設定します
Dockerfileの作成
Dockerfileはプレーンテキストドキュメントで構成されているため、Dockerfileを作成すると、お気に入りのテキストエディターを起動し、イメージを構築するためにdockerに実行させるコマンドを記述します。 ファイルの作業を開始したら、最終結果を保存する前に、以下のすべてのコンテンツを(次々に)追加し続けます。
注:このセクションの最後で、最終的なDockerfileがどのようになるかを確認できます。
nanoテキストエディタを使用して空のDockerfileを作成しましょう:
nano Dockerfile
すべての命令(コマンド)とディレクティブを順番にリストする必要があります。 ただし、すべてはベースイメージ(FROMコマンドで設定)に基づいて構築することから始まります。
Dockerfileの目的を定義し、使用するベースイメージを宣言しましょう。
############################################################
# Dockerfile to run Memcached Containers
# Based on Ubuntu Image
############################################################
# Set the base image to use to Ubuntu
FROM ubuntu
# Set the file maintainer (your name - the file's author)
MAINTAINER Maintaner Name
この最初のコマンドと宣言のブロックの後、Memcachedのインストール手順の一覧表示から始めることができます。
# Update the default application repository sources list
RUN apt-get update
# Install Memcached
RUN apt-get install -y memcached
コンテナの外部に公開するデフォルトのポートを設定します。
# Port to expose (default: 11211)
EXPOSE 11211
デフォルトの実行コマンドとentrpointを設定します(つまり Memcachedデーモン):
# Default Memcached run command arguments
CMD ["-u", "root", "-m", "128"]
# Set the user to run Memcached daemon
USER daemon
# Set the entrypoint to memcached binary
ENTRYPOINT memcached
最終的なDockerfile
############################################################
# Dockerfile to run Memcached Containers
# Based on Ubuntu Image
############################################################
# Set the base image to use to Ubuntu
FROM ubuntu
# Set the file maintainer (your name - the file's author)
MAINTAINER Maintaner Name
# Update the default application repository sources list
RUN apt-get update
# Install Memcached
RUN apt-get install -y memcached
# Port to expose (default: 11211)
EXPOSE 11211
# Default Memcached run command arguments
CMD ["-m", "128"]
# Set the user to run Memcached daemon
USER daemon
# Set the entrypoint to memcached binary
ENTRYPOINT memcached
すべてをDockerfile内に書き込んだら、それを保存し、CTRL+Xに続けてYを押して終了します。
このDockerfileを使用して、ドッキングされたMemcachedコンテナーを開始する準備が整いました。
MemcachedコンテナのDockerイメージの作成
これで、Dockerfileの基本セクションで説明されている使用手順に従って、最初のMemcachedイメージを作成できます。
次のコマンドを実行して、「memcached_img」というタグが付けられたイメージを作成します。
sudo docker build -t memcached_img .
注:dockerがDockerfile
を見つけるための末尾の.
を忘れないでください。
ドッキングされたMemcachedコンテナの実行
前のセクションで取得したイメージのおかげで、完全に分離された自己完結型のmemcachedインスタンス( now )をいくつでも作成するのは非常に簡単です。 docker run
で新しいコンテナを作成するだけです。
Memcachedでインストールされたコンテナの作成
新しいコンテナを作成するには、次のコマンドを使用して、この例に従って要件に合うように変更します。
# Example: sudo docker run -name [container name] -p [port to access:port exposed] -i -t [memcached image name]
sudo docker run -name memcached_ins -d -p 45001:11211 memcached_img
これで、ポート 45001 、run
から、以前に作成した「memcached_img」というタグの付いたイメージを使用してアクセスできる、「memcached_ins」という名前のDockerコンテナが作成されます。
Memcachedコンテナのメモリを制限する
Dockerコンテナプロセスが使用できるメモリの量を制限するには、-m [memory amount]
フラグに制限を設定するだけです。
256MBに制限されたメモリでコンテナを実行するには:
# Example: sudo docker run -name [name] -m [Memory (int)][memory unit (b, k, m or g)] -d (to run not to attach) -p (to set access and expose ports) [image ID]
sudo docker run -name memcached_ins -m 256m -d -p 45001:11211 memcached_img
メモリ制限を確認するために、コンテナを検査できます。
# Example: docker inspect [container ID] | grep Memory
sudo docker inspect memcached_ins | grep Memory
注:上記のコマンドは、検査出力からメモリ関連情報を取得します。 コンテナに関連するすべての情報を表示するには、sudo docker inspect [container ID]
を選択してください。
Memcachedコンテナのテスト
新しく作成したMemcached実行コンテナを試すにはさまざまな方法があります。 これには、単純なPythonCLIアプリケーションを使用します。 ただし、キャッシュアドオン、フレームワーク、またはライブラリを使用して、アプリケーションで本番環境に移行することができます。
ホストにPython/Memcachedに必要なライブラリがあることを確認してください。
sudo apt-get update && sudo apt-get -y upgrade
sudo apt-get install -y python-pip
pip install python-memcached
nanoを使用して「mc.py」という簡単なPythonスクリプトを作成しましょう。
nano cache.py
以下の(自明の)コンテンツをコピーして貼り付けます。
# Import python-memcache and sys for arguments
import memcache
import sys
# Set address to access the Memcached instance
addr = 'localhost'
# Get number of arguments
# Expected format: python cache.py [memcached port] [key] [value]
len_argv = len(sys.argv)
# At least the port number and a key must be supplied
if len_argv < 3:
sys.exit("Not enough arguments.")
# Port is supplied and a key is supplied - let's connect!
port = sys.argv[1]
cache = memcache.Client(["{0}:{1}".format(addr, port)])
# Get the key
key = str(sys.argv[2])
# If a value is also supplied, set the key-value pair
if len_argv == 4:
value = str(sys.argv[3])
cache.set(key, value)
print "Value for {0} set!".format(key)
# If a value is not supplied, return the value for the key
else:
value = cache.get(key)
print "Value for {0} is {1}.".format(key, value)
CTRL + Xを押し、Yで承認して保存して閉じます。
ホストから上記のスクリプトを使用してdockermemcachedインスタンスをテストします。
# Example: python cache.py [port] [key] [value]
python cache.py 45001 my_test_key test_value
# Return: Value for my_test_key set
# See if the key is set:
python cache.py 45001 my_test_key
# Return: Value for my_test_key is test_value.
dockerをインストールして使用するための完全な手順については、docker.ioにあるdockerのドキュメントを確認してください。