コンテナを公開する
my-frontend:0.0.1 を my-domain.com で、my-api:0.0.1 を api.my-domain.com で公開するには、VPS または専用・ベアメタルサーバーを用意し、両方のドメインがそのサーバーを指していることを確認します。
サーバーに Docker がインストールされていることも確認してください。
イメージをサーバーにアップロードする
次のコマンドでコンテナイメージを保存、エクスポートできます。
docker save my-frontend:0.0.1 | gzip > /tmp/my-frontend-0.0.1.tar.gz
docker save my-api:0.0.1 | gzip > /tmp/my-api-0.0.1.tar.gzVPS の SSH を設定済みであれば、scp コマンドでイメージをアップロードできます。
scp /tmp/my-frontend-0.0.1.tar.gz /tmp/my-api-0.0.1.tar.gz [email protected]:~続いて SSH で VPS に接続します。
最後にコンテナイメージを読み込みます。
cat ~/my-frontend-0.0.1.tar.gz | docker load
cat ~/api-0.0.1.tar.gz | docker loadイメージを起動する
サーバーにイメージを読み込んだら、起動する前に次のコマンドで Docker ネットワークを作成します。
docker network create my-domain次のコマンドでイメージを起動します。
docker run -d --network my-domain --name my-frontend my-frontend:0.0.1
docker run -d --network my-domain --name my-api my-api:0.0.1指定している引数とフラグの意味は次のとおりです。
run: イメージから新しいコンテナを作成して実行します。-d: 切り離しモードでコンテナをバックグラウンドで実行し、新しいコンテナ ID を表示します。--network: コンテナのネットワークモードを設定します。--name: コンテナの名前を設定します。my-frontend|my-api: コンテナの名前です。my-frontend:0.0.1|my-api:0.0.1: コンテナの作成に使うイメージです。
Nginx を設定する
Nginx のインストール方法は、サーバーの OS によって異なります。
Ubuntu では、次のコマンドで Nginx をインストールできます。
sudo apt install -y nginxNginx の設定フォルダーは通常 /etc/nginx にあります。
続いて、my-domain.com の Nginx 設定ファイルを /etc/nginx/sites-enabled/my-domain.com に作成します。
server {
listen 80;
server_name my-domain.com;
location / {
proxy_pass http://ip_of_frontend_container:80;
}
}フロントエンドコンテナの IP アドレスを取得するには、次のいずれかのコマンドを実行します。
docker network inspecy my-domain
docker container inspect my-frontend続いて、api.my-domain.com の設定ファイルを /etc/nginx/sites-enabled/api.my-domain.com に作成します。
server {
listen 80;
server_name api.my-domain.com;
## To allow versioning
## We can add a location /v1/ to the next version of our api and keep the old container running
## note that the last / is important
location /v0/ {
proxy_pass http://ip_of_api_container:80/;
}
}API コンテナの IP アドレスを取得するには、次のいずれかのコマンドを実行します。
docker network inspecy my-domain
docker container inspect my-api最後に、次のコマンドで Nginx の設定を再読み込みします。
sudo nginx -s reloadこれで、フロントエンドには http://my-domain.com、バックエンドには http://api.my-domain.com/v0 からアクセスできます。
Certbot で HTTPS を有効にする
Nginx と同様に、Certbot のインストール方法も OS によって異なります。
Ubuntu では、次のコマンドで Certbot をインストールできます。
sudo apt install -y certbotCertbot の Nginx プラグインは、生成した SSL 証明書を使って HTTP 設定を HTTPS に変換します。
次のコマンドで利用できます。
certbot --nginx --email [email protected] --agree-tos -d your-domain.com
certbot --nginx --email [email protected] --agree-tos -d api.your-domain.comSSL 証明書を生成したら、Nginx の設定を更新しましょう。
/etc/nginx/sites-enabled/my-domain.com は次のように更新します。
server {
listen 80;
listen 443 ssl;
server_name my-domain.com;
ssl_certificate /etc/letsencrypt/live/my-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/my-domain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
if ($scheme != https) {
return 301 https://$host$request_uri;
}
location / {
proxy_pass http://ip_of_your_container:80;
}
}/etc/nginx/sites-enabled/api.my-domain.com は次のように更新します。
server {
listen 80;
listen 443 ssl;
server_name api.my-domain.com;
ssl_certificate /etc/letsencrypt/live/api.my-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.my-domain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
if ($scheme != https) {
return 301 https://$host$request_uri;
}
location /v0/ {
proxy_pass http://ip_of_your_container:80/;
}
}SSL の設定と、HTTPS 以外のスキームから HTTPS へのリダイレクトを追加しています。
最後に Nginx の設定を再読み込みします。
sudo nginx -s reloadこれで HTTPS により安全にコンテナにアクセスできます。フロントエンドは https://my-domain.com、バックエンドは https://api.my-domain.com/v0 です。