【ワークショップ】Dockerを使って、本番環境と同等のLAMP環境を「コマンド一発で」ローカルPC上に作ろう。〜 導入編 〜

弊社 Keiji Hashimoto が始めた、
みんなで自分の勉強したいことをひたすらモクモク勉強する」もくもく会。
先日、Docker について勉強したので早速ワークショップという形で、社内でアウトプットしてみました。

30〜40分程度の時間で、Dockerについての入門程度の理解ができると思います。
是非、まだ触ったことの無い方はコチラの記事を参考に頂ければと!


【PR】Next 「Mokumoku MeetUp」

みんなで、自分の勉強したいことをひたすらモクモク勉強しましょう!

  • Date: 3月6日(日)13:00 - 18:30
  • At: 弊社会議室
  • Contact: HWS Keiji Hashimoto

ご興味のある方は、お問い合わせよりご連絡ください。


目次


0. 参加の事前に Docker Toolbox を PCにインストールください。(所用時間:5-10分)

・ Mac や Windowsの場合、Oracle VM VirtualBox が必要になります。
・ Mac や Windowsの OSのversionの動作条件を満たしている必要があります。
★ Docker Toolboxで一緒にインストールされますが、既に利用している方はバージョンアップに気をつけて下さい。

  • ※ 【オススメ!】公式サイトにあるチュートリアルをひと通りやってみるとDockerへの理解が深まります。(所要時間:30-40分)
mac-page-two

参照: https://www.docker.com/

1. Docker導入の背景

  • 同じような環境構築を毎回繰り返し実施するのは面倒だ。
  • インフラチームと開発チームでの開発環境の認識不足を無くす。
    • モジュールの入れ忘れによる動作不良などを防ぐ
  • 本番環境と開発環境を極力同じにしたい。

2. 今回のワークショップのゴール

  • DockerでLAMP環境のコンテナを動かす。

3. Dockerってなに?

  • 「Docker」とは、Docker社(旧dotCloud)が開発するオープンソースのコンテナー管理ソフトウェアの1つ。
  • Go言語でつくられている。
docker_site

参照: https://www.docker.com/

コンテナーとはWebサーバーなどアプリケーションの実行環境を抽象化する技術であり、VMware ESXiやLinux KVMなどの「ハイパーバイザー型の仮想化」に対して、「コンテナー型の仮想化」と呼ばれることもあります。

docker graph

参照: http://www.atmarkit.co.jp/ait/articles/1405/16/news032.html

メリット

  • 開発環境・テスト環境が簡単に用意でき、かつ本番環境と共通化できる
    • 「Docker Registry」
    • 「Docker Export/Import」

チーム開発において例えば開発用マシンで作成したイメージを他のメンバーのマシンに簡単にコピーできます。さらにコピー先を本番マシンにすれば、アプリケーションのデプロイツールとして利用することも可能です。

参考(こちらの記事を読んで基礎知識を持っておきましょう)

4. ワークショップ① 「最新のCentOSの Image を使ってコンテナを起動して /bin/bash を起動する」

ここでわかること。

  • Docker Machine / Oracle VirtualBox
  • Docker Image(取得)
  • Docker コンテナ(起動、削除、プロセス確認)
  • Docker Hub

やってみよう。

  1. Docker Quickstart Terminal を 起動する。
    • Macの場合、Launchpad から「Docker Quickstart Terminal」をクリック。
    • VirtualVoxが起動して、VM用のIPが割り当てられる。
    • applications_folder

      参照: https://www.docker.com/

  2. default の Docker machine の起動を確認する。
    $ docker-machine ls
    $ docker-machine ip default
    
  3. 初期状態のイメージを確認する。
    $ docker images
    
  4. 最新のCentOS の Docker Image を取得する。
    $ docker pull centos:latest
    $ docker images
    
    • Docker Hub で公開されているCentOSの最新のImageが取得される。
    • バージョンを指定して取得もできる。
    • https://hub.docker.com/_/centos/
  5. コンテナ起動前の コンテナのプロセスを確認する。(全てのプロセス)
    $ docker ps -a
    
  6. 最新のCentOS の Docker Image で、コンテナ(仮想マシン)を起動する。
    $ docker run -i -t centos /bin/bash
    
    • 最新のCentOSのimageでコンテナを起動。
    • /bin/bash を起動する。
    • exitで抜けるとコンテナは終了する。
  7. コンテナのプロセスを確認する。(全てのプロセス)
    $ docker ps -a
    
    • centos:latest という Imageを使っているコンテナのプロセスがある。
    • コンテナのステータスやポートやコンテナID、NAMESが確認できる。
    • コンテナの操作を行うときは “CONTAINER ID” か “NAMES” で行うが、”NAMES”は指定がない場合にはランダムに設定される。
  8. コンテナを削除する。
    $ docker stop [CONTAINER ID or NAMES]
    $ docker rm [CONTAINER ID or NAMES]
    $ docker ps -a
    

5. ワークショップ② 「Dockerを使ってLAMP環境のコンテナでWEBアプリケーションを動かしてみよう」

ここでわかること。

  • Dockerfile
    • ビルドして LAMP環境の Docker Image 作成
  • Docker コンテナ(起動、削除、プロセス確認)
    • LAMP環境のWEBアプリをDockerコンテナで起動

