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://を開くと、次の画面が表示されます。

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

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

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

ほとんどのセクションは自己説明的です。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ボタンをクリックして新しいネットワークを作成します。

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

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

スタックの名前を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

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

Deploy the stackボタンをクリックしてNPMコンテナを作成して開始します。
NPMにアクセス
ブラウザでURL https://を開くと、次の画面が表示されます。以下のデフォルトの資格情報を入力してサインインします。
メールアドレス: [email protected] パスワード: changeme
次に、すぐに名前とメールアドレスを設定するように求められます。Saveボタンをクリックし、新しいパスワードを作成するように求められます。再度Saveボタンをクリックして開始します。

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

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

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コンテナをプロキシマネージャーのネットワークに追加します。

エラーが表示される場合がありますが、ページを更新すると、コンテナが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は、最小限の構成でアプリケーションを直接起動するためのいくつかの事前定義されたテンプレートを提供します。

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

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

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

上部には、実行中のコンテナに対して実行できるアクションのリストが表示されます。コンテナを停止したり、強制終了したりできます。再作成は、コンテナを最初から作成します。Duplicate/Editオプションを使用すると、設定を変更する前に別の同一のコンテナを作成できます。
Container statusは、実行時間、IPアドレス、およびコンテナに関するその他の詳細を表示します。
Logsオプションは、docker logsコマンドの出力を表示します。コマンドの出力はキャッシュされないため、ページを更新するたびにコマンドが最初から実行されます。

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

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

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

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

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コンテナが停止した状態でリストに表示されます。

結論
これで、Docker管理とNginx Proxy ManagerのためのPortainerのインストールと使用に関するチュートリアルは終了です。次回のチュートリアルでは、Dockerイメージのビルド、カスタムコンテナの作成、DockerスワームでのPortainerの使用について探求します。質問がある場合は、下のコメントに投稿してください。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。