はじめに
このドキュメントは Azure を学ぶエンジニアが WebApp on Linux をはじめとするコンテナ系サービスを扱う前に、まずは Docker を学ぶための勉強会資料です
スライドモードに最適化しています
本題の前に
- 手元のPCがBIOSなどの関係で Docker 動かせない人
以下のコマンドで Azure 上に CoreOS 立てましょう
(とはいえ azure-cli の Docker イメージ動かせないので誰かに立ててもらうのが吉)
az login
az group create (groupname)
az vm create --name node-1 --resource-group (groupname) --admin-username core --admin-password (password) --image CoreOS:CoreOS:Stable:latest --authentication-type password
なぜ Docker なのか
- Infrastructure as a Code の体現
- プログラマの守備範囲拡大に伴う開発と本番の環境統一化
- 巨人やOSS界隈で整備されつつある環境
WebApp on Linux もコレ
それぞれのトピックを参加者間で話しましょう
あとはさんざん語られてるので各自調べましょう
はじめる
用意されている Dockerfile で docker build, docker run する
-
Azure のビルトインイメージ で公開されているものをダウンロードし、
docker build
およびdocker run
します - ruby, php, node, dotnetcore のうちどれかで試しましょう
ここからハンズオン or 演習
Dockerfile を書く
- 今回は Ruby を取り上げます
- みんな大好き? Redmine を動かしましょう
- Redmine をベースに、 Azureポータルで SSH できるようにカスタマイズします
- 作成したリポジトリは GitHub のリポジトリを用意 して公開します
Docker Hub でビルドと公開
- GitHub で公開したリポジトリを Docker Hub でビルドします
Automated Build は GitHub の変更検知してリビルドするので便利です

Azure
Webapp on Linux
Azure Database for MySQL
- 作成
-
ファイヤーウォール規則を設定
- Webapp のグローバルIPは WebApp の「プロパティ」「送信 IP アドレス」で確認
- redmine 用のスキーマは手元から
mysql
クライアントで作成しましょう
ヒント
Docker file
-
FROM
句でベースとなる Docker イメージを指定します - Windows 環境で
.sh
を書く場合は改行コードが LF になっていることを確認します
Webapp on Linux
- Redmine のイメージでは、Rails の
db:migrate
をコンテナ実行時にキックしています
コンテナ内の/usr/src/redmine/log/production.log
で
ActiveRecord::StatementInvalid (Mysql2::Error: Table 'redmine.settings' doesn't exist
が出て動かないときはローカルから以下で回避
docker pull (docker_repository)
docker run -it (docker_repository) bash
# ここから docker コンテナ内
cd /usr/src/redmine
env REDMINE_DB_MYSQL=(mysql_db_name).mysql.database.azure.com REDMINE_DB_USERNAME=(mysql_username)@(mysql_db_name) REDMINE_DB_PASSWORD=(mysql_password) rake db:migrate
Database for MySQL
- SSL 接続の強制は DockerHub の redmine イメージからそれなりに変更が必要なので、暫定的に切っておくことをオススメします
(もちろんプロダクションはSSL使いましょう)
実装例
- GitHubリポジトリ
- DockerHubリポジトリ
- Webapp on Linux のアプリケーション設定
REDMINE_DB_MYSQL=(mysql_db_name).mysql.database.azure.com
REDMINE_DB_USERNAME=(mysql_username)@(mysql_db_name)
REDMINE_DB_PASSWORD=(mysql_password)