GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

Docker World 初心者向けガイド

Docker:はじめに

Docker は、Linux コンテナー用のオープン プラットフォーム管理ツールです。これは、開発者とシステム管理者がアプリケーションをビルドして軽量コンテナーにパッケージ化するための手段を提供します。 Docker は次のコンポーネントで構成されています:

  • Docker エンジン – ポータブルで軽量なランタイムおよびパッケージング ツール
  • Docker ハブ – アプリケーションを共有し、ワークフローを自動化するためのクラウド サービス

Docker は、イメージ ベースのアプリケーション コンテナーを作成するために使用されます。イメージベースのコンテナーは、個々のランタイム スタックを含むアプリケーションを 1 つのコンテナーにパッケージ化します。これにより、コンテナはホスト オペレーティング システムおよびカーネル バージョンから独立したものになります。その結果、ラップトップ、データセンターの仮想マシン、および任意のクラウドで、同じアプリケーションを変更せずに実行できます。このコンテナーを、Docker を実行する別のマシンに転送して、互換性の問題なしでアプリケーションを実行できます。

以下は、Docker コンテナー内でアプリケーションを実行することのその他の利点の一覧です。

  • Docker イメージには、アプリケーションの実行に必要なコンテンツのみが含まれているため、オペレーティング システム全体を必要とする仮想マシンよりもサイズが小さくなります。
  • Docker コンテナは、仮想マシン全体のオーバーヘッドを含むアプリケーションよりも高速に実行されます。
  • Docker コンテナには独自のネットワーク インターフェース、ファイル システム、メモリが含まれているため、コンテナで実行されているアプリケーションをホスト コンピュータ上の他のプロセスから分離して保護することができます。

Docker イメージ

Docker コンテナーは、Docker イメージから構築されます。これらの Docker イメージからアプリケーションを実行するには、Docker コンテナーを作成します。次の例では、「centos:7」という名前の Docker イメージから「test」という名前の Docker コンテナーを作成し、/bin/bash を実行します。

# docker create --name test centos:7 /bin/bash
Unable to find image 'centos:7' locally
Trying to pull repository docker.io/library/centos ... 
7: Pulling from docker.io/library/centos
469cfcc7a4b3: Pull complete 
Digest: sha256:989b936d56b1ace20ddf855a301741e52abca38286382cba7f44443210e96d16
Status: Downloaded newer image for docker.io/centos:7
a79ce1655f2ca17c7ac8cc15f307ba0bb438fbebd4595568df3433dd5ff79b73

イメージは、サービスと追加のアプリケーションがインストールされたオペレーティング システム全体を含めることができる読み取り専用のテンプレートです。 Docker は、イメージを構築したり、既存のイメージを更新したりする機能を提供します。コマンド ラインから Docker イメージを作成するか、Dockerfile にイメージをビルドするための指示を保存することができます。 Docker イメージのビルドを開始すると、Docker はこの Dockerfile を読み取り、命令を実行します。

各イメージは基本イメージ (centos など) から開始します。各 Docker イメージは、これらの基本イメージから構築された一連のレイヤーで構成されています。 Dockerfile 内の各命令によって、イメージ内に新しいレイヤーが作成されます。 Docker イメージを変更するたびに、そのレイヤーのみが更新または追加されます。 Docker は unionfs を使用して、これらのレイヤーを 1 つのイメージに結合します。 unionfs ファイル システム サービスを使用すると、別々のファイル システムのファイルとディレクトリを 1 つのファイル システムにオーバーレイできます。

Docker イメージを作成したら、イメージを Docker レジストリーに保管して共有できます。これらのレジストリは、プライベートまたはパブリックにすることができます。 Docker Hub は、Docker コンテナーを共有および管理するための Software-as-a-Service プラットフォームとして機能するパブリック Docker レジストリです。

CentOS / RHEL / Fedora に Docker をインストールする方法
Mac に Docker をインストールする方法

Docker Hub レジストリ

Docker Hub レジストリは、アプリケーションを Docker イメージとしてホストし、Docker 環境の作成と管理を可能にするサービスを提供します。 Docker Hub レジストリは、Docker, Inc. によって所有および管理されており、https://registry.hub.docker.com/ にあります。

Docker Hub は多数のリポジトリを提供し、各リポジトリには多数のイメージを含めることができます。 Docker イメージのホストに加えて、Docker Hub は、ユーザー認証、自動化されたイメージ ビルドとワークフロー ツール、GitHub および BitBucket との統合などのサービスを提供します。これらの Docker サービスを使用するには、Docker Hub アカウントを作成する必要があります。 https://hub.docker.com/account/signup/ でアカウントを作成できます。次のコマンドを使用して、コマンドラインからアカウントを作成することもできます:

