CentOS 7にDockerをインストールして使用する方法

前書き

Dockerは、コンテナ内でアプリケーションプロセスを簡単かつ簡単に実行できるアプリケーションです。仮想マシンのようなもので、よりポータブルで、リソースにやさしく、ホストオペレーティングシステムに依存します。 Dockerコンテナーのさまざまなコンポーネントの詳細については、The Docker Ecosystem: An Introduction to Common Componentsを確認してください。

CentOS 7にDockerをインストールする方法は2つあります。 1つの方法は、オペレーティングシステムの既存のインストールにインストールすることです。 もう1つは、Dockerを自動インストールするDocker Machineというツールを使用してサーバーを起動することです。

このチュートリアルでは、CentOS 7の既存のインストールにインストールして使用する方法を学習します。

前提条件

  • 64ビットCentOS 7ドロップレット

  • sudo特権を持つ非rootユーザー。 Initial Setup Guide for CentOS 7を使用してセットアップされたCentOS 7サーバーは、これをセットアップする方法を説明しています。

[.note]#Note: Dockerには、64ビットバージョンのCentOS 7と、3.10以上のカーネルバージョンが必要です。 デフォルトの64ビットCentOS7ドロップレットは、これらの要件を満たしています。

このチュートリアルのすべてのコマンドは、非rootユーザーとして実行する必要があります。 コマンドにルートアクセスが必要な場合は、その前にsudoが付きます。 Initial Setup Guide for CentOS 7は、ユーザーを追加してsudoアクセスを許可する方法を説明しています。

[[step-1 -—- installing-docker]] ==ステップ1—Dockerのインストール

公式のCentOS 7リポジトリで利用可能なDockerインストールパッケージは、最新バージョンではない可能性があります。 最新バージョンを入手するには、公式のDockerリポジトリからDockerをインストールしてください。 このセクションでは、その方法を説明します。

しかし、まず、パッケージデータベースを更新しましょう。

sudo yum check-update

次に、このコマンドを実行します。 公式のDockerリポジトリを追加し、Dockerの最新バージョンをダウンロードしてインストールします。

curl -fsSL https://get.docker.com/ | sh

インストールが完了したら、Dockerデーモンを起動します。

sudo systemctl start docker

実行されていることを確認します。

sudo systemctl status docker

出力は次のようになり、サービスがアクティブで実行中であることを示します。

Output● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2016-05-01 06:53:52 CDT; 1 weeks 3 days ago
     Docs: https://docs.docker.com
 Main PID: 749 (docker)

最後に、サーバーを再起動するたびに起動することを確認します。

sudo systemctl enable docker

Dockerをインストールすると、Dockerサービス(デーモン)だけでなく、dockerコマンドラインユーティリティまたはDockerクライアントも提供されるようになりました。 このチュートリアルの後半で、dockerコマンドの使用方法について説明します。

[[step-2 -—- executing-docker-command-without-sudo-optional]] ==ステップ2— SudoなしでDockerコマンドを実行する(オプション)

デフォルトでは、dockerコマンドを実行するにはroot権限が必要です。つまり、コマンドの前にsudoを付ける必要があります。 また、Dockerのインストール中に自動的に作成されるdockerグループのユーザーが実行することもできます。 接頭辞sudoを付けずに、またはdockerグループに属さずにdockerコマンドを実行しようとすると、次のような出力が得られます。

Outputdocker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.

dockerコマンドを実行するたびにsudoを入力しないようにする場合は、ユーザー名をdockerグループに追加します。

sudo usermod -aG docker $(whoami)

この変更を有効にするには、Dropletからログアウトして同じユーザーとして再度ログインする必要があります。

ログインしていないユーザーをdockerグループに追加する必要がある場合は、次を使用してそのユーザー名を明示的に宣言します。

sudo usermod -aG docker username

この記事の残りの部分では、dockerユーザーグループのユーザーとしてdockerコマンドを実行していることを前提としています。 そうしない場合は、コマンドの前にsudoを付けてください。

