Dockerは、Linuxコンテナーを搭載した拡張可能なオープンソースエンジンであり、アプリケーションのデプロイをポータブルで軽量、そして自給自足のコンテナーとして自動化します。このチュートリアルでは、コンピューティングインスタンスの設定と保護で概説されている手順を実行し、システムが最新であり、SSH経由でrootとしてLinodeにログインしていることを前提としています。
インストール
このガイドでは、Ubuntu12.04とCentOS6.4の両方にDockerをインストールする方法を説明します。Dockerはこれらの各ディストリビューションにリポジトリを提供し、インストールを簡単にします。
Ubuntu 12.04 64bit
ここでは、Ubuntu用のDockerが管理するリポジトリを追加し、ソフトウェアをインストールします。
-
DockerはDockerのUbuntuリポジトリでパッケージとして利用できますが、64ビットのみです。まず、
apt-key
を使用してDockerリポジトリキーを追加する必要があります :sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
-
Dockerリポジトリをaptソースに追加します:
echo "deb http://get.docker.io/ubuntu docker main" | sudo tee /etc/apt/sources.list.d/docker.list
-
次のコマンドを実行してapt-getupdateを実行し、
lxc-docker
をインストールします :sudo apt-get update sudo apt-get install lxc-docker
-
インストールが正常に完了したことを確認するには、サンプルのUbuntuコンテナを起動します。このコマンドは、欠落している画像を自動的に取得し、コンテナーを実行して、インタラクティブなbashセッションを提供します。
sudo docker run -i -t ubuntu /bin/bash
出力は次のようになります。
# docker run -i -t ubuntu /bin/bash Unable to find image 'ubuntu' (tag: latest) locally Pulling repository ubuntu 8dbd9e392a96: Download complete b750fe79269d: Download complete 27cf78414709: Download complete [email protected]:/#
-
コンテナを終了するには、
exit
と入力します 。
CentOS664ビット
Dockerは、EPELリポジトリでdocker-io
として入手できます。 64ビット専用のパッケージ。
-
EPELリポジトリを追加するには、latestepel-releaseパッケージをインストールします。
-
Dockerをインストールするには、次のコマンドを実行します。
sudo yum -y install docker-io
-
Dockerデーモンを起動するには、
service
を呼び出します :sudo service docker start
-
Dockerデーモンを起動時に起動する場合は、次のコマンドを発行します。
sudo chkconfig docker on
-
インストールが正常に完了したことを確認するには、サンプルのFedoraコンテナーを起動します。このコマンドは、欠落している画像を自動的に取得し、コンテナーを実行して、インタラクティブなbashセッションを提供します。
sudo docker run -i -t fedora /bin/bash
-
コンテナを終了するには、
exit
と入力します 。
Dockerで何ができますか?
Dockerを使用すると、ユーザーはアプリケーションと構成を軽量イメージにパッケージ化して、ポータブルコンテナーとしてデプロイできます。
HelloWorld
「helloworld」を出力するDockerコンテナーを実行するには、次のコマンドを実行します。
docker run ubuntu /bin/echo hello world
hello world
を返す必要があります 。
これにより、Dockerにいくつかのことを実行するように指示されます。
- 画像(Ubuntu)がまだローカルに存在しない場合は、DockerIndexからダウンロードしてください。
- 読み取り/書き込みファイルシステムとネットワークインターフェイスを備えたベースUbuntuイメージを使用して新しいコンテナを作成します。
- コンテナにIPアドレスを割り当てます。コンテナとの間でトラフィックを転送するようにNATを設定します。
- コマンド
/bin/echo hello world
を実行します 、出力を印刷します。 - メインプロセスが完了すると、コンテナは終了します。
Nginx用のDockerfileの書き込み
イメージをビルドするとき、DockerはDockerfile
という名前のファイルに設定された命令に従います。 。ファイルにはDockerfile
という名前を付ける必要があることに注意してください また、Dockerfileに必要なすべてのファイルまたはフォルダは、Dockerfile
と同じディレクトリにある必要があります。
echo
のようなプログラムを実行する Dockerコンテナでの使用は非常に簡単です。ただし、Nginxなどのサーバーとして機能するプログラムの場合は、プログラムが自己デーモン化しないように構成されていることを確認する必要があります。
これはNginxのDockerfileの例です:
FROM ubuntu:12.04
MAINTAINER Jon Chen "[email protected]"
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
VOLUME /etc/nginx/sites-enabled
VOLUME /var/log/nginx
EXPOSE 80
CMD ["nginx"]
Dockerfileの構文は次のようになります:
# Comment
INSTRUCTION arguments
Dockerは、Dockerfile命令を上から下に順番に実行します。最初の指示は必須 FROM
である 、新しいイメージを作成するベースイメージを指定します:
FROM ubuntu:12.04
これにより、公式のUbuntu12.04イメージがベースイメージとして設定されます。また、MAINTAINER命令を使用して、画像の作成者を定義することもできます。
MAINTAINER Jon Chen "[email protected]"
次に、RUN
命令はイメージに対してコマンドを実行し、結果をコミットします。各コミットは保存され、次の命令に使用されます。たとえば、このRUN
行は/etc/apt/sources.list
の内容を置き換えます deb http://archive.ubuntu.com/ubuntu precise main universe
の画像 :
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
Nginxなどのプログラムで覚えておくべき重要なことは、プログラムがデーモンとして実行されないようにすることです。デーモンとしてのNginxのデフォルトの動作は、ワーカープロセスをフォークしてから、マスタープロセスを終了することです。 Dockerは元のプロセスのPIDのみを監視するため、コンテナーは永続的に実行されるのではなく、途中で停止します。デーモン化を無効にするには、daemonoff構成ディレクティブを/etc/nginx/nginx.conf
に追加します :
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
コンテナ内のポートをコンテナ外に公開するには、EXPOSE命令を使用します。
EXPOSE 80
CMD命令は、コンテナの起動時に実行されるデフォルトのコマンドを定義します。この例では、Nginxを実行します:
CMD ["nginx"]
デフォルトでは、Dockerコンテナには永続ストレージがありません。コンテナ間でデータを共有するには、VOLUME機能を使用します:
VOLUME /etc/nginx/sites-enabled
VOLUME /var/log/nginx
ホストからコンテナにディレクトリをマウントするには、コンテナを実行するときに、コマンドラインでホストディレクトリ、対応するコンテナディレクトリ、およびディレクトリのアクセス許可を指定する必要があります。
-v=[]: Create a bind mount with: [host-dir]:[container-dir]:[rw|ro].
If "host-dir" is missing, then docker creates a new volume.
このイメージを作成するには、Dockerfileと同じディレクトリで次のコマンドを実行します。 -t repo/tag
を使用して、画像のリポジトリとタグを指定することもできます :
docker build -t bsdlp/nginx .
次のコマンドを実行して、/etc/nginx/sites-enabled
を追加します および/var/log/nginx
ホストからコンテナへのボリュームとして、コンテナをデーモンとして起動し、コンテナからポート80をホストのポート80として公開します。
docker run -d -p 80:80 -v /etc/nginx/sites-enabled:/etc/nginx/sites-enabled -v /var/log/nginx:/var/log/nginx bsdlp/nginx
詳細情報
このトピックの詳細については、次のリソースを参照してください。これらは有用であることを期待して提供されていますが、外部でホストされている資料の正確性や適時性を保証することはできません。
- Dockerのスタートガイド
- GitHubのDocker
- 公式のDockerイメージインデックス