# docker login
Docker Hub でパブリック/プライベート リポジトリを作成し、コマンド ラインを使用してリモートで接続する方法

アカウントがなくても、Docker イメージを検索し、Docker Hub からイメージをプル (ダウンロード) できます。イメージをプッシュ (アップロード) し、イメージまたはリポジトリにコメントを残し、利用可能なすべての Docker Hub サービスを使用するには、Docker Hub アカウントが必要です。

Docker のインストールと起動

docker サービスのインストールと開始は簡単な作業です。次のコマンドを使用して docker パッケージをインストールできます:

# yum install docker

systemctl コマンドを使用して、docker サービスを有効にして開始します。

# systemctl enable docker
# systemctl start docker

デフォルトでは、Docker は devicemapper をストレージ ドライバーとして使用します。 RedHat Linux 7 では、Btrfs を使用するように Docker エンジンを構成できます。これにより、Btrfs のスナップショット機能を利用できます。次のコマンドは、docker パッケージからインストールされたすべてのファイルを表示します:

# rpm -ql docker
/etc/docker
/etc/docker/certs.d
/etc/docker/certs.d/redhat.com
/etc/docker/certs.d/redhat.com/redhat-ca.crt
/etc/docker/certs.d/redhat.io
/etc/docker/certs.d/redhat.io/redhat-ca.crt
...

docker バイナリと構成ファイルに加えて、すべての docker コマンドのドキュメントと man ページがインストールされていることがわかります。 /var/lib/docker ディレクトリは、docker サービスが開始されるまで空です。次の一連のコマンドは、docker の起動前後のディレクトリの内容を表示します。

# ls /var/lib/docker
# systemctl enable docker
# systemctl start docker
# ls /var/lib/docker
containers graph linkgraph.db tmp volumes devicemapper init repositories-devicemapper trust

docker ユーティリティ

docker コマンドライン インターフェイスには、30 を超えるコマンドがあります。コマンドのリストについては、docker の man ページを参照してください。 docker info コマンドは、Docker のインストールに関するシステム全体の情報を表示します。詳細については、docker-info の man ページを参照してください。デフォルトのストレージ ドライバは devicemapper であり、データとメタデータはループ デバイス /dev/loop0 と /dev/loop1 に保存されることに注意してください。

# docker info
Containers: 1
 Running: 0
 Paused: 0
 Stopped: 1
Images: 1
Server Version: 1.13.1
Storage Driver: overlay2
 Backing Filesystem: xfs
 Supports d_type: false
 Native Overlay Diff: true
Logging Driver: journald
...

root 以外のユーザーは、docker グループに追加して docker サービスを再構成すると、docker コマンドを実行できます。

Docker Hub レジストリでイメージを検索する

docker search コマンドを使用して、Docker Hub でイメージを検索します。以下は、「docker search」コマンドの出力です。

# docker search centos
INDEX       NAME                                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/centos                             The official build of CentOS.                   4207      [OK]       
docker.io   docker.io/ansible/centos7-ansible            Ansible on Centos7                              108                  [OK]
docker.io   docker.io/jdeathe/centos-ssh                 CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x8...   94                   [OK]
docker.io   docker.io/consol/centos-xfce-vnc             Centos container with "headless" VNC sessi...   52                   [OK]
docker.io   docker.io/imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              40                   [OK]
...

このコマンドは、Docker Hub で「centos」イメージを検索します。出力には、リポジトリ/イメージの名前、説明、付与された星の数、イメージが公式かどうか、自動化されているかどうかが含まれます。 name 列は次の形式であり、一意の識別を提供するために含まれているリポジトリを含めることができます:

[repository_name]/[image_name]

スターは画像の人気度を測定します。 Docker Hub アカウントを持っている人なら誰でも、気に入ったイメージに「スター」を付けることができます。次の例では、星が 3 つ以上ある「centos」画像を検索します。

# docker search -s 3 centos
Flag --stars has been deprecated, use --filter=stars=3 instead
INDEX       NAME                                        DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/centos                            The official build of CentOS.                   4207      [OK]       
docker.io   docker.io/ansible/centos7-ansible           Ansible on Centos7                              108                  [OK]
docker.io   docker.io/jdeathe/centos-ssh                CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x8...   94                   [OK]
...

「公式」リポジトリは、ベンダーまたは Docker への貢献者によって認定されています。 「自動化された」イメージは、Docker Hub の自動ビルド プロセスによってビルドされます。