[[step-3 -—- using-the-docker-command]] ==ステップ3—Dockerコマンドの使用

Dockerがインストールされて動作するようになったので、今がコマンドラインユーティリティに慣れるときです。 dockerの使用は、オプションとサブコマンドのチェーンに続いて引数を渡すことで構成されます。 構文は次の形式を取ります。

docker [option] [command] [arguments]

使用可能なすべてのサブコマンドを表示するには、次を入力します。

docker

Docker 1.11.1の時点で、使用可能なサブコマンドの完全なリストには以下が含まれます。

Output
    attach    Attach to a running container
    build     Build an image from a Dockerfile
    commit    Create a new image from a container's changes
    cp        Copy files/folders between a container and the local filesystem
    create    Create a new container
    diff      Inspect changes on a container's filesystem
    events    Get real time events from the server
    exec      Run a command in a running container
    export    Export a container's filesystem as a tar archive
    history   Show the history of an image
    images    List images
    import    Import the contents from a tarball to create a filesystem image
    info      Display system-wide information
    inspect   Return low-level information on a container or image
    kill      Kill a running container
    load      Load an image from a tar archive or STDIN
    login     Log in to a Docker registry
    logout    Log out from a Docker registry
    logs      Fetch the logs of a container
    network   Manage Docker networks
    pause     Pause all processes within a container
    port      List port mappings or a specific mapping for the CONTAINER
    ps        List containers
    pull      Pull an image or a repository from a registry
    push      Push an image or a repository to a registry
    rename    Rename a container
    restart   Restart a container
    rm        Remove one or more containers
    rmi       Remove one or more images
    run       Run a command in a new container
    save      Save one or more images to a tar archive
    search    Search the Docker Hub for images
    start     Start one or more stopped containers
    stats     Display a live stream of container(s) resource usage statistics
    stop      Stop a running container
    tag       Tag an image into a repository
    top       Display the running processes of a container
    unpause   Unpause all processes within a container
    update    Update configuration of one or more containers
    version   Show the Docker version information
    volume    Manage Docker volumes
    wait      Block until a container stops, then print its exit code

特定のコマンドで使用可能なスイッチを表示するには、次を入力します。

docker docker-subcommand --help

システム全体の情報を表示するには、次を使用します。

docker info

[[step-4 -—- working-with-docker-images]] ==ステップ4—Dockerイメージの操作

DockerコンテナーはDockerイメージから実行されます。 デフォルトでは、これらのイメージは、Dockerプロジェクトの背後にある会社であるDockerが管理するDockerレジストリーであるDocker Hubから取得します。 誰でもDockerイメージをDocker Hubで構築およびホストできるため、Dockerコンテナを実行するために必要なほとんどのアプリケーションおよびLinuxディストリビューションには、Docker Hubでホストされるイメージがあります。

Docker Hubから画像にアクセスしてダウンロードできるかどうかを確認するには、次のように入力します。

docker run hello-world

次の内容を含む出力には、Dockerが正常に機能していることが示されます。

OutputHello from Docker.
This message shows that your installation appears to be working correctly.
...

searchサブコマンドでdockerコマンドを使用すると、DockerHubで使用可能なイメージを検索できます。 たとえば、CentOSイメージを検索するには、次のように入力します。

docker search centos

スクリプトはDocker Hubをクロールし、名前が検索文字列と一致するすべての画像のリストを返します。 この場合、出力は次のようになります。

OutputNAME                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                          The official build of CentOS.                   2224      [OK]
jdeathe/centos-ssh              CentOS-6 6.7 x86_64 / CentOS-7 7.2.1511 x8...   22                   [OK]
jdeathe/centos-ssh-apache-php   CentOS-6 6.7 x86_64 / Apache / PHP / PHP M...   17                   [OK]
million12/centos-supervisor     Base CentOS-7 with supervisord launcher, h...   11                   [OK]
nimmis/java-centos              This is docker images of CentOS 7 with dif...   10                   [OK]
torusware/speedus-centos        Always updated official CentOS docker imag...   8                    [OK]
nickistre/centos-lamp           LAMP on centos setup                            3                    [OK]

