ユーザーを Docker コンテナに追加する

David Mbochi Njonge 2023年6月20日
  1. エクスプレス アプリケーションの作成
  2. アプリケーションの Docker イメージを作成する
  3. イメージを構築する
  4. コンテナを実行する
  5. ユーザーが作成されたことを確認する
  6. コンテナからデータをフェッチする
  7. まとめ
ユーザーを Docker コンテナに追加する

アプリケーションを開発するとき、通常、さまざまなユーザーがシステムと対話してさまざまな機能を実行します。 これらのユーザーには、役割に基づいて機能を実行できる権限があります。

システムのすべての役割が割り当てられているため、システムのすべての機能を実行できるスーパー ユーザーがいることに注意してください。 同様に、Docker コンテナーのユーザーを作成し、そのユーザーがコンテナー内の特定のタスクのみを実行できるようにするためのアクセス許可を設定できます。

これらは、コンテナーの重要な部分へのアクセスをスーパー ユーザーに制限し、特定のイベントが発生したときにどのユーザーがシステムと対話していたかを追跡できるため、コンテナーのセキュリティを強化します。

このチュートリアルでは、製品の配列を返す Express アプリケーションを実装して、Docker コンテナーにユーザーを追加する方法を学習します。

エクスプレス アプリケーションの作成

WebStorm IDEA を開き、File > New > Project を選択します。 Node.js を選択し、Location セクションのプロジェクト名を untitled から product-api に変更します。

ノード インタープリター および パッケージ マネージャー セクションをコンピューターから自動的に追加できるように、ノード ランタイム環境をインストールしておく必要があります。 Create というラベルの付いたボタンを押して、プロジェクトを生成します。

Express をインストールするには、WebStorm でキーボード ショートカット Alt+F12 を使用して新しいターミナル ウィンドウを開き、次の npm コマンドを使用して依存関係をインストールします。

~/WebstormProjects/product-api$ npm install express

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

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
    res.json(
        [
            {
                name: 'Iphone 13 Pro',
                price: 1500.67
            },
            {
                name: 'Samsung Galaxy A53',
                price: 1300.56
            },
        ])
})

app.listen(port, () => {
    console.log(`Example app listening on port ${port}`)
})

このファイルでは、ブラウザーで / に対して GET リクエストを行うと製品の配列を返す Express アプリケーションを作成しました。 このアプリケーションはポート 3000 を公開していることに注意してください。これは、このアプリケーションを提供するのに役立ちます。

アプリケーションの Docker イメージを作成する

product-api フォルダーに Dockerfile という名前のファイルを作成し、次のコードをコピーしてファイルに貼り付けます。

FROM node:latest
RUN groupadd admin &&\
    useradd mary -g admin -s /bin/sh
WORKDIR /com/product
ADD package*.json ./
RUN npm install
ADD . .
USER mary
CMD node index.js

このファイルでは、ベース イメージとして node:latest を使用してアプリケーションのイメージを作成しました。 FROM 命令に続く RUN 命令は、admin という名前のグループを作成し、mary という名前のユーザーをグループに追加します。

バックスラッシュ \ を使用して、コマンドを次の行に続けています。 グループとユーザーの作成に使用されるコマンドは Linux コマンドであり、groupadduseradd が含まれていることに注意してください。

このファイルの他の重要な命令は、残りの段階で使用されるデフォルトのユーザーを設定する USER 命令です。

オプションですが、デフォルトのグループを設定することもできます。 Docker ドキュメント では、残りの手順の使用法について詳しく説明しています。

イメージを構築する

イメージを作成するには、キーボード ショートカット Alt+F12 を使用して新しいターミナル ウィンドウを開き、次のコマンドを使用して product-api という名前のイメージを作成します。

~/WebstormProjects/product-api$ docker build --tag product-api:latest .

このコマンドは、以下のターミナル ウィンドウに示すように、Dockerfile という名前のファイルを最初のファイルから順番に実行します。 ドット . コマンドの最後にある は、この場合は現在のフォルダーにある Dockerfile ファイルの場所を示しています。

 => [1/6] FROM docker.io/library/node:latest@sha256:bb3b9f1867edba6d8892758889e43b2f0205ebbd381969a2c45577d38281  95.4s
 => => resolve docker.io/library/node:latest@sha256:bb3b9f1867edba6d8892758889e43b2f0205ebbd381969a2c45577d38281a  0.1s
 => [2/6] RUN groupadd admin &&    useradd mary -g admin -s /bin/sh                                                6.3s
 => [3/6] WORKDIR /com/product                                                                                     0.9s
 => [4/6] ADD package*.json ./                                                                                     0.7s
 => [5/6] RUN npm install                                                                                          7.1s
 => [6/6] ADD . .

コンテナを実行する

イメージがビルドされたら、次のコマンドを使用して、このイメージから product-service という名前のコンテナーを実行します。

~/WebstormProjects/product-api$ docker run --name product-service -d -p 3030:3000 product-api:latest

このコマンドは、コンテナーがローカルで使用されているため、ローカルホストでポート 3000 をポート 3030 にマップするコンテナーを実行します。

ユーザーが作成されたことを確認する

ユーザーが作成されたことを確認するには、次のコマンドを使用して、exec 命令を使用して実行中のコンテナーからコマンドを実行できるようにします。

~/WebstormProjects/product-api$ docker exec -it product-service /bin/sh

WORKDIR/com/product として指定したため、コマンドはこのディレクトリで実行されます。 ディレクトリを指定しない場合、コマンドはデフォルトのディレクトリで実行されます。

このコマンドはインタラクティブな Bash シェルを実行し、Bash セッションを使用して、実行中のコンテナーでコマンドを実行できます。 以下に示すように、実行中のコンテナーで次のコマンドを実行して、ユーザー グループを確認します。

$ id mary

出力:

uid=1001(mary) gid=1001(admin) groups=1001(admin)

コンテナーには admin という名前のグループの mary という名前のユーザーがいて、必要に応じてアクセス許可を変更できることがわかりました。

コンテナからデータをフェッチする

ブラウザーを開き、localhost:3030 (http://localhost:3030/) にリクエストを発行して、アプリケーションが期待どおりに動作していることを確認します。 以下に示すように、リクエストが index.js ファイルで作成した製品 API を返すことを確認します。

[
    {
    "name": "Iphone 13 Pro",
    "price": 1500.67
    },
    {
    "name": "Samsung Galaxy A53",
    "price": 1300.56
    }
]

まとめ

このチュートリアルでは、Dockerfile を使用してコンテナーにユーザーを追加する方法を学びました。 ユーザーが組織内の特定のグループに属しているため、ユーザーをグループに追加する方法も説明しました。

同じ結果を達成するためのさまざまなアプローチがあることに注意してください。そのため、要件を満たす任意の方法を自由に使用してください。

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