Docker Hub からのイメージのダウンロード

「docker pull」コマンドを使用して、イメージまたはリポジトリを Docker Hub レジストリからローカル システムにダウンロードします。次の例は、centos:latest イメージをプルダウンします。

# docker pull centos
Using default tag: latest
Trying to pull repository docker.io/library/centos ... 
latest: Pulling from docker.io/library/centos
Digest: sha256:989b936d56b1ace20ddf855a301741e52abca38286382cba7f44443210e96d16
Status: Downloaded newer image for docker.io/centos:latest

「docker images」コマンドを使用して、ローカルの Docker リポジトリに保存されているイメージを一覧表示します。

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    7                   e934aafc2206        2 weeks ago         199 MB
docker.io/centos    latest              e934aafc2206        2 weeks ago         199 MB

リポジトリ内の各イメージは、TAG と IMAGE ID によって区別されます。

以下は、docker 構成ファイルの場所を示しています。

# cd /var/lib/docker/
# ll
total 4
drwx------. 3 root root   77 Apr 21 07:57 containers
drwx------. 3 root root   21 Apr 21 07:56 image
drwxr-x---. 3 root root   18 Apr 21 07:56 network
drwx------. 6 root root 4096 Apr 21 07:57 overlay2
drwx------. 4 root root   30 Apr 21 07:56 plugins
drwx------. 2 root root    6 Apr 21 07:56 swarm
drwx------. 2 root root    6 Apr 21 07:57 tmp
drwx------. 2 root root    6 Apr 21 07:56 trust
drwx------. 2 root root   24 Apr 21 07:56 volumes
Linux で Docker イメージを一覧表示 / 検索 / プルする方法

コンテナ内でアプリケーションを実行する

docker run コマンドを使用して、コンテナー内でアプリケーションを実行します。このコマンドは、独自のファイル システム、独自のネットワーク、および独自の分離されたプロセス ツリーを使用してプロセスを開始します。次の構文には、コマンドで使用可能なすべてのオプションが含まれているわけではありません:

# docker run [OPTION...] IMAGE [COMMMAND] {ARG...]

プロセスを開始する IMAGE は、コンテナやネットワークなどで実行するプロセスに関連するデフォルトを定義できますが、docker 実行オプションは IMAGE の設定をオーバーライドします。 IMAGE がローカルで使用できない場合、docker run は IMAGE でコンテナーを開始する前に docker pull コマンドと同じ方法でイメージをプルします。

以下に、docker run の使用例を 2 つ示します。最初の例では、ローカル マシンに既に存在する「centos」イメージを使用します。 Docker はイメージを使用して新しい CentOS 環境を作成し、echo コマンドを実行して「Hello」を表示します。

# docker run centos /bin/echo "Hello"
Hello

2 番目の例では、ローカル システムに存在しない fedora イメージを使用します。 Docker は Docker Hub からイメージをプルし、そのイメージを使用して新しい Fedora 環境を作成し、echo コマンドを実行します。

# docker run fedora /bin/echo "Hello"
Unable to find image 'fedora:latest' locally
Trying to pull repository docker.io/library/fedora ... 
latest: Pulling from docker.io/library/fedora
2176639d844b: Pull complete 
Digest: sha256:ec588fc80b05e19d3006bf2e8aa325f0a2e2ff1f609b7afb39176ca8e3e13467
Status: Downloaded newer image for docker.io/fedora:latest
Hello

どちらの例でも、「Hello」が画面に表示された後、Docker コンテナーは停止します。 docker ps コマンドを使用してコンテナーを一覧表示しますが、コンテナーは表示されません:

# docker ps

これは、「docker ps」が現在実行中のコンテナーのみを表示するためです。停止したコンテナを含むすべてのコンテナを表示するには、「docker ps -a」コマンドを使用します。

# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
7b772ea59c92        fedora              "/bin/echo Hello"   25 seconds ago       Exited (0) 23 seconds ago                           vigilant_haibt
263e715ae13c        centos              "/bin/echo Hello"   About a minute ago   Exited (0) About a minute ago                       condescending_aryabhata
a79ce1655f2c        centos:7            "/bin/bash"         4 hours ago          Created                                             test

docker images コマンドは、docker run コマンドを使用したときに、「fedora」リポジトリの「最新」イメージが Docker Hub からダウンロードされたことを示しています。

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    7                   e934aafc2206        2 weeks ago         199 MB
docker.io/centos    latest              e934aafc2206        2 weeks ago         199 MB
docker.io/fedora    latest              9110ae7f579f        6 weeks ago         235 MB

インタラクティブな Docker コンテナの実行

