新しい疑似 TTY で実行中の Docker コンテナに入る

  1. 新しいプロジェクトを作成する
  2. イメージを定義する
  3. イメージを構築する
  4. コンテナを実行する
  5. docker exec コマンドを使用して実行中の Docker コンテナに入る
  6. まとめ
新しい疑似 TTY で実行中の Docker コンテナに入る

コンテナーはアプリケーションのバージョンを実行しており、重要な情報はコンテナーが実行されているときにのみアクセスできます。 たとえば、コンテナのログが保存されている場所を知りたい場合があります。

これを実現するには、実行中のコンテナーに入り、この特定のコンテナーに関する情報を取得する必要があります。 このチュートリアルでは、新しい疑似 TTY を使用して実行中の Docker コンテナーに入るために活用できるさまざまなアプローチを学習します。

新しいプロジェクトを作成する

このチュートリアルのすべての例で Nginx アプリケーションを使用して、実行中のコンテナーに入る方法を示します。

WebStorm IDE を開き、File > New > Project を選択して新しいプロジェクトを作成します。 開いたウィンドウで [空のプロジェクト] を選択し、プロジェクト名を untitled から docker-enter-container に変更するか、任意の名前を使用します。

最後に、Create というラベルの付いたボタンを押して、プロジェクトを生成します。

現在のフォルダーの下に index.html という名前のファイルを作成し、次のコードをコピーしてファイルに貼り付けます。

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Bootstrap demo</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css"
          rel="stylesheet"
          integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi"
          crossorigin="anonymous">
</head>
<body>
<table class="table table-dark">
    <thead>
    <tr>
        <th scope="col">#</th>
        <th scope="col">First</th>
        <th scope="col">Last</th>
        <th scope="col">Handle</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <th scope="row">1</th>
        <td>Mark</td>
        <td>Otto</td>
        <td>@mdo</td>
    </tr>
    </tbody>
</table>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3"
        crossorigin="anonymous"></script>
</body>
</html>

このファイルでは、Bootstrap を使用して、表を表示する単純な Web ページを作成しています。 これは、コンテナを実行したときに返されるページです。

コードを自由に変更して、他の情報を表示してください。

イメージを定義する

Dockerfile という名前のファイルを作成し、次の Docker 手順をコピーしてファイルに貼り付けます。

FROM nginx:1.23.1-alpine
COPY . /usr/share/nginx/html
  1. FROM - 後続の命令を使用してカスタム イメージを作成するベース イメージを設定します。 これは、ファイルの最初の命令でなければなりません。
  2. COPY - 現在のディレクトリにあるすべてのファイルとフォルダをイメージ ファイル システムにコピーします。 この場合、すべてのファイルとフォルダーを /usr/share/nginx/html にコピーし、このイメージの要件としてこの場所を使用しました。

イメージを構築する

コンピュータのキーボード ショートカット ALT+F12 を押して、新しいターミナル ウィンドウを開きます。 次に、以下のコマンドを実行して、タグ enter-container を使用してイメージをビルドします。

~/WebstormProjects/docker-enter-container$ docker build --tag enter-container:latest .

このコマンドは、Dockerfile 命令を順番に実行し、以下に示すように、ターミナル ウィンドウで命令が実行されていることを確認できます。

=> CACHED [1/2] FROM docker.io/library/nginx:1.23.1-alpine@sha256:b87c350e6c69e0dc7069093dcda226c4430f3836682af4f649f2af9  0.0s
 => [2/2] COPY . /usr/share/nginx/html

コンテナを実行する

同じターミナル ウィンドウを使用して、enter-container-prod という名前のコンテナーを実行する次のコマンドを実行します。

~/WebstormProjects/docker-enter-container$ docker run --name enter-container-prod -d -p 3000:80 enter-container:latest

このコマンドはコンテナーを実行し、ホストのポート 3000 を公開して、コンテナーのポート 80 をリッスンします。 アプリケーションを表示するには、ブラウザで localhost:3000 (http://localhost:3000/) にリクエストを発行し、index.html ページにテーブルを表示します。

次のセクションでは、このコンテナーを使用して、コンテナーに入るために使用できるさまざまなアプローチを示します。

docker exec コマンドを使用して実行中の Docker コンテナに入る

実行中のコンテナーで新しいコマンドを実行する場合は、exec コマンドを使用します。 このコマンドは、コンテナーのプライマリ プロセスが実行されているときにのみ実行され、コンテナーを再起動しても再起動されないことに注意してください。

WORKDIR 命令を使用して作業ディレクトリが指定されていない場合、コマンドはデフォルト ディレクトリで実行されます。 同じターミナル ウィンドウで、次のコマンドを実行して、前のセクションで実行したコンテナーに入ります。

~/WebstormProjects/docker-enter-container$ docker exec -it enter-container-prod /bin/sh

出力:

/ #

追加のフラグ -it も使用していることに注意してください。これは Docker にコンテナー STDIN に接続された疑似 TTY を割り当て、コンテナー内に対話型シェルを作成するように指示します。

ls コマンドを実行すると、以下に示すように、コンテナーのルート ディレクトリにいることがわかります。

/ # ls

出力:

bin                   etc                   mnt                   run                   tmp
dev                   home                  opt                   sbin                  usr
docker-entrypoint.d   lib                   proc                  srv                   var

/bin/sh シェル コマンドを sh に置き換えることで、コンテナー内にインタラクティブなシェルを作成できます。 これは覚えやすく、以下に示すように使用できます。

~/WebstormProjects/docker-enter-container$ docker exec -it enter-container-prod sh

sh コマンドの代わりに bash コマンドを使用する

bash という名前の sh コマンドの代わりに docker exec コマンドを使用できます。 このコマンドを使用すると、コンテナー内にインタラクティブ シェルを作成することもできます。

bash コマンドは、前の例で sh コマンドを使用したのと同じ方法で使用できます。 CTRL+D を使用してシェル セッションを終了し、次のコマンドを実行して、bash コマンドを使用して Docker コンテナーに入ります。

~/WebstormProjects/docker-enter-container$ docker exec -it enter-container-prod /bin/bash

/bin/bash シェル コマンドを bash に置き換えることで、コンテナー内にインタラクティブなシェルを作成できます。 これは覚えやすく、以下に示すように使用できます。

~/WebstormProjects/docker-enter-container$ docker exec -it enter-container-prod bash

シェル コマンドは、コンテナーにインストールされているシェルに依存することに注意してください。 シェル コマンドが 2つあるコンテナもあれば、1つしかないコンテナもあります。

まとめ

このチュートリアルでは、新しい疑似 TTY を使用して Docker コンテナーに入るために活用できるさまざまなアプローチを学びました。 このチュートリアルで取り上げるアプローチには、シェルの bash または sh コマンドのいずれかで docker exec コマンドを使用することが含まれます。

チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub

関連記事 - Docker Container