ステータス:非推奨

この記事は非推奨になり、保守されなくなりました。

理由

この記事の手法は時代遅れであり、Dockerのベストプラクティスを反映していない可能性があります。

代わりに参照してください

序章


Webアプリケーションサーバーのリクエストの処理と静的コンテンツの提供に関しては、長年にわたって試行錯誤されてきたNginxが、今日では非常に人気のある選択肢です。 docker を使用してアプリケーションをコンテナー化する場合、ほとんどの状況でNginxにそれらを提供させることは同様に理にかなっています。 結局のところ、これらのコンテナーを使用すると、アプリケーションを簡単に移植し、高速に拡張して、ホストに別のレイヤーを追加できます(つまり、 液滴)セキュリティ。

このDigitalOceanの記事では、Dockerをすばやくセットアップし、ベースイメージからDockerコンテナーを作成し、Nginxをレイヤーごとに実行するように構築する方法について学習します。 その後、最初からの手順に従って、このプロセス全体を自動化するDockerfileを作成します。 最終的に、このNginx Dockerイメージを使用して、Nginxを実行する自己完結型のサンドボックスを作成できます。これを使用して、「ドッキングされた」アプリケーションを提供できます。

用語集


1. Dockerの概要


2. Nginxの概要


3. UbuntuへのDockerのインストール


4. 基本的なDockerコマンド


  1. Dockerデーモンの実行とCLIの使用法
  2. Dockerコマンド

5. NginxがインストールされたDockerコンテナの構築


  1. UbuntuからベースDockerコンテナを作成する
  2. Nginxインストール用のベースコンテナの準備
  3. Nginxのインストール
  4. Nginxの構成

6. イメージを自動的にビルドするDockerfileの作成


  1. Dockerfileの基本
  2. Dockerfileコマンドの概要
  3. Dockerfileの作成
  4. 基礎の定義
  5. Nginxのインストール手順
  6. ブートストラップ
  7. 最終的なDockerfile
  8. 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オペレーティングシステムにデプロイできます。

Ubuntu13.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コンテナに接続することは、別の内部から新しいドロップレットに接続するようなものです。

このコンテナに戻るには:

  1. sudo dockerpsを使用して実行中のすべてのコンテナーを一覧表示します
  2. そのIDを見つける
  3. 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

以上です! これで、-p 80:80フラグを使用して設定したように、ポート80で外部からアクセスできるDockerコンテナーでNginxが実行されます。

覚えておいてください:この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:使用するベースイメージを設定します
  • MAINTAINER:Dockerfileの作成者/所有者データを設定します
  • 実行:コマンドを実行し、終了結果(コンテナー)イメージをコミットします
  • ユーザー:イメージからコンテナーを実行するようにユーザーを設定します
  • ボリューム:ホストからコンテナにディレクトリをマウントします
  • WORKDIR:CMDのディレクティブを実行するディレクトリを設定します

Dockerfileの作成


nanoテキストエディタを使用して現在の場所にDockerfileを作成するには、次のコマンドを実行します。

sudo nano 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つを使用して、イメージを直接ビルドして実行できます。

テキストエディタnanoを使用してサンプルnginx.confを作成します。

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のインストールドキュメントを確認してください。

投稿者: https ://twitter.com/ostezer