–t を使用します および –i オプションを docker run コマンドで使用して、対話型コンテナーを実行します。これらのオプションについて説明します:

  • -t :疑似 tty を割り当て、コンテナの STDIN (標準入力) にアタッチします
  • -i :コンテナの STDIN を開いたままにしておきます

–t および –i オプションを指定して docker run コマンドを使用する 2 つの例を以下に示します。どちらの例でも、CentOS Linux 7.4 がローカル システムで実行されています。

# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core)

最初の例では、「centos:7」イメージを使用しています。 Docker はイメージを使用して新しい CentOS 環境を作成し、bash シェル コマンドを実行します。このイメージの OS バージョンは CentOS 7 です。

# docker run -t -i centos:7 /bin/bash
[root@b3e1316c4653 /]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 

2 番目の例では、ubuntu イメージを使用しています。特定のイメージが指定されていないため、Docker は「最新の」Ubuntu イメージを使用して新しい Ubuntu 環境を作成し、bash シェル コマンドを実行します。このイメージの OS バージョンは Ubuntu 16.04.4 です。また、ubuntu イメージはローカルで利用できないため、docker は最初にリポジトリからダウンロードしてから実行します。

# docker run -t -i ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
Trying to pull repository docker.io/library/ubuntu ... 
latest: Pulling from docker.io/library/ubuntu
d3938036b19c: Pull complete 
a9b30c108bda: Pull complete 
67de21feec18: Pull complete 
817da545be2b: Pull complete 
d967c497ce23: Pull complete 
Digest: sha256:9ee3b83bcaa383e5e3b657f042f4034c92cdd50c03f73166c145c9ceaea9ba7c
Status: Downloaded newer image for docker.io/ubuntu:latest
root@9ee24718262c:/# cat /etc/os-release 
NAME="Ubuntu"
VERSION="16.04.4 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.4 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

exit コマンドを使用するか、CTRL + D を押して対話型コンテナーを終了できます。

コンテナの一覧表示とコンテナ ログの表示

docker ps コマンドを使用して、Docker コンテナーに関する情報を一覧表示します。デフォルトでは、実行中のコンテナのみがリストされます。 –a を含める オプションを docker ps コマンドで使用して、すべてのコンテナーを表示します。出力には、コンテナの作成時に自動的に生成される一意のコンテナ ID と一意のコンテナ名が含まれます。 docker ps コマンドの出力には、コンテナーの作成に使用されたイメージ、コンテナーで実行されているコマンド、および状態情報も含まれます。ステータス情報には、コンテナーがいつ作成されたか、およびコンテナーが実行されている期間が含まれます。

# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
9ee24718262c        ubuntu              "/bin/bash"         3 minutes ago       Exited (127) 2 seconds ago                       modest_turing
b3e1316c4653        centos:7            "/bin/bash"         6 minutes ago       Exited (0) 4 minutes ago                         gracious_pare
7b772ea59c92        fedora              "/bin/echo Hello"   18 minutes ago      Exited (0) 18 minutes ago                        vigilant_haibt
263e715ae13c        centos              "/bin/echo Hello"   19 minutes ago      Exited (0) 19 minutes ago                        condescending_aryabhata
a79ce1655f2c        centos:7            "/bin/bash"         4 hours ago         Created                                          test

docker logs コマンドはコンテナー内を調べて、その標準出力を返します。コマンドの引数として、コンテナー ID またはコンテナー名のいずれかを使用できます。

# docker logs b3e1316c4653
[root@b3e1316c4653 /]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 
[root@b3e1316c4653 /]# exit
exit

上記の例では、docker logs コマンドは、「cat /etc/redhat-release」コマンドがコンテナーで実行されたことを示しています。 docker ps および docker logs コマンドは、コンテナーの外部、つまり別のターミナル ウィンドウから実行する必要があります。

コンテナまたはイメージのすべての情報を表示

docker inspect コマンドを使用して、コンテナーまたはイメージで使用できるすべての情報を表示します。次の例は、表示される情報の一部を示しています。 –f {{.section.subsection}} を使用します 特定の情報を表示するオプション。次の例では、ネットワーク設定のみを表示しています:

# docker inspect -f {{.NetworkSettings}} modest_turing
{{ 98e04ea6d68753022ae2212b06b1514323927a1ed117448bc70ea3fa9a2f4a06 false  0 map[] /var/run/docker/netns/98e04ea6d687 [] []} {   0  0  } map[bridge:0xc4200c0300]}

次の例では、IP アドレスを表示しています:

# docker inspect -f {{.NetworkSettings.IPAddress}} modest_turing
172.17.0.10

