Docker: クイックスタート

Stackhero for Docker による高速かつ安全なリモート Docker 管理

Stackheroドキュメントへようこそ

Stackheroは、迅速かつ信頼性の高いコンテナデプロイメントのために設計された、すぐに使えるDockerクラウドCaaS(Containers as a Service)プラットフォームを提供しています。

  • docker-compose up ひとつで本番環境にデプロイできます。追加設定は不要で、コンテナをそのまま起動するだけです。
  • 独自のドメイン名を選択でき、自動的にHTTPSでセキュア化されます(例:https://api.your-company.comhttps://www.your-company.comhttps://backoffice.your-company.com など)。
  • プライベートかつ専用インフラ上で、高いパフォーマンスと堅牢なセキュリティを実現します。
  • ワンクリックでアップデートを適用でき、シンプルかつ手間のかからないメンテナンスが可能です。

約5分でコンテナを本番環境で稼働させることができます。Stackheroがインフラ、アップデート、セキュリティを管理するため、アプリケーション開発に集中できます。Docker CaaSクラウドホスティングの詳細もご覧ください。

Docker CLI はご利用のコンピューターにインストールされている必要があります。 まだインストールしていない場合は、公式 Docker サイトからダウンロードできます: Docker Desktop

Stackhero for Docker を使えば、Docker CLI を利用してリモートでコンテナを管理できます。ローカルと同じ操作感で、今度は本番運用に対応した Docker サーバー上でコマンドを直接実行できるため、セキュアかつ効率的に作業できます。

この仕組みを実現しているのが Docker の「context(コンテキスト)」です。context を使うことで、Docker CLI にコマンドの送信先(ローカルの Docker デーモンか、Stackhero for Docker インスタンスか)を指定できます。context の切り替えは高速かつシームレスです。

Stackhero for Docker インスタンスへ安全に接続するには、その証明書をコンピューターにインストールする必要があります。これらの証明書は認証と暗号化を担い、接続のプライバシーとセキュリティを確保します。

以下のコマンドで証明書をダウンロードし、セットアップできます:

# HOST は Docker インスタンスのドメイン名 (<XXXXXX>.stackhero-network.com) です。
# SERVICE_ID は Stackhero サービスの ID です。
# CERTIFICATES_PASSWORD は Stackhero ダッシュボードの Docker 設定で定義したパスワードです。
(export HOST="<XXXXXX>.stackhero-network.com"
export SERVICE_ID="<SERVICE_ID>"
export CERTIFICATES_PASSWORD="<CERTIFICATES_PASSWORD>"

cd /tmp/ \
  && curl -o certificates.tar https://docker:$CERTIFICATES_PASSWORD@$HOST/stackhero/docker/certificates.tar \
  && tar -xf certificates.tar \
  && (docker context rm -f $HOST 2> /dev/null || true) \
  && docker context create $HOST \
    --description "$SERVICE_ID ($HOST)" \
    --docker "host=tcp://$HOST:2376,ca=ca.pem,cert=cert.pem,key=key.pem")

このコマンドは、サービスドメイン名を名前とした Docker context を作成します。利用可能な context 一覧は次のコマンドで確認できます:

docker context ls

サービスドメインを変更すると証明書も更新されます。安全に再接続するには証明書を再インストールしてください。

デフォルトでは、docker ps を実行するとローカルマシン上のコンテナが表示されます。たとえば、次のコマンドを実行すると:

docker run --rm alpine wget -q -O - ifconfig.me

コンテナはローカルで動作するため、ご自身のコンピューターのパブリック IP が返されます。

リモートで作業するには、Docker context を Stackhero for Docker インスタンスに切り替えます:

docker context use <XXXXXX>.stackhero-network.com

これで、すべての Docker CLI コマンドがリモートの Docker サーバー上で実行されます。同じ IP チェックのコマンドを実行すると:

docker run --rm alpine wget -q -O - ifconfig.me

Stackhero for Docker インスタンスのパブリック IP が表示されます。これで、コンテナがリモートサーバー上で動作していることが確認できます。

ローカルの Docker デーモンに戻すには、次のコマンドを実行してください:

docker context use default

リモートコンテナでボリュームをマウントする場合、利用できるファイルはリモートサーバー上のものです。ローカルマシンのファイルではありません。 たとえば、docker run -it -v ${PWD}:/mnt alpine を実行すると、ローカルのカレントディレクトリではなく、リモートサーバー上のディレクトリがマウントされます。

Docker Compose も現在の Docker context を利用します。context をリモートインスタンスに設定した状態で:

docker context use <XXXXXX>.stackhero-network.com

以降に実行する Docker Compose コマンドはすべてリモートサーバー上で動作します。これにより、マルチコンテナアプリケーションのデプロイもローカルと同じ手順で、本番環境に直接展開できます。

docker context での context 切り替えは対話的な利用に便利です。スクリプトや Makefile では、DOCKER_CONTEXT 環境変数を使うことでより細かく制御できます。詳細は上級者向けドキュメントをご参照ください。

Docker context の詳細については、公式 Docker ドキュメント(contexts) もご覧ください。