DUICUO

Docker 初心者から上級者まで(パート 1):基本操作

1. Docker を使用する理由

Dockerは、開発されたアプリケーションのコンテナへのデプロイを自動化するオープンソースエンジンです。Docker Inc.チームによって開発され、Apache 2.0オープンソースライセンスの下でライセンスされています。シンプルで軽量なモデリングアプローチを提供することで、開発ライフサイクルの効率化と高速化を実現し、サービス指向アーキテクチャ設計を促進します。Dockerプロジェクトの目標は、軽量なオペレーティングシステム仮想化ソリューションを実現することです。Dockerは、Linux Containers (LXC)などの技術を基盤としています。DockerはLXCをさらにカプセル化することで、ユーザーがコンテナ管理を煩わされることなく、運用を大幅に簡素化します。Dockerコンテナの操作は、高速で軽量な仮想マシンの操作と同じくらい簡単です。

Docker の機能:

1. より迅速な配信と展開

2. より効率的な仮想化

3. 移行と拡張が容易

4. よりシンプルな管理

コンテナ テクノロジと従来の仮想マシンのパフォーマンス比較:

Dockerと仮想マシンアーキテクチャの比較

Dockerコンテナは、本質的にはホストマシン上で実行されるプロセスです。Dockerは、名前空間によるリソースの分離、cgroupによるリソース制限、そしてコピーオンライトによる効率的なファイル操作を実現します。

Docker には 5 つの名前空間があります。

プロセス、ネットワーク、マウント、ホスト、共有メモリ

問題のあるアプリケーションを分離するために、Dockerは名前空間を用いてプロセスを分離し、プロセスまたはプロセスグループごとに独立したランタイム空間を作成し、各プロセスに異なる名前空間ビューを提供します。このように、分離された各プロセスグループは外部からはコンテナとして認識されます。Dockerはユーザーにすべてのリソースにアクセスできると誤解させますが、これは「仮想マシン」ではないことに注意が必要です。

Dockerの3つの概念:イメージ、コンテナ、リポジトリ

1. イメージ:Dockerイメージは、Dockerコンテナの作成に使用できる読み取り専用のテンプレートです。Dockerは、イメージを作成したり、既存のイメージを更新したりするための非常にシンプルなメカニズムを提供しています。ユーザーは、他のユーザーが作成したイメージをダウンロードして直接使用することもできます。

イメージとはファイル構造です。Dockerfile内の各コマンドはファイルシステム内に新しい階層を作成し、ファイルシステムはこれらの統合されたファイルシステム上に構築されます。Dockerの公式ウェブサイトには、利用可能なすべてのイメージを保存するための専用ページがあります。URLはindex.docker.ioです。

2. コンテナ:コンテナとは、イメージから作成された実行中のインスタンスです。起動、停止、削除が可能です。各コンテナは独立した安全なプラットフォームです。コンテナは、簡略化されたLinux環境と見なすことができます。Dockerはコンテナを使用してアプリケーションを実行します。イメージは読み取り専用で、コンテナの起動時に最上位層として書き込み可能なレイヤーが作成されます。

3. リポジトリ:リポジトリはイメージファイルを一元的に保存する場所です。レジストリサーバーは通常、複数のリポジトリをホストし、各リポジトリには複数のイメージが含まれており、各イメージには異なるタグが付けられています。現在、最も広く利用されているパブリックリポジトリはDocker Hubで、ユーザーがダウンロードできる膨大な数のイメージを保存しています。

Dockerリポジトリはイメージの保存に使用されます。独自のイメージを作成したら、`push`コマンドを使用してパブリックまたはプライベートリポジトリにアップロードできます。その後、別のマシンでこのイメージを使用するときは、リポジトリからプルするだけです。Dockerリポジトリの概念はGitに似ており、レジストリサーバーはGitHubのようなホスティングサービスと捉えることができます。

2. Dockerをインストールする

前提条件:Dockerはカーネル要件が比較的高いため、一般的にUbuntuなどのプラットフォームで実行することが推奨されます。ただし、コンテナ標準として、DockerはCentOS、Mac OS X、Windowsなどの他のプラットフォームもサポートしています。現在、DockerはCentOS 7(64ビット)、CentOS 6.5(64ビット)以降のCentOSバージョンをサポートしています。CentOS 6.5以降を実行する場合は、これらのカーネルにDocker実行用の特定の変更が含まれているため、カーネルバージョン2.6.32-431以上が必要です。