...

OFFICIAL列のOKは、プロジェクトの背後にある会社によって構築およびサポートされているイメージを示します。 使用する画像を特定したら、次のように、pullサブコマンドを使用して画像をコンピューターにダウンロードできます。

docker pull centos

イメージがダウンロードされたら、ダウンロードしたイメージをrunサブコマンドで使用してコンテナーを実行できます。 dockerrunサブコマンドで実行したときにイメージがダウンロードされていない場合、Dockerクライアントは最初にイメージをダウンロードし、次にそれを使用してコンテナーを実行します。

docker run centos

コンピューターにダウンロードされたイメージを表示するには、次を入力します。

docker images

出力は次のようになります。

[secondary_lable Output]
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              778a53015523        5 weeks ago         196.7 MB
hello-world         latest              94df4f0ce8a4        2 weeks ago         967 B

このチュートリアルの後半で説明するように、コンテナーの実行に使用するイメージを変更して新しいイメージを生成するために使用できます。新しいイメージは、Docker Hubまたは他のDockerレジストリにアップロードできます(pushedは専門用語です)。 。

[[step-5 --- running-a-docker-container]] ==ステップ5—Dockerコンテナーの実行

前のステップで実行したhello-worldコンテナーは、テスト・メッセージを発行した後に実行および終了するコンテナーの例です。 ただし、コンテナはそれよりもはるかに便利であり、インタラクティブにすることができます。 結局のところ、それらは仮想マシンに似ており、リソースに優しいだけです。

例として、CentOSの最新のイメージを使用してコンテナーを実行してみましょう。 -iスイッチと-tスイッチの組み合わせにより、コンテナーへの対話型シェルアクセスが可能になります。

docker run -it centos

コマンドプロンプトは、コンテナ内で現在作業しているという事実を反映するように変更され、次の形式を取る必要があります。

Output[root@59839a1b7de2 /]#

Important:コマンドプロンプトのコンテナIDをメモします。 上記の例では、59839a1b7de2です。

これで、コンテナ内で任意のコマンドを実行できます。 たとえば、実行中のコンテナにMariaDBサーバーをインストールしましょう。 root権限でコンテナ内を操作しているため、コマンドの前にsudoを付ける必要はありません。

yum install mariadb-server

[[step-6 -—- commiting-changes-in-a-container-to-a-docker-image]] ==ステップ6—コンテナー内の変更をDockerイメージにコミットする

Dockerイメージを起動すると、仮想マシンでできるようにファイルを作成、変更、削除できます。 加えた変更は、そのコンテナにのみ適用されます。 開始および停止できますが、docker rmコマンドで破棄すると、変更は完全に失われます。

このセクションでは、コンテナの状態を新しいDockerイメージとして保存する方法を示します。

MariaDBサーバーをCentOSコンテナー内にインストールすると、コンテナーはイメージから実行されますが、コンテナーは作成に使用したイメージとは異なります。

コンテナの状態を新しいイメージとして保存するには、最初に終了します:

exit

次に、次のコマンドを使用して、新しいDockerイメージインスタンスに変更をコミットします。 -mスイッチは、あなたや他の人があなたが行った変更を知るのに役立つコミットメッセージ用であり、-aは作成者を指定するために使用されます。 コンテナIDは、チュートリアルの前半でインタラクティブドッカーセッションを開始したときにメモしたものです。 Docker Hubで追加のリポジトリを作成した場合を除き、リポジトリは通常Docker Hubユーザー名です。

docker commit -m "What did you do to the image" -a "Author Name" container-id repository/new_image_name

例えば:

docker commit -m "added mariadb-server" -a "Sunday Ogwu-Chinuwa" 59839a1b7de2 finid/centos-mariadb

