ブロックチェーン・AI・システム開発の株式会社INDETAIL

コンテナ普及のためにアプリ開発したら、マンツーマンレッスンに発展した話

2018.12.16
o-hyt

※本記事は、INDETAIL Advent Calendar 2018の一環として投稿しています。

dockerののアプリ開発

当記事の目的

Simple & Smallなsample application templateを公開することと自身の体験を書くことで、コンテナへの興味を持ってもらい社内でのコンテナ普及ができると考えました。
※ 最終的な普及のゴールは社内勉強会の開催だと思いますが、第一段階としては当記事でサンプルを公開することとしました。

結論

保身のため結論を最初にお伝えいたします。
サンプルを公開することはできましたが、本来予定していた機能を全て実装する前に、ブログの締め切りが来てしまいました。すみませんでした。
それでも環境の構築は完了しているため、興味があれば見ていってください。

コンテナとは

コンテナといえばDockerを思い浮かべるのが一般的だと思います。
Dockerを使用する一般的なメリットは

  • 使いまわすことができる
  • 環境に依存しない
  • 環境作成の過程が理解しやすい
  • 起動するだけでいい(僕のイメージ)

などが挙げられると思います。
つまり、皆さんが作った環境は是非僕に使わせてください。

アプリケーションの概要

今回作成したものはDocker、Vue.js、Flask、MySQLを利用したサンプルアプリケーションです。しかしこれは開発途中のアプリケーションのため完璧ではありません。
現在はVue.js、Flask、MySQLの環境をDocker-composeで立ち上げるだけのものになります。
ソースはGitHubに公開しています。
https://github.com/hyois/docker-vue-flask/tree/master/vue-flask

実行環境

使用するコマンド

極端にいうと2つだけです。

しかし、いきなりこれだけ説明したとしても将来的に僕と同じ立場(起動するだけ)になると思うので、ここに至る過程もご説明いたします。

作成の過程

  1. Vue-CLIのプロジェクトをローカルで作成
  2. npm run devでlocalhost:8080へ繋がるか確認
  3. Vue用のDockerfile作成
  4. docker runでlocalhost:8080へ繋がるか確認
  5. docker-compose.ymlへ書き換え
  6. docker-compose upでlocalhost:8080へ繋がるか確認
  7. Flask用のDockerfile作成
  8. docker run commandでlocalhost:5000へ繋がるか確認
  9. docker-compose.ymlへ書き換え
  10. docker-compose.ymlにMySQLの記述を追記
  11. create database & table用sqlを作成
  12. Database、tableが作成できているかの確認
  13. mysqlサーバに繋がるか確認
  14. タイムアップ

Dockerfileの書き方

多くはDockerfile のベストプラクティスを参考としました。
http://docs.docker.jp/engine/articles/dockerfile_best-practice.html

flask用のDockerfile

docker build と runを実行する

docker build

DokcerイメージをDockerfile と「コンテクスト」(context)を使って作成します。

docker run

コンテナを起動します。

docker-compose.ymlに書き直す

  • restart: always
  • depends_on: - mysql
  • command: ["python3","manager.py"]

など一部オプションが増えていますが、
基本的にはdocker runとやっていることは一緒です。

ようやく起動コマンド

以上の作業を繰り返し行い最終的には全ての環境がコマンド1つで立ち上がります。

多分役立つコマンド

作成中よく使用したので多分役立つと思うコマンドを紹介します。

コンテナ内に入る

コンテナ内のコマンドを実行

未使用のデータを削除

ここまでの疑問

開発している時に少し疑問が出てきました。
Q1.ホストに凄いインストールしているけど・・ローカル汚れてない?
Q2.コンテナ開発って全部コンテナの中で開発するんじゃないの?

という疑問に対してこのような会が開催されました。
ドッカー会の開催日程

ドッカー会です。
アドベントカレンダー特典のマンツーマンレッスンです。

開催している様子がこちらです。(本当はもっと熱烈指導されている画像もありました。)
ドッカー会の様子

Answer.

アプリケーションを動かす時に必要なのは、

  • 実行環境(Python、Nginx、MySQLなど)
  • プロダクトコード(Vue.js、Flaskなど)

の2種類があります。

「プロダクトコード」は自分たちで作るものなので、開発時は「ローカル」にある方が便利です。そのため、ホスト側で開発します。

一方「実行環境」は、ローカルの管理下に置かない(OSの管理範囲からDockerの管理範囲に閉じ込める)形にします。

これが、開発時にDockerを使う利点であり、これを指して「ローカルを汚さない」という言い方がされています。

この頂いた回答を元にして考えると・・

Q1.ホストに凄いインストールしているけど・・ローカル汚れてない?

プロダクトコードはローカルで開発するため、開発中は汚れているようにみえるけれども、開発したDockerイメージをステージング環境、本番環境で利用する際はDocker管理下に置かれているためローカルは汚れないということのようです。

Q2.コンテナ開発って全部コンテナの中で開発するんじゃないの?

プロダクトコードはコンテナ側で開発するのではなく、実行環境をコンテナ化した上でホスト側で開発を行うことが正しいようでした。

その他、Kubernetes使ってないんですか?という厳しい意見もありましたがSimpleもテーマに含まれるためまたの機会にさせて欲しいです・・。

まとめ

謎は色々出てきましたが、少し使う分には凄く難しいこともなく簡単に試すことができました。まだ使ったことがない方は起動してみるだけでも面白い気がします。
とても便利なものなので開発に役立てていただけたら嬉しいです。

o-hyt

歌って踊れるお兄さんが目標。

「いいね」ボタンを押すと、最新情報をすぐに確認できます。