DockerはデフォルトのストレージドライバとしてAUFSを使用しますが、LinuxメインラインカーネルにはAUFSは含まれていません。CentOSでは、カーネルバージョン2.6.9で導入された機能であるDevice Mapperをストレージドライバとして使用できます。まず、この機能が有効になっているかどうかを確認する必要があります。

CentOS 7のインストール

Docker RPM パッケージはすでに CentOS-Extra リポジトリに含まれているため、Yum を使用して直接インストールできます。

  1. # yum で docker をインストール

CentOS 6.6のインストール

CentOS 6.6には既に同じ名前の実行可能システムパッケージ「docker」が存在することに注意してください。そのため、Docker RPMパッケージの名前は「docker-io」となり、まずdockerをアンインストールします。

  1. # yum -y docker を削除します

ステップ3: Docker-IOをインストールする

  1. # yum -y docker-io をインストール

これでDockerのインストールは完了です。

  1. # /etc/init.d/docker start # Dockerを起動する 
  2. # docker info # Dockerの基本情報を表示する

III. 基本的なDocker操作

  1. # docker search centos # コンテナを検索
  2.   
  3. # docker pull centos # コンテナをダウンロード
  4.   
  5. # docker イメージ # 現在存在するイメージを表示する
  6.   
  7. # docker run centos /bin/echo 'hello world' # 単一のコマンドを実行して終了します。
  8.   
  9. # docker run --name mydocker -it centos /bin/bash # Dockerコンテナに入る 
  10. -t オプションを使用すると、Docker は疑似端末 (疑似 tty) を割り当て、それをコンテナの標準入力にバインドできます。
  11. -i オプションはコンテナの標準入力を開いたままにします。
  12. 名前カスタム名を使用する
  13. # docker run -d --name mynginx nginx # nginx イメージを起動します。存在しない場合は自動的にプルされます。  
  14.   
  15. # docker stop bfd094233f96 # コンテナを停止し、コンテナIDで削除します
  16.   
  17. # docker rm bfd094233f96 # コンテナを削除する
  18.   
  19. # docker attach d20f3dc6cd92 # 実行中のコンテナに入る
  20. このコマンドはあまり信頼性が高くありません。コンテナに入るには、次のコマンドを使用することをお勧めします。
  21.  
  22. [root@localhost docker]# docker inspect --format "{{.State.Pid}}" mynginx # コンテナのPIDを取得する 
  23. 19769
  24. [root@localhost docker]# nsenter --target 19769 --mount --uts --ipc --net --pid # コンテナに入る(推奨方法)  
  25.   
  26. # docker run -d -p 91:80 --name mynginx2 nginx # -p はポートマッピングを指定し、80 をホスト 91 にマッピングします 

保存イメージ:

  1. # docker save -o ubuntu_14.04.tar ubuntu:14.04

画像を読み込む:

  1. # docker load < ubuntu_14.04.tar または以下を使用 
  2. # cat ubuntu.tar | docker import - test/ubuntu:v1.0

ローカルミラーを削除します:

  1. # docker rmi トレーニング/sinatra

タグが付いていないローカルミラーをすべてクリーンアップします。

  1. # docker rmi $(docker images -q -f "dangling=true" )
  2. -q と -f はそれぞれ quiet と --filter の略です。完全なコマンドは実際にはこのように記述できます。こちらの方が分かりやすいと思いませんか?  
  3. # docker rmi $(docker images --quiet --filter "dangling=true")  
  4. 注意: コンテナが長時間実行されるかどうかは、`docker run` で指定されたコマンドによって決まり、`-d` パラメータとは関係ありません。

コンテナの出力情報を取得するには、「docker logs」コマンドを使用できます。

  1. # docker logs [コンテナIDまたは名前]

コンテナを削除します:

  1. # docker rm はデフォルトでは実行中のコンテナを削除しません

コンテナとイメージに関する基礎情報:

  1. # docker コンテナ/イメージの検査

以下を表示できます:

コンテナインスタンスのIPアドレスとポートバインディングのリスト

特定のポートマッピングを検索する

詳細な構成情報を収集する

コンテナ内から指定されたパスにファイルをコピーします。

  1. docker cp コンテナ:パス ホストパス

Dockerfile を使用してイメージをビルドします。

  1. docker build [オプション] PATH | URL  
  2. `--rm= true`は、ビルドが成功した後にすべての中間コンテナが削除されることを意味します。  
  3. no -cache= false は、ビルド プロセス中にキャッシュが使用されないことを示します。