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

David Mbochi Njonge 2023年6月20日
  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 コマンドを使用することが含まれます。

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