やってみよう。

  1. mokumoku_lamp_docker_build.zip を解凍して、ローカルPCに配置する。
    • 以下、{$path} と記載します。
  2. ディレクトリの中身を見てみる。
    .
    ├── Dockerfile・・・Dockerコンテナーの構成内容をまとめて記述したテキストファイル
    ├── phpinfo.php・・・PHPの動作確認用に /var/www/html に配備するPHPファイル
    ├── site・・・コンテナの /var/www/html をマウントして動作確認するためのディレクトリ
    │   ├── cool.html
    │   └── index.html
    └── supervisord.conf・・・サービスをdaemon化するための設定ファイル
    
    • Dockerfile をビルドして Docker Image を作成します。
  3. Dockerfile を見てみる。(内容を見ながら説明します。)
    • FROM・・・どのイメージのどのバージョン(タグ)を使うか。
    • RUN・・・コマンドを実行します。
    • ADD・・・ファイルやディレクトリをコンテナに追加します。
    • ★ その他の命令や命令の詳細は、リファレンス参照。
  4. Docker Quickstart Terminal を 起動する。
    • Macの場合、Launchpad から「Docker Quickstart Terminal」をクリック。
    • VirtualVoxが起動して、VM用のIPが割り当てられる。
  5. イメージを確認する。
    $ docker images
    
  6. ビルドしてImageを作成する。(キャッシュを使わない場合は、失敗しても途中からできる)
    $ cd $path
    $ docker build -no-cache -t mokumoku_backend .
    $ docker images
    
    • DockerHubにあるDockerfileをpullして拡張したりもできる。(ライセンス次第では)
    • キャッシュを使わない場合は、失敗しても途中からできる
      • 1行ずつの命令が実行されているたびに、commit されているらしい。
  7. Imageとコンテナプロセスを確認する。
    $ docker images
    $ docker ps -a
    
    • ビルドした mokumoku_backend という Imageが出来ていること。
    • コンテナのプロセスが存在しないこと。
  8. default の Docker machine のIPを確認する。
    $ docker-machine ls
    $ docker-machine ip default
    
  9. ブラウザで下記URLを確認してみる。
  10. mokumoku_backend の Docker Image で、コンテナ(仮想マシン)を起動する。
    $ docker run -p 2020:22 -p 30443:443 -p 8080:80 --name mokumoku_backend -it mokumoku_backend
    
    • mokumoku_backend というImageを使います。
    • mokumoku_backend というコンテナ名を付けます。
    • ホストの8080ポートとコンテナの80ポートを紐付けますよ。
  11. コンテナのプロセスを確認する。(全てのプロセス)
    $ docker ps -a
    
  12. ブラウザで下記URLを確認してみる。
  13. コンテナを削除する。
    $ docker stop mokumoku_backend
    $ docker rm mokumoku_backend
    $ docker ps -a
    

さらにやってみよう。

Volumeをマウントしてコンテナを起動する。
  1. Volumeをマウントしてコンテナを起動する。
    $ docker run -p 2020:22 -p 30443:443 -p 8080:80 -v {$path}/site:/var/www/html --name mokumoku_backend -it mokumoku_backend
    
    • ローカルのパスは自分のものに書き換えてください。
    • /var/www/htmlsite ディレクトリにマウントします。
  2. コンテナのプロセスを確認する。(全てのプロセス)
    $ docker ps -a
    
  3. ブラウザで確認する。
  4. リアルタイムにファイルを変更して、ブラウザで確認する。
    • ./site/index.html の中身を書き換えてみる。
  5. ブラウザで確認する。
その他 docker コマンドなど
  • DockerのIPやプロセスを確認する。
    $ docker inspect --format '{{ .NetworkSettings.IPAddress }}' mokumoku_backend
    $ docker port mokumoku_backend
    $ docker-machine ls
    $ docker-machine ip default
    
  • 不要なイメージをこまめに消す
    $ docker rmi $(docker images | awk '/^/ { print $3 }')
    

6. リファレンスなど

Dockerfileリファレンス・コマンドチートシート

DockerHubのLAMPで参考になったもの

Docker Hub で公開されているDockerfileも参考になる。
Gitで公開している場合は、pullして拡張したりするのも良い。

その他


【PR】Next 「Mokumoku MeetUp」

みんなで、自分の勉強したいことをひたすらモクモク勉強しましょう!

  • Date: 3月6日(日)13:00 - 18:30
  • At: 弊社会議室
  • Contact: HWS Keiji Hashimoto

ご興味のある方は、お問い合わせよりご連絡ください。


いかがでしたでしょうか??
なんでもまず触ってみるっていうのが、僕は大切だと思っています。

次は、実際の本番環境での Docker 運用などを記事でお伝えしたいと思います〜!
お楽しみに。

Masaya

コメントを残す

メールアドレスが公開されることはありません。

ABOUTこの記事をかいた人

主に、女性向けのWEBサイトやスマホアプリの新規サービス構築に従事。自ら企画をして、数々のサービスやアプリも立ち上げている。企画・開発からプロモーションまで幅広く活躍。2009年、株式会社ヘッドウォータース入社。 / リーンスタートアップ / AI / 画像解析 / GoogleBigQuery / ライフログ / ヘルスケア / ファッション / ビューティ / Misfit / SynAppsTablet / Monaca / エバンジェリスト