Docker管理 · 4 min read · Sep 22, 2025

Portainerを使用してDocker管理を行うためのインストールと使用方法(Nginx Proxy Manager付き)

Portainerは、Docker、Kubernetes、Nomadのためのオープンソースのコンテナ管理ソリューションで、コンテナの起動、作成、実行を簡単に行うことができます。コンテナ、イメージ、ネットワーク、ボリュームを管理するためのWebベースのダッシュボードを提供します。

このチュートリアルでは、LinuxサーバーにPortainerコンテナ管理ソリューションをインストールして構成し、さまざまなアプリを実行するためにDockerコンテナを作成および管理する方法を学びます。また、Nginxプロキシマネージャーを使用してこれらのコンテナをNginxの背後に配置する方法も学びます。

前提条件

  • Ubuntu / Debian / Cent OS / Rocky Linux 8 / Alma Linuxを実行しているLinuxサーバー。
  • sudo権限を持つ非rootユーザー。
  • Portainer(portrainer.example.com)およびNginx Proxy Manager(npm.example.com)用のサーバーを指す完全修飾ドメイン名(FQDN)。

ステップ1 - ファイアウォールの構成

Cent OS/Rocky Linux/Alma Linux

Firewalldファイアウォールがインストールされている必要があります。ファイアウォールの状態を確認します。

$ sudo firewall-cmd --state
running

ポート80、9443、443を開きます。PortainerはHTTPS経由でWeb UIを公開するためにポート9443を使用します。Nginx Proxy ManagerはUIのためにポート81を使用します。

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --permanent --add-port=9443/tcp
$ sudo firewall-cmd --permanent --add-port=81/tcp

変更を有効にするためにファイアウォールを再読み込みします。

$ sudo firewall-cmd --reload

Ubuntu/Debian

UbuntuおよびDebianシステムはデフォルトでufw(Uncomplicated Firewall)を使用します。

ファイアウォールが実行中かどうかを確認します。

$ sudo ufw status

実行中の場合は、ポート80、9443、443を開きます。

$ sudo ufw allow 80
$ sudo ufw allow 443
$ sudo ufw allow 9443
$ sudo ufw allow 81

ファイアウォールが実行されていない場合はSSHポートを開きます。

$ sudo ufw allow "OpenSSH"

ファイアウォールが実行されていない場合は有効にします。

$ sudo ufw enable

実行中の場合は、変更を適用するために再読み込みします。

$ sudo ufw reload

ステップ2 - Dockerのインストール

Cent OS/Rocky Linux/Alma Linux

以下のコマンドを実行してDockerをインストールします。

$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce docker-ce-cli containerd.io

Ubuntu

$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io

Debian

$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io

Dockerサービスを有効にして開始します。

$ sudo systemctl start docker --now

ユーザー名をDockerグループに追加します。

$ sudo usermod -aG docker $USER

システムからログアウトし、変更を適用するために再度ログインします。

ステップ3 - Docker Composeのインストール

Docker composeバイナリをダウンロードしてインストールします。

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

バイナリに実行権限を適用します。

$ sudo chmod +x /usr/local/bin/docker-compose

ステップ4 - Portainerのインストール

Portainer用のディレクトリを作成します。

$ mkdir ~/portainer

ディレクトリに移動します。

$ cd ~/portainer

Docker Composeファイルを作成して編集します。

$ nano docker-compose.yaml

以下のコードを貼り付けます。

version: "3.3"
services:
    portainer:
      image: portainer/portainer-ce:latest
      container_name: portainer
      restart: always
      privileged: true
      volumes:
        - ./data:/data:Z
        - /var/run/docker.sock:/var/run/docker.sock:Z
      ports:
        - 9443:9443

Ctrl + Xを押してファイルを保存し、プロンプトが表示されたらYを入力します。

