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

CLIツールからhttpd Dockerイメージを強調表示しているターミナル。

Webブラウザを使用したい場合は、Docker Hubウェブサイトでパッケージを検索することもできます。

Docker Hubウェブサイトからhttpd Dockerイメージを示すスクリーンショット。

イメージをシステムにダウンロードするには、次のコマンドを実行します:

docker image pull httpd

imagesサブコマンドを使用して、新しいイメージが正しくシステムに追加されたことを確認します:

docker images

システムにインストールされたhttpd Dockerイメージを強調表示しているターミナル。

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-server

commitサブコマンドを実行し、次にコンテナの名前を指定し、その後に新しいDockerイメージの名前を提供します:

docker commit my-http-server my-new-server-image

docker imagesを実行して、新しいDockerイメージがシステムにあることを確認します。

システムにインストールされたDockerコンテナからの新しいカスタムイメージを強調表示しているターミナル。

Dockerコンテナの実行と停止方法

Dockerイメージが準備できたので、これを使用して最初のコンテナを作成できます。これを行うには、runサブコマンドを使用し、実行したいイメージの名前を指定します:

docker run httpd

これにより、最初のDockerコンテナを実行できますが、この方法では現在のシェルセッションを占有します。コンテナをバックグラウンドで実行するには、runサブコマンドの後に-dフラグを追加します:

docker run -d httpd

runサブコマンドは、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コンテナを確認するには、次のコマンドを実行します:

docker ps

runサブコマンドと同様に、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または名前を見つけます。

システムで現在実行中のカスタムDockerコンテナを強調表示しているターミナル。

一時的に停止したいコンテナの名前の後にpauseサブコマンドを実行します:

docker pause my-http-server

一時停止したプロセスを再開するには、unpauseサブコマンドを実行します:

docker unpause my-http-server

問題のあるプロセスを停止するには、コンテナの名前の後にkillサブコマンドを実行します:

docker kill my-http-server

Dockerコンテナの検査方法

コンテナの詳細を知ることは、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コンテナの継続的なログを示すターミナル。

他のサブコマンドと同様に、Dockerコンテナのログの出力をカスタマイズするためにさまざまなフラグを追加することもできます。たとえば、--timestampsフラグを使用すると、コンテナがSTDOUTに送信する各メッセージに詳細なタイムスタンプが追加されます:

docker logs --timestamps my-http-server

--detailsフラグは、現在のDockerコンテナに設定した環境変数さえ印刷します。一方、--sinceフラグを使用すると、特定の時点以降に発生したログのみを表示できます:

docker logs --details --since 8m my-http-server

現在実行中のDockerコンテナからのより詳細なログ出力を示すターミナル。

Dockerコンテナのカスタマイズ方法

基本的に、Dockerコンテナは、現在のシステムの上に実行されている小型の、簡素化されたLinuxのバージョンです。これは、仮想マシンと同様に、コンテナ内のデータにアクセスして取得することが可能であることを意味します。

ホストマシンからコンテナにローカルファイルをコピーするには、cpサブコマンドを実行します:

docker cp ~/my-file my-http-server:/tmp

時には、コンテナ内にシェルを開いて「ステップイン」する必要があります。この方法で、ファイルを編集したり、バイナリをインストールしたり、ニーズに応じてカスタマイズしたりできます:

docker exec -it my-http-server /bin/bash

例えば、「index.html」を編集して、ウェブサイトのホームページを作成することができます。

DockerコンテナのルートシェルにコピーされたHTMLファイルを示すターミナル。

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

Dockerコンテナのルートシェルからの終了コマンドを強調表示しているターミナル。

知っておくと良いこと: 既存のDockerコンテナを新しいシステムに移動する方法を学びましょう。

Dockerコンテナとイメージの削除方法

未使用のDockerコンテナとイメージを削除することは、デプロイの一般的なメンテナンスの重要な部分です。これを行うことで、サーバーから不要なファイルを削除し、長期的にストレージスペースを節約できます。

コンテナを削除する前に、まず停止していることを確認します:

docker stop my-http-server

次に、rmサブコマンドを使用してコンテナを削除します:

docker rm my-http-server

docker ps -aを実行して、古いDockerコンテナが正しく削除されたことを確認します。

現在停止しているものを含むすべての利用可能なDockerコンテナを示すターミナル。

Dockerデプロイから元のDockerイメージを削除します:

docker rmi my-new-server-image

システムからDockerイメージを削除した出力を強調表示しているターミナル。

docker imagesを実行して、元のDockerイメージが正しく削除されたか確認します。

更新されたDockerイメージリストを示すターミナル。

Dockerコンテナを作成、管理、削除する方法を学ぶことは、Linuxサーバーでできることの一部に過ぎません。サーバーとDockerコンテナハブをホストして、Linuxシステム管理の深い世界を探求しましょう。

画像クレジット: Shamin Haky via Unsplash. すべての変更とスクリーンショットはRamces Redによるものです。