ステータス:非推奨
この記事は廃止され、メンテナンスされなくなりました。
理由
この記事の手法は時代遅れであり、Dockerのベストプラクティスを反映していない可能性があります。
代わりに参照してください
序章
Webアプリケーションサーバーのリクエストの処理と静的コンテンツの提供に関しては、長年にわたって試行錯誤されてきたNginxが、今日では非常に人気のある選択肢です。 docker を使用してアプリケーションをコンテナー化する場合、Nginxにそれらを提供させることは、ほとんどの状況で同様に理にかなっています。 結局のところ、これらのコンテナを使用すると、アプリケーションを簡単に移植し、高速に拡張して、ホストに別のレイヤーを追加できます(つまり、 液滴)セキュリティ。
このDigitalOceanの記事では、Dockerをすばやくセットアップし、ベースイメージからDockerコンテナーを作成し、Nginxをレイヤーごとに実行するように構築する方法について学習します。 その後、最初からの手順に従って、このプロセス全体を自動化するDockerfileを作成します。 最終的に、このNginx Dockerイメージを使用して、Nginxを実行する自己完結型のサンドボックスを作成できます。これを使用して、「ドッキングされた」アプリケーションを提供できます。
用語集
1. Dockerの概要
2. Nginxの概要
3. UbuntuへのDockerのインストール
4. 基本的なDockerコマンド
- Dockerデーモンの実行とCLIの使用法
- Dockerコマンド
5. NginxがインストールされたDockerコンテナの構築
- UbuntuからベースDockerコンテナを作成する
- Nginxインストール用のベースコンテナの準備
- Nginxのインストール
- Nginxの構成
6. イメージを自動的にビルドするDockerfileの作成
- Dockerfileの基本
- Dockerfileコマンドの概要
- Dockerfileの作成
- 基礎の定義
- Nginxのインストール手順
- ブートストラップ
- 最終的なDockerfile
- Dockerfileを使用してNginxコンテナを自動的に構築する
Dockerの概要
dockerプロジェクトは、いくつかのLinuxカーネル機能の上に構築された、連携して動作する高レベルのツールを提供します。 目標は、開発者とシステム管理者がアプリケーションを移植し(すべての依存関係を組み合わせて)、システムとマシン間で実行できるようにすることです。頭痛の種はありません。
Dockerは、安全なLXC(つまり、 Linux Containers)「dockercontainers」と呼ばれるアプリケーション用のベースの環境。 これらのコンテナーは、Dockerイメージを使用して作成されます。これは、コマンドを手動で実行するか、Dockerfilesを介して自動的に実行することで構築できます。
注: Dockerとそのパーツの詳細(例: dockerデーモン、CLI、イメージなど)、プロジェクトの紹介記事をチェックしてください: docker Explained:GettingStarted。
Nginxの概要
Nginxは非常に高性能なWebサーバー/(リバース)プロキシです)。 軽量で、操作が比較的簡単で、拡張が簡単なため(アドオン/プラグインを使用)、人気を博しています。 そのアーキテクチャのおかげで、多くのリクエスト(実質的に無制限)を処理できます。これは、アプリケーションやWebサイトの負荷によっては、古い代替手段を使用して対処するのが非常に難しい場合があります。 画像、スクリプト、スタイルシートなどの静的ファイルを提供するために選択するのは、ツールと見なすことができます。
UbuntuへのDockerのインストール(最新)
最新のリリース( 0.7.1。は12月5日付け)で、dockerはUbuntu/DebianやCentOS/RHELを含むさまざまなLinuxオペレーティングシステムにデプロイできます。
Ubuntu 13.04で構築されたDigitalOceanのすぐに使用できるDockerイメージを使用すると、すぐに開始できることを忘れないでください。
Ubuntu(最新)のインストールプロセスを簡単に説明します。
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権限が必要です。
Dockerコマンド
現在利用可能な(バージョン 0.7.1 )dockerコマンドの概要は次のとおりです。
attach: Attach to a running container
build: Build a container from a Dockerfile
commit: Create a new image from a container's changes
cp: Copy files/folders from the containers filesystem to the host path
diff: Inspect changes on a container's filesystem
events: Get real time events from the server
export: Stream the contents of a container as a tar archive
history: Show the history of an image
images: List images
import: Create a new filesystem image from the contents of a tarball
info: Display system-wide information
insert: Insert a file in an image
inspect: Return low-level information on a container
kill: Kill a running container
load: Load an image from a tar archive
login: Register or Login to the docker registry server
logs: Fetch the logs of a container
port: Lookup the public-facing port which is NAT-ed to PRIVATE_PORT
ps: List containers
pull: Pull an image or a repository from the docker registry server
push: Push an image or a repository to the docker registry server
restart: Restart a running container
rm: Remove one or more containers
rmi: Remove one or more images
run: Run a command in a new container
save: Save an image to a tar archive
search: Search for an image in the docker index
start: Start a stopped container
stop: Stop a running container
tag: Tag an image into a repository
top: Lookup the running processes of a container
version: Show the docker version information
さぁ、始めよう!
===
NginxがインストールされたDockerコンテナの構築
DockerをVPSにインストールし、そのコマンドをすばやく確認したら、Nginxを実行するDockerコンテナーを作成する実際の作業を開始する準備が整いました。
注:このセクションを実行すると、NginxがインストールされたDockerコンテナーが実行されますが、複雑であるため、推奨される方法ではありません。 ただし、ここでは、ライブコンテナーの操作方法を学び、プロセスを自動化するために後で定義する必要のあるコマンドに慣れるための機会を提供します。 Nginxをより適切にインストールしてDockerイメージを作成するには、次のセクションを参照してください:Dockerfileを作成してNginxイメージを自動的にビルドする。
UbuntuからベースDockerコンテナを作成する
dockerのRUNコマンドを使用して、Ubuntuイメージに基づいて新しいコンテナーを作成することから始めます。 「-t」フラグを使用して端末を接続します。
sudo docker run -i -t -p 80:80 ubuntu /bin/bash
注:このコマンドを実行した後、dockerは新しいコンテナーを作成する前にUbuntuイメージをプルする必要がある場合があります。
覚えておいてください:作成したコンテナに接続されます。 自分自身を切り離してメインターミナルのアクセスポイントに戻るには、エスケープシーケンスを実行します:CTRL+Pに続いてCTRL+Q。 Dockerコンテナに接続することは、別の内部から新しいドロップレットに接続するようなものです。
このコンテナに戻るには:
- sudo dockerpsを使用して実行中のすべてのコンテナーを一覧表示します
- そのIDを見つける
- sudo docker attach [id] を使用して、端末に接続し直します
重要:コンテナー内にあるため、ホストに影響を与えることなく、以下のすべてのコマンドがそこで実行されることを忘れないでください。
Nginxインストール用のベースコンテナの準備
Nginxとプロセスに必要なツールをインストールするには、関連するアプリケーションリポジトリがダウンロード可能である必要があります。
Ubuntuのuniverseをベースイメージのデフォルトリストに追加しましょう。
echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
新しく追加されたソースでリストを更新します。
apt-get update
Nginxのインストールに進む前に、万が一の場合に備えて、nanoなどのいくつかのツールをインストールする必要があります。
apt-get install -y nano \
wget \
dialog \
net-tools
Nginxのインストール
リポジトリで利用できるようになっているおかげで、apt-getを使用してnginxをダウンロードしてインストールできます。
apt-get install -y nginx
Nginxの構成
前の手順でインストールしたテキストエディターnanoを使用して、アプリケーションサーバーへの接続をプロキシするためのサンプルNginx構成を作成しましょう。
# Delete the default configuration
rm -v /etc/nginx/nginx.conf
# Create a blank one using nano text editor
nano /etc/nginx/nginx.conf
まず、ファイルの先頭に、ではなくに行を追加して、Nginxがプロセスを生成して終了するようにする必要があります。
これを許可できない理由は、Dockerが実行する単一のプロセス(それでもプロセスマネージャーになることもあります)と、そのプロセスがいつ停止するか(つまり、 労働者を産卵した後に終了する)、コンテナは停止します。
の最初の行として以下から始めます nginx.conf
:
daemon off;
簡単なサンプル構成を使用して、Nginxをリバースプロキシとして実行します。 次の後にコピーして貼り付けます daemon off;
命令。
worker_processes 1;
events { worker_connections 1024; }
http {
sendfile on;
gzip on;
gzip_http_version 1.0;
gzip_proxied any;
gzip_min_length 500;
gzip_disable "MSIE [1-6]\.";
gzip_types text/plain text/xml text/css
text/comma-separated-values
text/javascript
application/x-javascript
application/atom+xml;
# List of application servers
upstream app_servers {
server 127.0.0.1:8080;
}
# Configuration for the server
server {
# Running port
listen 80;
# Proxying the connections connections
location / {
proxy_pass http://app_servers;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
}
保存して終了し、CTRL+Xを押してYで確定します。
Nginxを実行するには、次のコマンドを実行できます。
service nginx start
以上です! これで、NginxがDockerコンテナーで実行され、ポート 80 を使用して設定したときに、外部からアクセスできます。 -p 80:80
国旗。
覚えておいてください:このNginxファイルは、正しく構成されていても、現在サーバー上で実行されているアプリケーションサーバーがないため、何も実行しません。 これの代わりに、アプリケーションサーバーをインストールして機能させるまで、HTTPヘッダーをテストするためのフォワードプロキシとして機能する別の例をコピーして使用できます。
イメージを自動的にビルドするDockerfileの作成
前のステップで述べたように、スケーラブルな生産のためにこの方法でコンテナを作成することは確かに推奨される方法ではありません。 正しい方法は、Dockerfilesを使用して構造化された方法でビルドプロセスを自動化することと見なすことができます。
コンテナ内にNginxをダウンロードしてインストールするために必要なコマンドを実行した後、同じ知識を使用して、dockerがイメージを構築するために使用できるDockerfileを作成し、Nginxインスタンスを簡単に実行できます。
Dockerfileの作業を開始する前に、基本を簡単に説明しましょう。
Dockerfileの基本
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 nginx_img .
注: Dockerfileの詳細については、次の記事をご覧ください: Dockerの説明:Dockerfileを使用したイメージの構築の自動化。
Dockerfileコマンドの概要
- 追加:ファイルをホストからコンテナーにコピーします
- CMD:実行される、またはENTRYPOINTに渡されるデフォルトのコマンドを設定します
- ENTRYPOINT:コンテナ内にデフォルトのエントリポイントアプリケーションを設定します
- ENV:環境変数を設定します(例: キー=値)
- EXPOSE:ポートを外部に公開します
- FROM:使用するベースイメージを設定します
- メンテナ:Dockerfileの作成者/所有者データを設定します
- 実行:コマンドを実行し、終了結果(コンテナー)イメージをコミットします
- ユーザー:イメージからコンテナーを実行するようにユーザーを設定します
- ボリューム:ホストからコンテナにディレクトリをマウントします
- WORKDIR:CMDのディレクティブを実行するディレクトリを設定します
Dockerfileの作成
nanoテキストエディタを使用して現在の場所にDockerfileを作成するには、次のコマンドを実行します。
sudo nano Dockerfile
注:次のすべての行を次々に追加して、保存してビルドに使用するDockerfileを作成します。
基礎の定義
次のような基本(基本)を定義することから、Dockerfileを始めましょう。 FROM
画像(すなわち Ubuntu)と MAINTAINER
.
############################################################
# Dockerfile to build Nginx Installed Containers
# Based on Ubuntu
############################################################
# Set the base image to Ubuntu
FROM ubuntu
# File Author / Maintainer
MAINTAINER Maintaner Name
Nginxのインストール手順
前のセクションの手順に従って、Nginxをインストールするためのブロックを作成しましょう。
# Install Nginx
# Add application repository URL to the default sources
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
# Update the repository
RUN apt-get update
# Install necessary tools
RUN apt-get install -y nano wget dialog net-tools
# Download and Install Nginx
RUN apt-get install -y nginx
ブートストラップ
Nginxをインストールするための手順を追加したら、Nginxの構成を終了し、Dockerfileでデフォルトの構成ファイルをビルド中に提供したものに置き換えます。
# Remove the default Nginx configuration file
RUN rm -v /etc/nginx/nginx.conf
# Copy a configuration file from the current directory
ADD nginx.conf /etc/nginx/
# Append "daemon off;" to the beginning of the configuration
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
# Expose ports
EXPOSE 80
# Set the default command to execute
# when creating a new container
CMD service nginx start
最終的なDockerfile
結局、これはDockerfileがどのように見えるべきかです:
############################################################
# Dockerfile to build Nginx Installed Containers
# Based on Ubuntu
############################################################
# Set the base image to Ubuntu
FROM ubuntu
# File Author / Maintainer
MAINTAINER Maintaner Name
# Install Nginx
# Add application repository URL to the default sources
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
# Update the repository
RUN apt-get update
# Install necessary tools
RUN apt-get install -y nano wget dialog net-tools
# Download and Install Nginx
RUN apt-get install -y nginx
# Remove the default Nginx configuration file
RUN rm -v /etc/nginx/nginx.conf
# Copy a configuration file from the current directory
ADD nginx.conf /etc/nginx/
# Append "daemon off;" to the beginning of the configuration
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
# Expose ports
EXPOSE 80
# Set the default command to execute
# when creating a new container
CMD service nginx start
CTRL + Xを押し、Yで確定して、ファイルを再度保存して終了します。
Dockerfileを使用してNginxコンテナを自動的に構築する
「基本」セクションで最初に説明したように、Dockerfilesの使用法は、「dockerbuild」コマンドを使用してそれらを呼び出すことです。
Dockerに構成をコピーするように指示しているので(つまり nginx.conf)を現在のディレクトリからデフォルトのディレクトリに置き換えるには、ビルドプロセスを開始する前に、このディレクトリをこのDockerfileと一緒に配置する必要があります。
注: Nginx構成でをコピーする上記の手順では、構成ファイルを作成するためにコンテナーをアタッチしたりデタッチしたりする必要がないため、柔軟性が高く、時間を大幅に節約できます。 これで、1つを使用して、イメージを直接ビルドして実行できます。
サンプルを作成する nginx.conf
テキストエディタnanoの使用:
sudo nano nginx.conf
そして、その内容を置き換えて、テスト用のフォワードプロキシとして使用します。
worker_processes 1;
events { worker_connections 1024; }
http {
sendfile on;
server {
listen 80;
location / {
proxy_pass http://httpstat.us/;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
CTRL + Xを押してYで確定することにより、同じ方法でnginx.confを保存して終了しましょう。
このDockerイメージを使用すると、すべての進行状況を移植し、1つのコマンドでNginxを実行するコンテナーをすばやく作成できます。
使用を開始するには、次のコマンドを使用して新しいコンテナイメージを作成します。
sudo docker build -t nginx_img_1 .
そして、nginx_img_1としてタグ付けしたその画像を使用して、新しいコンテナを実行できます。
sudo docker run -name nginx_cont_1 -p 80:80 -i -t nginx_img_1
これで、ドロップレットのIPアドレスにアクセスできます。これで、Dockerコンテナーを実行しているNginxがその役割を果たし、HTTPステータステストページに転送されます。
例:
# Usage: Visit http://[my droplet's ip]
http://95.85.10.236/200
サンプル応答:
200 OK
docker(他のOSを含む)をインストールするための完全な手順については、docker.ioにあるdockerインストールドキュメントを確認してください。