考えられる答えは次の2つです。(1)Dockerで直接ポートをセットアップし、Nginx / Apacheを使用してvhostをプロキシするか、(2)Dokkuを使用してポートとvhostを管理します(これが方法1の方法です)。
方法1a(dockerでポートを直接割り当てる)
ステップ1:ホストにnginx.confまたはApacheをセットアップし、必要なポート番号を割り当てます。ホスト上で実行されているこのWebサーバーは、仮想ホストのプロキシを実行します。Dockerに関してこれについて特別なことは何もありません-それは通常の仮想ホストホスティングです。次に、ステップ2で、Dockerに正しいホストポート番号を使用させるための特別な部分があります。
手順2:次のように、「-p」を使用してDockerのポート番号を強制的に割り当て、Dockerのポートマッピングを設定し、「-e」を使用してDocker内のカスタム環境変数を設定します。
port=12345
IMAGE=myapps/container-1
id=$(docker run -d -p :$port -e PORT=$port $IMAGE)
echo $id
echo $id > /app/files/CONTAINER
docker ps
docker logs $id
docker kill $id
方法1bハードコードされたアプリケーションポート
...アプリケーションがハードコードされたポート、たとえばポート5000を使用している場合(つまり、方法1aのようにPORT環境変数を介して構成できない場合)、次のようにDockerを介してハードコードできます。
publicPort=12345
id=$(docker run -d -p $publicPort:5000 $IMAGE)
方法2(Dokkuにポートを把握させる)
現時点では、Dockervhostを管理するためのかなり良いオプションはDokkuです。今後のオプションはFlynnを使用することかもしれませんが、現時点では、Flynnはまだ始まったばかりで、準備が整っていません。したがって、今はDokkuを使用します。Dokkuのインストール手順に従った後、単一ドメインに対して、「VHOST」ファイルを作成して仮想ホストを有効にします。
echo yourdomain.com > /home/git/VHOST
これで、アプリがSSH経由でDokkuにプッシュされると(これを行う方法についてはDokkuのドキュメントを参照)、DokkuはVHOSTファイルを確認し、プッシュされた特定のアプリ(たとえば、「container-1」をプッシュした場合)を生成します。次のファイル:
/home/git/container-1/nginx.conf
また、次の内容になります。
upstream container-1 { server 127.0.0.1:49162; }
server {
listen 80;
server_name container-1.yourdomain.com;
location / {
proxy_pass http://container-1;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
サーバーが再起動されると、Dokkuは、Dockerがランダムに別のポートを割り当てられるのではなく、最初にデプロイされたポート(ここでは49162)にマップされたポートでアプリケーションを起動するようにします。この決定論的な割り当てを実現するために、Dokkuは最初に割り当てられたポートを保存/home/git/container-1/PORT
し、次回の起動時にPORT
環境をこの値に設定し、Dockerのポート割り当てをホスト側とアプリ側の両方でこのポートにマップします。これは、Dokkuが設定PORT=5000
し、VPS側でDokkuがアプリ側で5000にマップするランダムポートを特定する最初の起動とは対照的です。ラウンドアバウトですが(将来変更される可能性もあります)、機能します。
内部でのVHOSTの動作方法は、SSH経由でアプリのgitプッシュを実行すると、Dokkuはにあるフックを実行し/var/lib/dokku/plugins/nginx-vhosts
ます。これらのフックもここのDokkuソースコードにありnginx.conf
、正しい仮想ホスト設定でファイルを書き込む役割を果たします。の下/var/lib/dokku
にこのディレクトリがない場合は、を実行してみてくださいdokku plugins-install
。