はじめに
【コンテナとGitを利用したWebシステム開発の効率化】というタイトルで記事を投稿したが、その後docker-compose
も試しに使ってみたので、その時の内容をメモとして残しておく。
実行環境
【Docker導入環境】
・Ubuntu 20.04 LTS(GCP上)
・docker 19.03.13
・docker-compose 1.25.0
【コンテナ環境】
・Image Ubuntu:20.04
・Apache 2.4.41 ※バージョン指定をしていないのでインストール時の最新
試してみる事
以下の流れで、docker-compose
を使ってWebサービスの立ち上げ・停止などを試してみる。
1.環境準備
2.Github上にリポジトリを作成
3.ホスト側で用意するファイル
4.docker-compose
を使った操作確認
1.環境の準備
GCP上にVMインスタンスを作成
※イメージはUbuntu20.4 LTS
パッケージ管理ツールのアップデート
$ sudo apt update
gitのインストール
$ sudo apt install -y git
dockerのインストール
【Dockerコンテナ内のUbuntuではsystemctlは使えない】の手順1を参考に。
docker-composeのインストール
$ sudo apt install -y docker-compose
問題なくインストールできているか確認
$ docker-compose --version
docker-compose version 1.25.0, build unknown
2.Github上にリポジトリを作成
Github上で以下を実施する。
■Public用のリポジトリを作成
※手順3では、Github上のPublicリポジトリからクローンすることを前提としている。
■作成したリポジトリ内の直下に『App』フォルダを作成
■『App』フォルダ内にindex.htmlを作成
※中身は適当に記載
■開発用のブランチを切る
※手順3ではブランチ名は main(本番用)
と dev(開発用)
を前提としている。
3.ホスト側で用意するファイル
以下のディレクトリ構成でファイルを用意
./docker-compose.yml
./Dockerfile
./site_config/
- demo_site.conf
./mount/
- main/
- Github上のmain
ブランチをクローンする
- dev/
- Github上のdev
ブランチをクローンする
#################################################
# サイトコンフィグの設定ファイルを入れるディレクトリ #
#################################################
$ sudo mkdir ./site_config
################################
# マウント用のディレクトリを作成 #
################################
$ sudo mkdir ./mount
# ソースコード格納場所
$ sudo mkdir ./mount/main
$ sudo mkdir ./mount/dev
$ sudo git clone --depth 1 -b main https://github.com/Smiler5617/test_websys.git ./mount/main
$ sudo git clone --depth 1 -b dev https://github.com/Smiler5617/test_websys.git ./mount/dev
以下の様に、各ファイルを作成
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/App/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# ベースイメージの取得
FROM ubuntu:20.04
# 必要パッケージのインストール
RUN apt update
RUN apt install -y tzdata
RUN apt install -y apache2
# サイト設定の読み込み
COPY ./site_config/demo_site.conf /etc/apache2/sites-available/
RUN a2dissite 000-default
RUN a2ensite demo_site
# マウント用のディレクトリを作成
RUN mkdir /var/www/html/App
# ポート開放
EXPOSE 80
CMD ["apachectl", "-D", "FOREGROUND"]
version: '3.7'
services:
web_main:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./mount/main/App:/var/www/html/App
ports:
- 8080:80
web_dev:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./mount/dev/App:/var/www/html/App
ports:
- 8081:80
4.docker-compose
を使った操作確認
全サービスの起動
$ docker-compose up
※初回起動時は、ビルドやイメージのダウンロードが自動で開始される。
以下の環境にアクセスできれば、ひとまず起動はできている。
http://[VMの外部IP(グローバルIPアドレス)]:8080/
http://[VMの外部IP(グローバルIPアドレス)]:8081/
起動停止
Ctrl + C
バックグラウンドで実行
$ docker-compose start
Starting web_main ... done
Starting web_dev ... done
※$ docker-compose up -d
でもOKだが、ログの確認したいならstart
がよい。
停止
$ docker-compose stop
Stopping 【Googleアカウント名】_web_dev_1 ...
Stopping 【Googleアカウント名】_web_main_1 ...
指定してサービスの起動や停止も可能
$ docker-compose start web_main
Starting web_main ... done
$ docker-compose stop web_main
Stopping 【Googleアカウント名】_web_main_1 ...
サービスの停止&削除
$ docker-compose down
※サービスが削除されると、start
や restart
で起動できなくなる。