次の例は、プロセス ID を表示します:

# docker inspect -f {{.State.Pid}} modest_turing
7181

次の例は、コンテナで実行されているコマンドを示しています:

# docker inspect -f {{.Config.Cmd}} modest_turing
[/bin/bash]

コンテナーのすべてのオプション/プロパティを表示する場合は、「docker inspect」でオプションを使用しないでください:

# docker inspect modest_turing
[
    {
        "Id": "9ee24718262c9f7ed3320019163a8b1b2bb1bccc83eb362a5512a74eaa4ad57f",
        "Created": "2018-04-21T12:22:21.983441857Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
....

これは、コンテナーのすべてのプロパティを示すかなり長い出力になります。

新しいコンテナの作成

docker run コマンドは、新しいコンテナーでプロセスを実行します。 docker create コマンドを使用して、後で開始できるコンテナーを作成することもできます。 docker create の構文と使用可能なオプションは、docker run 構文に似ています。

以下の例では、centos:7 イメージから「geeklab」という名前の新しいコンテナーを作成し、起動時に bash シェル コマンドを実行します。 –name オプションを省略した場合、コンテナー名は自動的に生成されます。

# docker create -t -i --name geeklab centos:7 /bin/bash
667fd40faeb69113d035f08e5a910275a8463aa2a6a0796833f590e878732e17

コマンドの出力は、非常に長い一意のコンテナー ID です。デフォルトで実行中のコンテナのみを表示する docker ps コマンドで示されるように、コンテナはすぐには起動しません:

# docker ps

すべてのコンテナを表示するには、「docker ps -a」を実行する必要があります。この例では、出力を grep にパイプし、コンテナー ID の一部を検索します:

# docker ps -a | grep 667fd
667fd40faeb6        centos:7            "/bin/bash"         About a minute ago   Created        geeklab

コンテナの開始、停止、および削除

docker start」を使用します 」 コマンドを使用して、既存のコンテナーを開始します。 –a を使用します および –i 現在のシェルの STDIN (標準入力)、STDOUT (標準出力)、および STDERR (標準エラー) をコンテナーにアタッチし、すべてのシグナルをコンテナーに転送するオプション。

# docker start -a -i geeklab
[root@667fd40faeb6 /]#

コンテナー内から、exit コマンドまたは CTRL-d を使用してコンテナーを停止します。コンテナーの外部、つまり別のターミナル ウィンドウから、docker stop コマンドを使用してコンテナーを停止します。

# docker stop geeklab

docker rm」を使用します コンテナを削除するコマンド。 1 つのコマンドで複数のコンテナーを削除できます。 –f を使用します 実行中のコンテナを削除するオプション。

# docker rm geeklab
geeklab

これら 3 つの docker コマンドはすべて、コンテナー ID またはコンテナー名を引数として受け入れます。

docker rm コマンドはコンテナーを削除します。 docker rmi コマンドを使用してイメージを削除します:

# docker rmi [IMAGE]
docker コンテナを一覧表示 / 開始 / 停止 / 削除する方法

実行中のコンテナでの追加コマンドの実行

docker exec コマンドを使用して、実行中のコンテナーでコマンドを実行します。 docker run コマンドと同様に、–t および –i オプションを含めて対話型コマンドを実行します。コンテナー ID またはコンテナー名を引数として指定します。

次の例では、docker exec コマンドは、「ゲスト」コンテナで新しいインタラクティブな bash シェルを開始します:

# docker exec -t -i geeklab /bin/bash
[root@68b5b713c37b /]# 

次の例では、docker exec コマンドを使用して、「geeklab」コンテナーで sshd サービスを開始します。 「geeklab」コンテナは CentOS 6.4 を実行しています。この例では、-t および -i オプションは必要ありません。

# docker exec guest service sshd start 
Generating SSH2 RSA host key:                    [ OK ] 
Generating SSH1 RSA host key:                    [ OK ] 
Generating SSH2 DSA host key:                    [ OK ] 
Starting sshd:                                   [ OK ]

コンテナーで sshd サービスが開始され、開始ホスト システムに制御が戻ります。


Docker
  1. Dockerコンテナとは:初心者向け入門ガイド

  2. Dockerイメージの概要

  3. SELinux 初心者向けガイド

  1. 初心者向けのLinuxターミナルガイド

  2. DockerイメージのCMDとENTRYPOINTの違い

  3. DockerComposeを使用するためのクイックガイド

  1. LVMの初心者ガイド

  2. Dockerイメージを変更する方法

  3. Dockerで依存する子イメージのリストを取得するには?