[.note]#Note:画像をcommitすると、新しい画像がローカル、つまりコンピューターに保存されます。 このチュートリアルの後半では、Docker HubなどのDockerレジストリにイメージをプッシュして、自分や他の人が評価して使用できるようにする方法を学習します。

その操作が完了すると、コンピューター上のDockerイメージを一覧表示すると、新しいイメージと、それが由来する古いイメージが表示されます。

docker images

出力は次のようになります。

OutputREPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
finid/centos-mariadb   latest              23390430ec73        6 seconds ago       424.6 MB
centos                 latest              778a53015523        5 weeks ago         196.7 MB
hello-world            latest              94df4f0ce8a4        2 weeks ago         967 B

上記の例では、centos-mariadbは新しいイメージであり、DockerHubの既存のCentOSイメージから派生しています。 サイズの違いは、行われた変更を反映しています。 この例では、変更はMariaDBサーバーがインストールされたことです。 したがって、MariaDBサーバーがプリインストールされたCentOSを使用してコンテナーを実行する必要がある場合は、新しいイメージを使用できます。 画像は、Dockerfileと呼ばれるものから作成することもできます。 しかし、これは非常に複雑なプロセスであり、この記事の範囲外です。 これについては、今後の記事で検討します。

[[step-7 -—- listing-docker-containers]] ==ステップ7—Dockerコンテナの一覧表示

Dockerをしばらく使用すると、コンピューター上に多くのアクティブ(実行中)および非アクティブのコンテナーができます。 アクティブなものを表示するには、次を使用します。

docker ps

次のような出力が表示されます。

OutputCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f7c79cc556dd        centos              "/bin/bash"         3 hours ago         Up 3 hours                              silly_spence

アクティブと非アクティブのすべてのコンテナを表示するには、-aスイッチを渡します。

docker ps -a

作成した最新のコンテナを表示するには、-lスイッチを渡します。

docker ps -l

実行中またはアクティブなコンテナの停止は、次のように入力するだけです。

docker stop container-id

container-idは、docker psコマンドからの出力にあります。

[[step-8 -—- pushing-docker-images-to-a-docker-repository]] ==ステップ8—DockerイメージをDockerリポジトリにプッシュする

既存の画像から新しい画像を作成した後の次の論理ステップは、選択した数人の友人、Docker Hubの全世界、またはアクセスできる他のDockerレジストリと共有することです。 画像をDocker Hubまたはその他のDockerレジストリにプッシュするには、そこにアカウントが必要です。

このセクションでは、DockerイメージをDocker Hubにプッシュする方法を示します。

Docker Hubでアカウントを作成するには、Docker Hubで登録します。 その後、イメージをプッシュするには、まずDocker Hubにログインします。 認証するように求められます:

docker login -u docker-registry-username

正しいパスワードを指定した場合、認証は成功するはずです。 次に、以下を使用して独自の画像をプッシュできます。

docker push docker-registry-username/docker-image-name

完了するには少し時間がかかります。完了すると、出力は次のようになります。

OutputThe push refers to a repository [docker.io/finid/centos-mariadb]
670194edfaf5: Pushed
5f70bf18a086: Mounted from library/centos
6a6c96337be1: Mounted from library/centos

...

画像をレジストリにプッシュすると、下の画像に示すように、アカウントのダッシュボードに表示されるはずです。

Docker image listing on Docker Hub

プッシュを試みた結果、この種のエラーが発生した場合、おそらくログインしていません。

OutputThe push refers to a repository [docker.io/finid/centos-mariadb]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication required

ログインしてから、プッシュ試行を繰り返します。

結論

Dockerには、この記事で説明したよりもはるかに多くの機能がありますが、CentOS 7で作業を開始するにはこれで十分です。 ほとんどのオープンソースプロジェクトと同様に、Dockerは急速に開発されているコードベースから構築されているため、プロジェクトのblog pageにアクセスして最新情報を入手する習慣をつけてください。

DOコミュニティのother Docker tutorialsもチェックしてください。

Related