ステータス:非推奨

この記事は廃止され、メンテナンスされなくなりました。

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

この記事は参照として役立つ場合がありますが、機能しない場合やベストプラクティスに従わない場合があります。 使用しているオペレーティングシステム用に書かれた最近の記事を使用することを強くお勧めします。

この記事の最新バージョンは、 Ubuntu16.04にDockerをインストールして使用する方法で入手できます。

序章


提供されるユースケースは無限であり、ニーズは常に存在しています。 https://www.docker.io/ ”> Dockerは、システムやマシン間でアプリケーションを移植するための効率的でスピーディーな方法を提供するためにここにあります。 軽量で無駄がないため、アプリケーションをすばやく封じ込めて、独自の安全な環境内で実行できます(Linuxコンテナー:LXC経由)。

このDigitalOceanの記事では、Dockerを徹底的に紹介することを目的としています。Dockerは、近年実現する最もエキサイティングで強力なオープンソースプロジェクトの1つです。 Dockerは、その機能を1つの文に要約しようとするのは不公平です。

用語集


1. Docker


2. Dockerプロジェクトとその主要部分


3. DockerElements


  1. Dockerコンテナ
  2. Dockerイメージ
  3. Dockerfiles

4. Dockerをインストールする方法


5. Dockerの使用方法


  1. 始まり
  2. 画像の操作
  3. コンテナの操作

Docker


開発マシンから本番用のリモートサーバーまで、または他の場所で使用するためにすべてをパッケージ化する場合でも、アプリケーションスタックをその依存関係と一緒に移植し、問題なく実行することは常に課題です。 実際、課題は計り知れず、これまでのところ、解決策は大衆にとって実際に成功しているとは証明されていません。

一言で言えば、プロジェクトとしてのdockerは、仮想または物理のシステムやマシン間でアプリケーションを形成するすべてのものを運ぶための高レベルのツールの完全なセットを提供し、それによってより多くの大きな利点をもたらします。

Dockerは、 Linux Containers を介して堅牢なアプリケーション(したがって、プロセスとリソース)の封じ込めを実現します(例: 名前空間およびその他のカーネル機能)。 そのさらなる機能は、プロジェクト自体のパーツとコンポーネントに由来し、プロセスを安全に含むことに関して、システムとアプリケーションの管理に使用される低レベルLinuxツール/APIの操作の複雑さをすべて引き出します。

Dockerプロジェクトとその主要部分


Dockerプロジェクト(2013年3月にdotCloudによってオープンソース化された)は、いくつかの主要な部分(アプリケーション)と要素(これらの部分で使用される)で構成され、すべて[ほとんど] Linuxが提供する既存の機能、ライブラリ、フレームワークの上に構築されていますカーネルおよびサードパーティ(例: LXC、device-mapper、aufsなど)。

Dockerのメインパーツ


  1. dockerデーモン:実行するホスト上のdocker(LXC)コンテナーを管理するために使用されます
  2. docker CLI:dockerデーモンのコマンドと通信に使用されます
  3. Dockerイメージインデックス:Dockerイメージのリポジトリ(パブリックまたはプライベート)

主なDocker要素


  1. Dockerコンテナ:アプリケーションのすべてを含むディレクトリ
  2. Dockerイメージ:コンテナーまたはベースOSのスナップショット(例: Ubuntu)画像
  3. Dockerfiles:イメージのビルドプロセスを自動化するスクリプト

DockerElements


次の要素は、Dockerプロジェクトを形成するアプリケーションによって使用されます。

Dockerコンテナ


Dockerを使用してアプリケーションを移植する手順全体は、コンテナーの出荷のみに依存しています。

Dockerコンテナは基本的に、パックできるディレクトリです(例: tar-archived)を他のマシンと同じように共有し、さまざまな異なるマシンやプラットフォーム(ホスト)で共有して実行します。 唯一の依存関係は、コンテナを実行するようにホストを調整することです(つまり、 Dockerをインストールします)。 ここでの封じ込めは、 Linux Containers (LXC)を介して取得されます。

LXC(Linuxコンテナー)

