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

前書き

Dockerは、コンテナ内でアプリケーションプロセスを簡単かつ簡単に実行できるアプリケーションです。仮想マシンのようなもので、よりポータブルで、リソースにやさしく、ホストオペレーティングシステムに依存します。 Dockerコンテナのさまざまなコンポーネントの詳細な紹介については、https://www.digitalocean.com/community/tutorials/the-docker-ecosystem-an-introduction-to-common-components [The Docker Ecosystem:An共通コンポーネントの紹介]。

CentOS 7にDockerをインストールする方法は2つあります。 1つの方法は、オペレーティングシステムの既存のインストールにインストールすることです。 もう1つは、https://www.digitalocean.com/community/tutorials/how-to-provision-and-manage-remote-docker-hosts-with-docker-machine-on-centosというツールを使用してサーバーを起動することです。 -7 [Docker Machine]は、Dockerを自動インストールします。

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

前提条件

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

  • sudo特権を持つ非rootユーザー。 CentOS 7の初期セットアップガイドを使用してセットアップされたCentOS 7サーバーは、このセットアップ方法を説明しています。

このチュートリアルのすべてのコマンドは、非rootユーザーとして実行する必要があります。 コマンドにルートアクセスが必要な場合は、先頭に「+ sudo +」が付きます。 CentOS 7の初期セットアップガイドでは、ユーザーを追加してsudoアクセスを許可する方法について説明しています。

ステップ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:  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`コマンドの使用方法を検討します。

ステップ2-SudoなしでDockerコマンドを実行する(オプション)

デフォルトでは、 + docker +`コマンドを実行するにはルート権限が必要です。つまり、コマンドの前に `+ 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

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

ステップ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  --help

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

docker info

ステップ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.
...

Docker Hubで利用可能な画像を検索するには、 `+ docker `コマンドと ` search +`サブコマンドを使用します。 たとえば、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 `サブコマンドでダウンロードされたイメージを使用してコンテナーを実行できます。 ` run `サブコマンドで ` docker +`が実行されたときにイメージがダウンロードされていない場合、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_は技術用語です)。

ステップ5-Dockerコンテナーの実行

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

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

docker run -it centos

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

Output[[email protected] /]#

*重要:*コマンドプロンプトのコンテナIDに注意してください。 上記の例では、「+ 59839a1b7de2 +」です。

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

yum install mariadb-server

ステップ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"  /

例えば:

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

その操作が完了すると、コンピューター上の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 *は、Docker Hubの既存のCentOSイメージから派生した新しいイメージです。 サイズの違いは、行われた変更を反映しています。 この例では、変更はMariaDBサーバーがインストールされたことです。 そのため、MariaDBサーバーが事前にインストールされたCentOSを使用してコンテナーを実行する必要がある場合、新しいイメージを使用できます。 画像は、Dockerfileと呼ばれるものから作成することもできます。 しかし、これは非常に複雑なプロセスであり、この記事の範囲外です。 これについては、今後の記事で検討します。

ステップ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

これは、 `+ docker ps +`コマンドからの出力で見つけることができます。

ステップ8-DockerイメージをDockerリポジトリにプッシュする

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

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

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

docker login -u

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

docker push /

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

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

...

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

image:https://assets.digitalocean.com/articles/docker_install/docker_hub_dashboard_centos.png [Docker HubのDockerイメージリスト]

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

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は高速開発のコードベースから構築されているため、プロジェクトのhttps://blog.docker.com/ [ブログページ]にアクセスして最新情報を入手する習慣をつけてください。

DOコミュニティのhttps://www.digitalocean.com/community/tags/docker?type=tutorials [その他のDockerチュートリアル]もご覧ください。

前の投稿:Debian 10にGoをインストールする方法
次の投稿:FreeBSD 10.1にJavaをインストールする方法