Docker composeファイルを見てみましょう。

  • Docker HubからPortainer Community Editionの最新バージョンをプルしています。Portainer Community Editionは無料で使用できますが、ビジネスエディションには有料ライセンスが必要です。ビジネスエディションをプルすることもできますが、使用するためのライセンスキーが求められます。
  • コンテナを識別およびリンクするために、コンテナの名前をportainerとしています。
  • 再起動ポリシーはalwaysに設定されており、コンテナが起動時に常に稼働するようになっています。
  • privileged: trueの設定は、PortainerがDockerソケットにアクセスし、特権コンテキストで実行できるようにするためのものです。SELinuxを使用している場合はこの設定が必要です。SELinuxを使用していない場合は、この設定を削除できます。この設定は、Portainerコンテナにホストシステム上のすべてにアクセスする権限を与えます。したがって、何をしているのかを理解している場合にのみこの設定を有効にしてください。
  • volumesセクションは、ホスト上のフォルダーをコンテナ内のフォルダーにバインドマウントを使用してマッピングします。関連データを保存するために~/portainer/dataディレクトリをコンテナに公開し、コンテナ管理のためのDockerソケットAPIを使用します。:Zラベルは、ホスト上でSELinuxを実行していることをDockerに伝えます。SELinuxが有効でない場合は、ラベルを削除する必要があります。

Portainerを起動します。

$ docker-compose up -d

コンテナの状態を確認します。

$ docker ps
CONTAINER ID   IMAGE                           COMMAND        CREATED         STATUS         PORTS                                                           NAMES
916411e8d12e   portainer/portainer-ce:latest   "/portainer"   5 seconds ago   Up 4 seconds   8000/tcp, 9000/tcp, 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp   portainer

ステップ5 - Portainerにアクセスして構成する

ブラウザでURL https://:9443を開くと、次の画面が表示されます。

Portainerインストール画面

新しい管理者ユーザーを作成するように求められます。ユーザーの詳細を追加します。プライバシーを気にする場合は、匿名統計の収集を許可のチェックボックスを外します。ユーザーを作成ボタンをクリックしてインストールを開始し、新しい管理者アカウントを作成します。

次に、次のダッシュボード画面に移動します。

Portainerダッシュボード

数秒後、自動的に更新され、次の画面が表示されます。

Portainerホーム

Portainerが実行されているローカル環境が表示されます。local環境をクリックして開始します。

Portainer環境ホームページ

ほとんどのセクションは自己説明的です。Stacksセクションは、Docker composeファイルを使用してコンテナを作成するのに役立ちます。サイドバーのContainersカテゴリを使用して、コンテナを直接デプロイできます。Hostsセクションを通じて現在のDocker環境を構成できます。App Templatesセクションには、最も一般的なアプリケーションをインストールするための事前インストールされたDocker composeファイルが付属しています。カスタムテンプレートを作成することもできます。

Settingsセクションでは、カスタムDockerレジストリの追加、Dockerスワーム用の複数のホストの追加、ユーザーアクセスの構成、データのバックアップ、Portainerのカスタマイズなど、さまざまな設定を構成できます。

ステップ5 - Nginx Proxy Manager(NPM)を使用してPortainerをリバースプロキシの背後に置く

先に進む前に、Nginx Proxy Managerを使用してPortainerをリバースプロキシの背後に置きましょう。Nginx Proxy Managerは、Nginxをリバースプロキシホストとして設定するためのWeb管理UIを提供するDockerアプリケーションです。また、リダイレクトやストリーミングホストとしても使用できます。

NPMのインストール

最初のステップは、Nginx Proxy Manager(NPM)用のネットワークを作成することです。Networksセクションを開き、Add Networkボタンをクリックして新しいネットワークを作成します。

Portainerネットワークリスト

ネットワークに名前を付け、すべての設定を変更せずにそのままにします。Create the networkボタンをクリックして完了します。

Portainerネットワーク作成ページ

Stacksに移動し、Add stackボタンを使用して新しいスタックを作成します。

Portainerスタックスページ

スタックの名前をnginx-proxy-managerとし、以下のコードを貼り付けます。