Linuxコンテナーは、さまざまなカーネルレベルの機能の組み合わせとして定義できます(つまり、 Linuxカーネルができること)。これにより、独自の環境に含まれるアプリケーション(およびそれらが使用するリソース)の管理が可能になります。 特定の機能を利用することにより(例: 名前空間、chroots、cgroups、SELinuxプロファイル)、LXCにはアプリケーションプロセスが含まれており、リソースを制限したり、独自のファイルシステム(親の名前空間へのアクセス)を超えて到達したりできないようにすることで、管理を支援します。

DockerとそのcontainersはLXCを利用しますが、さらに多くの機能を提供します。

Dockerコンテナ


Dockerコンテナにはいくつかの主な機能があります。

彼らは許可します。

  • アプリケーションの移植性
  • プロセスの分離
  • 外での焼き戻しの防止
  • リソース消費の管理

さらに、分離されたアプリケーションの展開に使用される従来の仮想マシンよりもはるかに少ないリソースで済みます。

それらは許可しません許可します。

  • 他のプロセスをいじる
  • 「依存関係地獄」を引き起こす
  • または別のシステムで作業していない
  • 攻撃に対して脆弱であり、すべてのシステムのリソースを悪用する

そして(また)もっと。

LXCに基づいており、技術的な観点からは、これらのコンテナーはディレクトリのようなものです(ただし、整形およびフォーマットされたものです)。 これにより、コンテナの移植性および段階的ビルドが可能になります。

各コンテナはonionのように階層化され、コンテナ内で実行される各アクションは、前のブロックの上に別のブロック(実際にはファイルシステム内の単純な変更に変換されます)を配置することで構成されます。 そして、さまざまなツールと構成により、このセットアップは完全に調和のとれた方法で機能します(例: ユニオンファイルシステム)。

