今回の目的
macOSにて構築したDockerコンテナをVPSにデプロイ
今回デプロイするのは静的htmlアプリ
前提
macOSでの、Dockerはインストール済み。
ローカルにDockerプロジェクトを作成
プロジェクトディレクトリと、公開htmlファイルの作成
mkdir my-static-site
cd my-static-site
mkdir html
echo '<!DOCTYPE html>...(中略)...</html>' > html/index.html
プロジェクトディレクトリ直下にdocker-compose.ymlを作成
version: '3'
services:
web:
image: nginx:alpine
#build: .
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html:ro
- versionは、3 を指定(最新の構文に対応)
- サービス名は任意の名称を設定(この場合は web )
- ベースイメージとしてnginxを使用
- ビルド時に、./html ディレクトリ以下を、コンテナ内の、/usr/share/nginx/html 以下にコピー(ro = 読み込み専用)
- 今回はシンプルなhtmlファイルなので、buildのカレントディレクトリ指定(=カレントディレクトリのDockerfile指定)はコメントアウト。docker-composeのみでマウント。
Dockerの起動
docker-compose up -d --build
- http://localhost でアクセスして、ページが表示されることを確認。
- -d はバックグラウンド実行オプション
Dockerの起動状況の確認
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c61222e614e9 nginx:alpine "/docker-entrypoint.…" 11 minutes ago Up 11 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp my-static-site_web_1
Dockerの停止
docker-compose down
DockerのVPSへのデプロイ
VPSにDockerをインストール
# Docker本体のインストール
sudo apt update
sudo apt install -y docker.io
# Docker Composeのインストール
sudo apt install -y docker-compose
Dockerの起動、自動起動設定
sudo systemctl start docker
sudo systemctl enable docker
SSHでアップロード
scp -i ~/.ssh/ssh-key.pem -r my-static-site/ username@000.000.000.000:/home/username/
- 複数のサイトを運用している場合など、SSHキーが複数ある場合は、-iオプションでキーの指定が必要
VPS側のDockerを起動
cd ~/my-static-site
sudo docker-compose up -d
しかし、ブラウザで確認してもDockerコンテナ内のhtmlは表示されず。
- Apacheが起動しており、80番ポートがApacheに割り当てられているため
- Apacheを停止してから再度Docker起動する必要あり
Apacheの停止
sudo systemctl stop apache2
sudo systemctl disable apache2
sudo docker-compose up -d
sudo docker ps
CONTAINER ID IMAGE PORTS NAMES
abcd1234 nginx:alpine 0.0.0.0:80->80/tcp my-static-site_web_1
・再度ブラウザで確認するとコンテナで公開したhtmlページが表示。