はじめに
Docker は、コンテナ内でのアプリケーションプロセスの実行と管理を容易にするプラットフォームです。アプリケーションをインフラストラクチャから分離する方法を提供します。コンテナは仮想マシンと非常に似ていますが、よりポータブルで効率的、かつ使いやすいものです。DockerをLinuxディストリビューションにインストールする様々な方法があります。既存のオペレーティングシステムにDockerをインストールする最も一般的で簡単な方法は、yumコマンドを使用することです。
このチュートリアルでは、CentOS 7でDockerをセットアップして使用する方法を、いくつかの簡単なステップで説明します。
前提条件:
- 64ビット CentOS 7インスタンス.
- sudo権限を持つ非rootユーザー。
このチュートリアル全体で実行するすべてのコマンドは非rootユーザーとして実行され、必要に応じてsudoキーワードを使用してrootアクセスが提供されます。
ステップ1:CentOS 7インスタンスでのDockerのセットアップ
公式のCentOS 7リポジトリには、Dockerの最新のインストールパッケージが含まれていない場合があります。このセクションでは、公式のDockerリポジトリから最新バージョンのDockerをインストールします。まず、以下を使用してパッケージデータベースを更新する必要があります。
|
1 |
sudo yum check-update |
アップデート手順が完了したら、以下のコマンドを実行して最新バージョンのDockerをダウンロードしてインストールします。
|
1 |
curl -fsSL https://get.docker.com/ | sh |
これでDockerがインストールされました。以下のコマンドを実行してDockerデーモンを起動できます。
|
1 |
sudo systemctl start docker |
Dockerデーモンが実行されているかどうかを確認するには、以下を入力します。
|
1 |
sudo systemctl status docker |
systemctl statusコマンドの出力は、実行中であることを示す以下の共有出力のようになるはずです。
|
1 2 3 4 5 6 |
出力: ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2021-02-17 18:22:06 UTC; 10s ago Docs: https://docs.docker.com Main PID: 21884 (dockerd) |
最後に、マシンを再起動したときにDockerが確実に起動するようにするには、次のコマンドを使用します。
|
1 |
sudo systemctl enable docker |
Dockerのインストールにより、Dockerサービスとクライアントユーティリティ(Dockerコマンドラインクライアント)が提供されます。チュートリアルの次のセクションでは、Dockerコマンドを実際に使用してさらに理解を深めることができます。
また、こちらのパブリッククラウド上のUbuntuにDockerをインストール&操作する方法に関する詳細なチュートリアルもご覧ください.
ステップ2:SudoプレフィックスなしでのDockerコマンドの使用
Dockerコマンドを実行するにはroot権限が必要です。したがって、コマンドを実行するには、先頭にsudoを付ける必要があります。インストール中に、デフォルトでDockerグループが作成されます。ユーザーをそのグループに追加すると、sudoなしでDockerコマンドを実行できます。sudoなしでDockerコマンドを実行しようとしたり、ユーザーをグループに追加しなかったりすると、以下のような出力が表示されます。
|
1 2 3 |
出力: docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?. See 'docker run --help'. |
ユーザー名をDockerグループに追加することで、sudoを使用せずにDockerコマンドを実行できるようになります。
|
1 |
sudo usermod -aG docker $(whoami) |
別のユーザーをDockerグループに追加するには、コマンド内のユーザー名を置き換えるだけです。
|
1 |
sudo usermod -aG docker username |
このガイドの残りの部分では、すべてのコマンドがDockerユーザーグループのユーザーによって実行されることを前提としています。そうでない場合は、コマンドにsudoプレフィックスを使用できます。
ステップ 3: Dockerコマンドの実行
Dockerがインストールされ、実行されているので、Dockerコマンドラインユーティリティに慣れるためのいくつかのコマンドを見てみましょう。Dockerコマンドは通常、次のような形式をとります。
|
1 |
docker [option] [command] [arguments] |
利用可能なすべてのサブコマンドを確認するには、次を使用します。
|
1 |
docker |
現在(Docker 20.10.3 時点)、利用可能なサブコマンドの完全なリストは以下の通りです。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
出力: attach アタッチする ローカルの 標準 入力, 出力, および エラー ストリームを に ある 実行中の コンテナ build ビルドする ある イメージを から ある Dockerfile commit 作成する 新しい 新規の イメージを から ある コンテナの変更 cp コンテナとローカルファイルシステムの間でファイル/フォルダをコピーします create 新しいコンテナを作成します diff コンテナのファイルまたはディレクトリの変更を検査します(コンテナの ファイルシステム) events 取得する リアル タイムの イベントを から その サーバー exec 実行する ある コマンドを の中で ある 実行中の コンテナ export エクスポートする ある コンテナ'の ファイルシステムを として ある tar アーカイブ history 表示する その 履歴を の ある イメージ images 一覧表示する イメージ import インポートする その コンテンツを から ある tarball するために 作成 ある ファイルシステム イメージを info 表示する システム-全体の 情報 inspect 返す 低-レベルの 情報を に関する Docker オブジェクト kill 強制終了する 1つ または それ以上の 実行中の コンテナを load ロードする ある イメージを から ある tar アーカイブ または 標準入力 login ログインする に へ ある Docker レジストリ logout ログアウトする アウト から ある Docker レジストリ logs 取得する その ログを の ある コンテナ pause 一時停止する すべての プロセスを の中で 1つ または それ以上のコンテナ port 一覧表示 ポート マッピング または 特定の 特定の マッピング 用 コンテナの コンテナ ps 一覧表示 コンテナ pull プル イメージ イメージ または リポジトリ リポジトリ から レジストリ レジストリ push プッシュ イメージ イメージ または リポジトリ リポジトリ へ レジストリ レジストリ rename 名前変更 コンテナの コンテナ restart 再起動 1つ または 複数 コンテナ rm 削除 1つ または 複数 コンテナ rmi 削除 1つ または 複数 イメージ run 実行 コマンド コマンド 内 新規 新規 コンテナ save 保存 1つ または 複数 イメージ へ tar tar アーカイブ (ストリーム へ 標準出力 デフォルト で) search 検索 Docker Docker Hub から イメージ start 起動 1つ または 複数 停止中 コンテナ stats 表示 ライブ ライブ ストリーム の コンテナ(の) リソース 使用状況 統計 stop 停止 1つ または 複数 実行中 コンテナ tag 作成 タグ タグ TARGET_IMAGE が 参照する へ SOURCE_IMAGE top 表示 実行中 実行中 プロセス の コンテナ コンテナ unpause 再開 すべての プロセス 内の 1つ または 複数 コンテナ update 更新 設定 の 1つ または 複数 コンテナ version 表示 Docker Docker バージョン 情報 wait ブロック まで 1つ または 複数 コンテナが 停止する, その後 出力 それらの 終了 コード |
特定のコマンドで –help フラグを使用すると、そのコマンドに関する詳細情報を取得できます:
|
1 |
docker subcommand --help |
システムに関する詳細情報を取得するには、以下を使用します:
|
1 |
docker info |
ステップ 4: Docker イメージの操作
Docker イメージは、Docker コンテナの設計図と言えます。これらのイメージは通常、Docker Hub からプルされます。これは Docker プロジェクトによって管理されているレジストリです。誰でも Docker Hub に独自のイメージを作成してプッシュできます。その結果、レジストリ内で多種多様なアプリケーションや OS ディストリビューションを簡単に見つけることができます。Docker Hub へのアクセスを確認する簡単なプログラムを試してみましょう:
|
1 |
docker run hello-world |
以下のような出力が表示され、Docker が動作していることが確認できます:
|
1 2 3 4 |
出力: Hello from Docker! This message shows that your installation appears to be working correctly. ... |
search コマンドを使用すると、Docker Hub 上のさまざまな Docker イメージを検索できます。たとえば、CentOS イメージを検索するには、以下のコマンドを参照してください:
|
1 |
docker search centos |
検索クエリにより、部分一致したすべてのイメージ of リストが表示されます。この場合の出力は以下のようになります:
|
1 2 3 4 5 6 7 8 |
出力: NAME DESCRIPTION STARS OFFICIAL AUTOMATED centos The official build of CentOS. 6410 [OK] ansible/centos7-ansible Ansible 上の Centos7 132 [OK] consol/centos-xfce-vnc Centos コンテナ 付きの "ヘッドレス" VNC セッション… 125 [OK] jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL リポジトリ… 117 [OK] centos/systemd systemd 有効化された ベース コンテナ. 96 [OK] ... |
検索結果には、イメージに関する情報を説明するさまざまな列があります。OFFICIAL列の「OK」は、そのイメージがアプリケーションの背後にある企業によって作成され、サポートされていることを示します。イメージが決定したら、Docker pullコマンドを使用してローカルマシンにダウンロードできます。
|
1 |
docker pull centos |
イメージをダウンロードした後、Docker runコマンドを使用してコンテナを実行できます。事前にダウンロードせずに直接イメージを実行しようとすると、Dockerはイメージをダウンロードした後にコンテナを実行します。
|
1 |
docker run centos |
以下のコマンドを使用して、ローカルマシンにダウンロードされたイメージの一覧を表示できます。
|
1 |
docker images |
以下のような出力が表示されるはずです。
|
1 2 3 4 |
出力: REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 300e315adb2f 2 ヶ月前 209MB hello-world latest bf756fb1ae65 13 ヶ月前 13.3kB |
このチュートリアルの後半では、イメージを変更してコンテナを実行できるようになります。これらの新しいイメージは、Docker Hubや、Dockerイメージをホストするその他のレジストリに追加(プッシュ)できます。
ステップ 5: インタラクティブなコンテナの実行
コンテナにはさまざまな種類があります。あなたがステップ4で実行したhello-worldコンテナは、メッセージを出力した後に実行を終了するタイプのコンテナです。もう1つのタイプは、インタラクティブなコンテナです。インタラクティブコンテナは、仮想マシンと同じような感覚で使用できます。
最新のCentOSイメージからコンテナを作成してみましょう。Docker runコマンドで-iおよび-tフラグを使用すると、CentOSコンテナにインタラクティブにアクセスできます。
|
1 |
docker run -it centos |
コマンドプロンプトが変更され、以下のような出力になるはずです。
|
1 2 |
出力: [root@3ce69d2a35b9 /]# |
|
1 |
注意: その コンテナ ID 表示された 〜内の その コマンド プロンプト は 一意 であり、 それ は 役立ちます 後で 便利に その後 , 〜において その 例 それ は 3ce69d2a35b9 です。 |
これで、実行するすべてのコマンドがコンテナ内で実行されるようになります。これは、仮想マシン内でコマンドを実行するのと似ています。それでは、MySQL サーバーをCentOSコンテナにインストールしてみましょう。これを行うには、以下を使用します。
|
1 |
yum install mysql |
ステップ 6: コンテナ内の変更をDockerイメージにコミットする
コンテナを起動した後は、ファイルの作成や変更、アプリのセットアップなど、同様の仮想マシンで実行可能なすべての操作を行うことができます。これらの変更はそのコンテナにのみ保持され、コンテナを破棄すると行った変更は失われることに注意してください。
チュートリアルのこのパートでは、行った変更を加えてコンテナから新しいDockerイメージを作成する方法を学びます。 Step5 の後、MySQLサーバーがインストールされたCentOSコンテナが実行されています。このコンテナは、通常のCentOSイメージとは異なります。このコンテナの状態を保存して、後で利用することができます。まず、以下を使用してコンテナを終了する必要があります:
|
1 |
exit |
以下のコマンドを使用して、コンテナで行った変更を新しいDockerイメージにコミットします:
|
1 |
docker commit -m "Changes done to the image" -a "Author Name" container-id repository/new_image_name |
コマンドにおいて、-mはコミットメッセージを指し、基本的には行われた変更を示す必要があります。-aタグは作成者を記載するために使用されます。Container-idは、Step5 でコンテナをインタラクティブモードで実行した後に取得したものであり、通常、リポジトリはDocker Hubのユーザー名になります。例えば:
|
1 |
docker commit -m "added mysql-server" -a "CloudSigma" 59839a1b7de2 finid/centos-mariadb |
|
1 |
注意: 後 その 新しい イメージ が コミットされた それ は 保存されます に あなたの システム. において その 次の 段階 の この チュートリアル, あなた でしょう 学ぶ 方法 〜する プッシュする ある イメージ へ Docker Hub および において その 同様の レジストリ これらはホストする docker イメージ. 一度 あなたの イメージ が プッシュされる へ その レジストリ, それ できる される アクセス によって 他の人 も 同様に. |
イメージがコミットされたので、docker imagesコマンドを実行すると、古いイメージに加えて新しいイメージも表示されるはずです:
|
1 |
docker images |
コマンドの出力は以下のようになるはずです:
|
1 2 3 4 5 |
出力: REPOSITORY TAG IMAGE ID CREATED SIZE cloudsigma23/centos-mysql latest 1b9368efea70 13 秒 前 308MB centos latest 300e315adb2f 2 ヶ月 前 209MB hello-world latest bf756fb1ae65 13 ヶ月 前 13.3kB |
例に示されているように、Docker HubのCentOSイメージを使用して、新しいイメージcentos-mysqlが作成されます。サイズの違いは、いくつかの変更が行われたことを示しています。この例では、コンテナにMySQLサーバーが追加されました。次回MySQLサーバーを搭載したコンテナが必要になったときは、新しいイメージを実行するだけで、プリインストールされたMySQLサーバーが動作するCentOSコンテナが手に入ります。
ステップ 7: Dockerコンテナの管理
Dockerに慣れてきて、しばらく使用していると、すでにいくつかの実行中および非アクティブなコンテナが存在しているはずです。アクティブなコンテナの一覧を取得するには、以下を使用します:
|
1 |
docker ps |
以下のような出力が表示されるはずです:
|
1 2 3 |
出力: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 604c889cf404 centos "/bin/bash" 20 minutes ago Up 20 minutes intelligent_easley |
アクティブなコンテナと非アクティブなコンテナの両方をリストするには、コマンドで -a フラグを使用する必要があります。
|
1 |
docker ps -a |
最後に作成したコンテナを見つけるには、-l フラグを指定します。
|
1 |
docker ps -l |
実行中/アクティブなコンテナを停止するには、次のシンプルなコマンドを実行します。
|
1 |
docker stop container-id |
container-id は Docker ps コマンドの出力で確認できます。
ステップ 8: リポジトリへのイメージの公開
新しいイメージを作成した後の次のステップは、それを友人と共有することです。Docker Hub やその他のレジストリを使用して、世界中に公開することもできます。イメージをプッシュする前に、それぞれのレジストリにログインする必要があります。
チュートリアルの次のパートでは、イメージを Docker Hub にプッシュする方法を学びます。まず、Docker Hub にサインアップします。以下のコマンドを使用してイメージをプッシュするには、Docker Hub にログインする必要があります。
|
1 |
docker login -u docker-registry-username |
正しいパスワードを入力し、認証が成功すると、イメージをプッシュできます。イメージをプッシュするには、以下のコマンドを使用します。
|
1 |
docker push docker-registry-username/docker-image-name |
コマンドの出力は次のようになります。
|
1 2 3 4 5 |
出力: The push refers to repository [docker.io/cloudsigma23/centos-mysql] ee30e80cbcc5: Pushed 2653d992f4ef: Mounted from library/centos ... |
イメージをプッシュすると、以下の画像に示すように、アカウントのダッシュボードに表示されます。

同様の方法で失敗した場合は、ログインしていない可能性があります。
|
1 2 3 4 5 6 7 |
出力: The push refers to repository [docker.io/cloudsigma23/centos-mysql] ee30e80cbcc5: Layer already exists 2653d992f4ef: Layer already exists errors: denied: requested access to the resource is denied unauthorized: authentication required |
ログインして、プッシュを再試行できます。
結論
Docker を活用する方法はたくさんあります。このチュートリアルは、開始するのに十分な情報を提供するはずです。また、Docker は非常にトレンドのプロジェクトであるため、使用方法やさまざまなユースケースに関する多くの詳細をプロジェクトのブログページ.
Docker で何ができるかについて詳しく知るには、他の Docker チュートリアルも確認してください。
- Docker リソースのクリーンアップ – イメージ、コンテナ、ボリューム
- Docker Compose を使用した Laravel、Nginx、MySQL のデプロイ
- OpenVPN Access Server を使用して Docker で独自の VPN サーバーを実行する
ハッピーコンピューティング!
コメント
コメントはまだありません。最初のコメントを投稿しましょう。