このコンテナの使用方法により、新しいコンテナとイメージを簡単に起動して作成できるという大きなメリットがあります。これにより、軽量に保たれます(段階的かつ階層化された方法で構築されます)。 すべてがファイルシステムに基づいているため、スナップショットの作成とロールバックの実行は安価(つまり、 バージョン管理システム(VCS)のように、非常に簡単に実行できます(リソースに負担がかかりません)。

dockerコンテナーは、 docker image から始まります。これは、他のアプリケーションやレイヤーのベースを形成します。

Dockerイメージ


Dockerイメージは、すべてがformで始まるからのdockerコンテナーのベースを構成します。 これらは、サーバーまたはデスクトップコンピューターでアプリケーションを実行するために使用されるデフォルトのオペレーティングシステムのディスクイメージと非常によく似ています。

これらの画像を持っている(例: Ubuntuベース)は、システム間でシームレスな移植性を可能にします。 それらは、アプリケーションを実行するために必要なすべてのものを備えた、堅固で一貫性のある信頼できる基盤を作ります。 すべてが自己完結型であり、システムレベルの更新または変更のリスクが排除されると、コンテナーは、それを故障させる可能性のある外部の露出の影響を受けなくなります-依存関係地獄を防ぎます。

ベースの上にさらにレイヤー(ツール、アプリケーションなど)が追加されると、これらの変更をコミットすることで新しいイメージを形成できます。 保存されたコンテナから新しいコンテナが作成されたとき(つまり、 コミットされた)イメージ、物事は中断したところから続きます。 また、ユニオンファイルシステムは、コンテナーを操作するときに、すべてのレイヤーを1つのエンティティとしてまとめます。

これらのベースイメージは、 docker CLI を使用して新しいコンテナーを直接作成するときに明示的に指定できます。または、自動イメージ構築用にDockerfile内で指定することもできます。

Dockerfiles


Dockerfiles は、新しいDockerイメージを形成するために実行される一連の命令、指示、およびコマンドを含むスクリプトです。 実行された各コマンドは、タマネギの新しい層に変換され、最終製品を形成します。 それらは基本的に、すべてを手動で繰り返し行うプロセスに取って代わります。 Dockerfile の実行が終了すると、イメージが形成され、それを使用して開始します(つまり、 作成)新しいコンテナ。

Dockerをインストールする方法


当初、dockerはUbuntuでのみ利用可能でした。 現在、RHELベースのシステムにDockerをデプロイすることが可能です(例: CentOS)なども同様です。

Ubuntuのインストールプロセスを簡単に見ていきましょう。

注: Dockerは、起動時にこのスクリプトをユーザーデータに追加することで、Dropletに自動的にインストールできます。 ドロップレットユーザーデータの詳細については、このチュートリアルをご覧ください。

Ubuntuのインストール手順


ビルド済みのアプリケーションイメージを使用する以外に、Dockerを入手する最も簡単な方法は、64ビットのUbuntu14.04VPSを使用することです。

ドロップレットを更新します。

sudo apt-get update
sudo apt-get -y upgrade

aufsサポートが利用可能であることを確認してください:

sudo apt-get install linux-image-extra-`uname -r`

パッケージ検証のためにDockerリポジトリキーをapt-keyに追加します。

sudo apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

DockerリポジトリをAptソースに追加します。

echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" | sudo tee /etc/apt/sources.list.d/docker.list

新しい追加でリポジトリを更新します。

sudo apt-get update

最後に、dockerをダウンロードしてインストールします。

sudo apt-get install docker-engine

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の使用方法


Dockerをインストールすると、その直感的な使用経験により、操作が非常に簡単になります。 これで、Dockerデーモンがバックグラウンドで実行されるようになります。 そうでない場合は、次のコマンドを使用してdockerデーモンを実行します。

Dockerデーモンを実行するには:

sudo docker -d &

使用構文:

Dockerを(CLI経由で)使用するには、一連のオプションとコマンドを渡し、その後に引数を渡します。 dockerが機能するには、sudo権限が必要であることに注意してください。

sudo docker [option] [command] [arguments]

注:以下の手順と説明は、ガイドとして使用し、Dockerの使用と操作の全体像を示すために提供されています。 これに慣れるための最良の方法は、新しいVPSで練習することです。 何かを壊すことを恐れないでください-実際、物事を壊してください! Dockerを使用すると、進行状況を保存して、そこから非常に簡単に続行できます。

始まり


dockerが持つ利用可能なすべてのコマンドを確認することから始めましょう。

使用可能なすべてのコマンドのリストについては、Dockerに問い合わせてください。

sudo docker

現在(0.7.1以降)使用可能なすべてのコマンド:

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
wait      Block until a container stops, then print its exit code

システム全体の情報とDockerのバージョンを確認してください。

# For system-wide information on docker:
sudo docker info

# For docker version:
sudo docker version

画像の操作


詳細に説明したように、Dockerコンテナーでの作業を開始するための鍵は、イメージを使用することです。 docker image index で無料で利用できる画像が多数あり、 CLI を使用すると、画像リポジトリにクエリを実行したり、新しい画像をダウンロードしたりできます。

準備ができたら、そこで画像を共有することもできます。 詳細については、さらに下の「プッシュ」のセクションを参照してください。

Dockerイメージの検索:*

# Usage: sudo docker search [image name]
sudo docker search ubuntu

これにより、クエリUbuntuに一致するすべての利用可能な画像の非常に長いリストが提供されます。

画像のダウンロード(プル):

コンテナを構築/作成するとき、または作成する前に、コンテナが存在するホストマシンにイメージが存在する必要があります。 画像をダウンロードするには(おそらく「検索」に続いて)、pullを実行して画像を取得できます。

# Usage: sudo docker pull [image name]
sudo docker pull ubuntu

画像の一覧表示:

コミットして作成した画像(詳細は以下を参照)を含む、システム上のすべての画像は、「画像」を使用して一覧表示できます。 これにより、使用可能なすべてのものの完全なリストが提供されます。

# Example: sudo docker images
sudo docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
my_img              latest              72461793563e        36 seconds ago      128 MB
ubuntu              12.04               8dbd9e392a96        8 months ago        128 MB
ubuntu              latest              8dbd9e392a96        8 months ago        128 MB
ubuntu              precise             8dbd9e392a96        8 months ago        128 MB
ubuntu              12.10               b750fe79269d        8 months ago        175.3 MB
ubuntu              quantal             b750fe79269d        8 months ago        175.3 MB

画像への変更のコミット:

コンテナを操作し、そのコンテナに対してアクションを実行し続けると(例: ソフトウェアのダウンロードとインストール、ファイルの構成など)、その状態を維持するには、「コミット」する必要があります。 コミットすることで、次に使用するときに、すべてが離れた場所から継続するようになります(つまり、 画像)。

# Usage: sudo docker commit [container ID] [image name]
sudo docker commit 8dbd9e392a96 my_img

画像の共有(プッシュ):

現時点では少し早いですが、の記事で、他の人と共有したい独自のコンテナを作成したら、プッシュを使用してを作成できます。 誰もがダウンロードして使用できるインデックスに掲載されている画像。

すべての変更を「コミット」することを忘れないでください。

# Usage: sudo docker push [username/image name]  
sudo docker push my_username/my_first_image

注:画像をDockerインデックスにプッシュするには、index.docker.ioでサインアップする必要があります。

コンテナの操作


イメージを使用してプロセスを「実行」すると、代わりにコンテナが作成されます。 プロセスがアクティブに実行されている場合、このコンテナーは非実行コンテナーになります。 それでも、 rm コマンドで削除するまで、それらはすべてシステムに存在します。

現在のすべてのコンテナの一覧表示:

デフォルトでは、以下を使用して、すべてのrunningコンテナーをリストできます。

sudo docker ps

実行中非実行中の両方のリストを作成するには、次を使用します。

sudo docker ps -l 

新しいコンテナの作成


現在、何も実行せずにコンテナを作成することはできません(つまり コマンド)。 新しいコンテナを作成するには、ベースイメージを使用し、実行するコマンドを指定する必要があります。

# Usage: sudo docker run [image name] [command to run]
sudo docker run my_img echo "hello"

# To name a container instead of having long IDs
# Usage: sudo docker run -name [name] [image name] [comm.]
sudo docker run -name my_cont_1 my_img echo "hello"

これにより「hello」が出力され、元の場所に戻ります。 (すなわち ホストのシェル)

コンテナーを作成した後に実行するコマンドを変更することはできないため(したがって、「作成」中にコンテナーを指定する)、プロセスマネージャーやカスタム起動スクリプトを使用してさまざまなコマンドを実行できるようにするのが一般的です。

コンテナの実行:

コンテナーを作成して停止した場合(プロセスが終了したか、明示的に停止したため)、「run」を使用して、コンテナーの作成に使用したのと同じコマンドでコンテナーを再び機能させることができます。

# Usage: sudo docker run [container ID]
sudo docker run c629b7d70666

コンテナを見つける方法を覚えていますか? それらのリストについては、上記のセクションを参照してください。

コンテナの停止:

コンテナのプロセスの実行を停止するには:

# Usage: sudo docker stop [container ID]
sudo docker stop c629b7d70666

コンテナの保存( commit ting):

コンテナで行った進行状況と変更を保存したい場合は、上記で説明した「コミット」を使用して、イメージとして保存できます。

このコマンドは、コンテナをimageに変換します。

dockerを使用すると、コミットが安価になることを忘れないでください。 それらを使用して画像を作成し、コンテナの進行状況を保存したり、必要なときにロールバックしたりすることを躊躇しないでください(例: 時間のスナップショットのように)。

コンテナの削除/削除:

コンテナのIDを使用して、rmでコンテナを削除できます。

# Usage: sudo docker rm [container ID]
sudo docker rm c629b7d70666

Dockerについて詳しくは、 http: //docs.docker.io/en/latest/をご覧ください。 ”>公式ドキュメント

覚えておいてください:dockerでは物事が非常に速く進んでいます。 コミュニティの勢いは驚くべきものであり、多くの大企業がサポートの提供に参加しようとしています。 ただし、この製品にはまだ本番環境対応のラベルが付いていないため、ミッションクリティカルな展開で100%信頼されることはお勧めしません-まだ。 リリースがリリースされたら必ず確認し、Dockerのすべてを常に把握してください。

投稿者: https ://twitter.com/ostezer ”> OS Tezer