version: "3.3"
services:
  npm-app:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: npm-app
    restart: unless-stopped
    ports:
      - '80:80' # 公開HTTPポート
      - '443:443' # 公開HTTPSポート
      - '81:81' # 管理Webポート
      # 露出したい他のストリームポートを追加
      # - '21:21' # FTP
    environment:
      DB_MYSQL_HOST: "npm-db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
      DB_MYSQL_NAME: "npm"
      # ホストでIPv6が有効でない場合は以下の行のコメントを外す
      # DISABLE_IPV6: 'true'
    volumes:
      - ./npm-data:/data:Z
      - ./letsencrypt:/etc/letsencrypt:Z
    depends_on:
      - npm-db
    networks:
      - npm-network
      - npm-internal

  npm-db:
    image: 'mariadb:latest'
    container_name: npm-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
    volumes:
      - ./npm-data/mysql:/var/lib/mysql:Z
    networks:
      - npm-internal

networks:
  npm-internal:
  npm-network:
    external: true

Portainerスタック追加ページ

データベースとroot MySQLパスワードを設定するために2つの環境変数を設定しました。Portainerは環境変数を使用してシークレットを設定できます。ページを下にスクロールし、Add environment variableボタンをクリックして強力なパスワードを追加します。

Portainerスタック環境変数

Deploy the stackボタンをクリックしてNPMコンテナを作成して開始します。

NPMにアクセス

ブラウザでURL https://:81を開くと、次の画面が表示されます。以下のデフォルトの資格情報を入力してサインインします。

メールアドレス: [email protected] パスワード: changeme

次に、すぐに名前とメールアドレスを設定するように求められます。Saveボタンをクリックし、新しいパスワードを作成するように求められます。再度Saveボタンをクリックして開始します。

Nginx Proxy Managerダッシュボード

Hosts >> Proxy Hostsに移動し、Add Proxy Hostボタンをクリックします。

Portainerをプロキシホストとして追加

ドメイン名をportainer.example.comとして入力します。スキームをhttpsとして選択します。コンテナの名前をForward Hostnameとして入力し、Forward portとして9443を入力します。Block Common ExploitsおよびWebsockets Supportオプションをチェックします。

Portainer NPM SSLオプション

SSLタブに切り替え、ドロップダウンメニューからRequest a new SSL Certificateを選択します。Force SSLおよびHTTP/2 SupportオプションをチェックしてSSL接続を保護および最適化します。更新通知を受け取るためのメールアドレスを入力し、利用規約に同意します。SaveボタンをクリックしてPortainerのプロキシホストの設定を完了します。

PortainerをNPMコンテナに接続

プロキシホストを設定しましたが、コンテナはまだNPMネットワークに接続されていません。Portainerダッシュボードに戻り、Containersセクションに移動してportainerコンテナを選択します。

Connected networksセクションのドロップダウンメニューからnpm-networkを選択し、Join networkボタンをクリックしてPortainerコンテナをプロキシマネージャーのネットワークに追加します。

Portainer接続ネットワーク

エラーが表示される場合がありますが、ページを更新すると、コンテナがNPMネットワークに追加されているのが見えるはずです。

PortainerがNPMに接続

ブラウザでURL https://portainer.example.comを使用してPortainerにアクセスできるようになります。

NPMをhttps://npm.example.comのような公開URLの背後に置くために、同様の手順を実行できます。これは、Nginx Proxy Managerチュートリアルで説明されています。

Portainerの公開URLを設定したので、公開された9443ポートを削除できます。そのためには、ターミナルに戻り、portainerディレクトリに移動します。

$ cd ~/portainer

Docker composeファイルを編集のために開きます。

$ nano docker-compose.yaml

ポートセクションをコメントアウトして削除します。以下のようにします。

version: "3.3"
services:
    portainer:
      image: portainer/portainer-ce:latest
      container_name: portainer
      restart: always
      privileged: true
      volumes:
        - ./data:/data:Z
        - /var/run/docker.sock:/var/run/docker.sock:Z
      #ports:
      #  - 9443:9443
      networks:
        - npm-network

