Dockerコンテナの使い方

コンテナは、すべてのDockerインストールの命です。これらはDockerプラットフォームの基盤として機能し、依存関係やバージョンの競合を心配することなく、コンピュータ上でサービスを実行できるようにします。ここでは、Docker CLIツールを使用してDockerコンテナを作成、管理、カスタマイズする基本を示します。
目次
- Dockerイメージの見つけ方とプル方法
- Dockerコンテナの実行と停止方法
- Dockerコンテナの検査方法
- Dockerコンテナのカスタマイズ方法
- Dockerコンテナとイメージの削除方法
注意: まず、LinuxシステムにDockerをインストールして始めてください。
Dockerイメージの見つけ方とプル方法
Dockerコンテナは、元のシステムから独立してプログラムを実行できる特別なタイプのソフトウェア環境です。これを実現するために、Dockerは「ソフトウェアイメージ」を使用します。これらは、コンテナが開始するための基盤となるプログラムの静的コピーです。
イメージとコンテナのこの区別により、ソフトウェアを必要に応じて再作成および適応させることができます。たとえば、「httpd」というイメージを持っていて、それから「website1」と「website2」という2つの異なるコンテナを起動することができます。
新しいDockerイメージを探す最も簡単な方法は、searchサブコマンドを使用することです:
docker search httpd
Webブラウザを使用したい場合は、Docker Hubウェブサイトでパッケージを検索することもできます。

イメージをシステムにダウンロードするには、次のコマンドを実行します:
docker image pull httpdimagesサブコマンドを使用して、新しいイメージが正しくシステムに追加されたことを確認します:
docker images
Dockerfileを使用して新しいイメージを構築する
Docker Hubから事前に構築されたイメージをプルする以外にも、Docker CLIから直接イメージを構築することができます。これは、既存のソフトウェアパッケージのカスタムバージョンを作成したり、新しいアプリをDockerに移植したりする場合に便利です。
これを行うには、まずホームディレクトリにビルドファイル用のフォルダーを作成します:
mkdir ~/my-docker-image && cd ~/my-docker-imageお気に入りのテキストエディタを使用して新しいDockerfileを作成します:
nano ./Dockerfile新しいDockerfile内に次のコード行を貼り付けます:
FROM nginx
COPY sample-site /usr/share/nginx/html「sample-site」フォルダーを作成し、基本的なHTMLサイトをコピーするか作成します:
mkdir ./sample-site
cp ~/index.html ./sample-site/新しいDockerfileを保存し、次のコマンドを実行してシステム上でビルドします:
docker build -t custom-nginx .新しいDockerイメージがDockerイメージのリストに存在するか確認します:
docker images
既存のコンテナを使用して新しいイメージを構築する
Docker CLIツールは、システムに現在存在するコンテナから新しいイメージを構築することもできます。これは、既存の環境で作業していて、現在のセットアップから新しいイメージを作成したい場合に便利です。
これを行うには、コンテナが現在実行されていないことを確認します:
docker stop my-http-servercommitサブコマンドを実行し、次にコンテナの名前を指定し、その後に新しいDockerイメージの名前を提供します:
docker commit my-http-server my-new-server-imagedocker imagesを実行して、新しいDockerイメージがシステムにあることを確認します。

Dockerコンテナの実行と停止方法
Dockerイメージが準備できたので、これを使用して最初のコンテナを作成できます。これを行うには、runサブコマンドを使用し、実行したいイメージの名前を指定します:
docker run httpdこれにより、最初のDockerコンテナを実行できますが、この方法では現在のシェルセッションを占有します。コンテナをバックグラウンドで実行するには、runサブコマンドの後に-dフラグを追加します:
docker run -d httpdrunサブコマンドは、Dockerコンテナの動作を変更できる追加のフラグをいくつか受け取ることができます。たとえば、--nameフラグを使用すると、コンテナにカスタマイズ可能な名前を追加できます:
docker run -d --name=my-http-server httpd一方、--publishフラグを使用して、Dockerコンテナにアクセスできるネットワークポートをリダイレクトできます。これは、コンテナが特権ポートを占有しないようにしたい場合に主に便利です:
docker run -d --name=my-http-server --publish 8080:80 httpd
システム内の現在実行中のすべてのDockerコンテナを確認するには、次のコマンドを実行します:
docker psrunサブコマンドと同様に、psもその動作を変更するいくつかのフラグを受け取ることができます。たとえば、現在停止しているコンテナを表示するには、-aフラグを使用します:
docker ps -a実行中のコンテナを停止するには、stopサブコマンドを使用し、コンテナIDまたはDockerコンテナの名前を指定します:
docker stop my-http-server停止したコンテナは、startサブコマンドを再実行することで再起動できます:
docker start my-http-server余談: darkhttpdを使用して簡単なウェブサイトを実行することで、Dockerを使用したウェブホスティングの基本を学びましょう。
Dockerコンテナの一時停止と強制終了
Docker CLIツールは、実行中のコンテナプロセスを一時的に停止したり、強制終了したりすることもできます。これは、Dockerセットアップの問題をトラブルシューティングしている場合に、問題のあるコンテナを隔離または停止したいときに便利です。
まず、docker psを実行してシステム内のすべての実行中のコンテナをリストします。
管理したいコンテナのIDまたは名前を見つけます。