networks:
  npm-network:
    external: true

Ctrl + Xを押してファイルを保存し、プロンプトが表示されたらYを入力します。

ここでは、NPMネットワークの詳細を追加しました。Portainerコンテナを再起動する必要があるためです。

Portainerコンテナを停止します。

$ docker-compose down --remove-orphans

更新された構成でコンテナを再起動します。

$ docker-compose up -d

ステップ6 - アプリテンプレートを使用してコンテナをデプロイ

Portainerは、最小限の構成でアプリケーションを直接起動するためのいくつかの事前定義されたテンプレートを提供します。

Portainerアプリテンプレート

App Templatesセクションに移動し、任意のテンプレートを選択します。名前を付け、使用するネットワークを選択します。高度なオプションセクションを使用してカスタムポート、ネットワーク、およびボリュームマウントをデプロイします。

Deploy the containerボタンをクリックしてアプリケーションのデプロイを完了します。ここではRedisコンテナをデプロイしています。

Portainer Redisアプリデプロイ

ステップ7 - コンテナの管理

既存のコンテナを管理してみましょう。コンテナページを開くと、すべての実行中のコンテナが表示されます。

Portainerコンテナリスト

最近作成したhw-redisコンテナをクリックして進みます。

Portainerコンテナアクション

上部には、実行中のコンテナに対して実行できるアクションのリストが表示されます。コンテナを停止したり、強制終了したりできます。再作成は、コンテナを最初から作成します。Duplicate/Editオプションを使用すると、設定を変更する前に別の同一のコンテナを作成できます。

Container statusは、実行時間、IPアドレス、およびコンテナに関するその他の詳細を表示します。

Logsオプションは、docker logsコマンドの出力を表示します。コマンドの出力はキャッシュされないため、ページを更新するたびにコマンドが最初から実行されます。

Portainerコンテナログ

Inspectオプションは、コンテナに対してdocker inspectコマンドを実行し、その出力を表示します。

Portainerコンテナインスペクト

Statsオプションは、リアルタイムでコンテナの使用状況を表示します。

Portainerコンテナ統計

Consoleオプションを使用してコンテナコンソールを起動できます。コマンドと実行するシステムユーザーを求められます。

Portainerコンテナコンソール設定

Connectボタンを押してコンソールを起動します。

Portainerコンテナコンソールシェル

Attachオプションは、docker attachコマンドを実行します。

コンテナの詳細ページには他のオプションもあります。既存のコンテナを使用してイメージを作成できます。他のオプションには、コンテナの再起動ポリシーを変更したり、既存のコンテナにネットワークを接続または切断したりすることが含まれます。

Portainerに外部コンテナを接続

Portainerの外部で作成されたコンテナは、Portainerが実行されている同じシステム上で作成されている限り、内部に表示されます。これは、PortainerがWebSocketを使用してDockerに接続されているためです。

Hello World Dockerコンテナを実行してテストしてみましょう。

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:10d7d58d5ebd2a652f4d93fdd86da8f265f5318c6a73cc5b6a9798ff6d2b2e67
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

ターミナルでコンテナリストを確認します。-aフラグを使用して、停止したコンテナを含むすべてのコンテナのリストを表示します。コンテナの名前がsad_williamsonとして表示されます。

$ docker ps -a
CONTAINER ID   IMAGE                             COMMAND                  CREATED         STATUS                     PORTS                                                                                  NAMES
5fa46b85d594   hello-world                       "/hello"                 3 minutes ago   Exited (0) 3 minutes ago                                                                                          sad_williamson
.....

次に、Portainerのコンテナページを確認すると、hello worldコンテナが停止した状態でリストに表示されます。

Portainer Hello Worldコンテナ

結論

これで、Docker管理とNginx Proxy ManagerのためのPortainerのインストールと使用に関するチュートリアルは終了です。次回のチュートリアルでは、Dockerイメージのビルド、カスタムコンテナの作成、DockerスワームでのPortainerの使用について探求します。質問がある場合は、下のコメントに投稿してください。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。