一時的に停止したいコンテナの名前の後にpauseサブコマンドを実行します:
docker pause my-http-server一時停止したプロセスを再開するには、unpauseサブコマンドを実行します:
docker unpause my-http-server問題のあるプロセスを停止するには、コンテナの名前の後にkillサブコマンドを実行します:
docker kill my-http-serverDockerコンテナの検査方法
コンテナの詳細を知ることは、Dockerスタックの健康を維持するための重要な部分です。これにより、潜在的な問題を迅速に確認でき、デプロイ全体を修正するか再実行するかの違いを生むことができます。
Dockerコンテナの概要を確認するには、inspectサブコマンドを実行します:
docker inspect my-http-serverこれを行うと、コンテナの現在の状態を説明する長いJSON文字列が出力されます。出力をjqにパイプするか、印刷したいJSONオブジェクトの後に-fフラグを使用して絞り込むことができます:
docker inspect -f {{.Name}} my-http-serverコンテナログをターミナルに印刷する
そのほかにも、現在実行中のDockerコンテナのログを追跡して印刷することもできます。これは、サービスが現在どのように動作しているかを確認し、STDOUTに返される出力を確認したい場合に便利です。
これを行うには、コンテナの名前の後にログサブコマンドを実行します:
docker logs my-http-server--followフラグを使用してログサブコマンドを実行すると、Dockerサービスの継続的なログを作成できます。これは、UNIXパイプの末尾でtail -fを実行するのと似ています:
docker logs --follow my-http-server
他のサブコマンドと同様に、Dockerコンテナのログの出力をカスタマイズするためにさまざまなフラグを追加することもできます。たとえば、--timestampsフラグを使用すると、コンテナがSTDOUTに送信する各メッセージに詳細なタイムスタンプが追加されます:
docker logs --timestamps my-http-server--detailsフラグは、現在のDockerコンテナに設定した環境変数さえ印刷します。一方、--sinceフラグを使用すると、特定の時点以降に発生したログのみを表示できます:
docker logs --details --since 8m my-http-server
Dockerコンテナのカスタマイズ方法
基本的に、Dockerコンテナは、現在のシステムの上に実行されている小型の、簡素化されたLinuxのバージョンです。これは、仮想マシンと同様に、コンテナ内のデータにアクセスして取得することが可能であることを意味します。
ホストマシンからコンテナにローカルファイルをコピーするには、cpサブコマンドを実行します:
docker cp ~/my-file my-http-server:/tmp時には、コンテナ内にシェルを開いて「ステップイン」する必要があります。この方法で、ファイルを編集したり、バイナリをインストールしたり、ニーズに応じてカスタマイズしたりできます:
docker exec -it my-http-server /bin/bash例えば、「index.html」を編集して、ウェブサイトのホームページを作成することができます。

コンテナのシェルを終了するには、Ctrl + Dを押すか、ターミナルでexitを実行します。

知っておくと良いこと: 既存のDockerコンテナを新しいシステムに移動する方法を学びましょう。
Dockerコンテナとイメージの削除方法
未使用のDockerコンテナとイメージを削除することは、デプロイの一般的なメンテナンスの重要な部分です。これを行うことで、サーバーから不要なファイルを削除し、長期的にストレージスペースを節約できます。
コンテナを削除する前に、まず停止していることを確認します:
docker stop my-http-server次に、rmサブコマンドを使用してコンテナを削除します:
docker rm my-http-serverdocker ps -aを実行して、古いDockerコンテナが正しく削除されたことを確認します。

Dockerデプロイから元のDockerイメージを削除します:
docker rmi my-new-server-image
docker imagesを実行して、元のDockerイメージが正しく削除されたか確認します。

Dockerコンテナを作成、管理、削除する方法を学ぶことは、Linuxサーバーでできることの一部に過ぎません。サーバーとDockerコンテナハブをホストして、Linuxシステム管理の深い世界を探求しましょう。
画像クレジット: Shamin Haky via Unsplash. すべての変更とスクリーンショットはRamces Redによるものです。