開発環境も本番環境もDocker


作業環境

■前提
- Docker for Macインストール済み
- AWS EC2インスタンス作成済み

■環境
- macos high sierra 10.13.6
- EC2 Amazon Linux AMI release 2018.03

なぜ興味を持った

今年の1月〜4月までは開発環境の構築の仕事をする時には差分を調べて本番環境に合わすことに多くの時間を使いました。Docker/Kubernetes 実践コンテナ開発入門という本を読んで開発環境も本番環境もDockerにすれば環境差異問題からの脱却することができるを知って、もうすでにかもしれませんがこれからはこれだと思いました!!!

解説

全体の流れ

  1. Docker for Macで開発環境を作って開発をする。
  2. インフラとアプリケーションを同梱した箱のようなコンテナのイメージを作成してDocker Hubにプッシュ。
  3. EC2のLinux上のDockerを使ってDocker Hubにプッシュしたイメージを取得してこれを使って本番環境を作成する。
    ※ 開発環境はDocker for Windowsだと本番環境はLinux環境で上手く行かないの情報はありましたが、Docker for Macでは問題なくできました。

開発環境

  • ディレクトリの構成

    • delusion_quiz
      アプリケーションの実体
    • Dockerfile
      Dockerコンテナの構成内容をまとめて記述されているファイル
    • docker-compose.yml
      yaml でDocker コンテナに関する起動オプションを記述したファイル
Dockerfile
    FROM php:7.0.21-apache
    COPY ./delusion_quiz/ /var/www/html
docker-compose.yml
    version: "3"
    services:
      echo:
         build: .
         ports:
         - 80:80

以上の条件で下記のコマンドを実行するとos、ミドルウェア、phpのどれも揃ってアプリケーションが動くようになる
docker-compose up

  • イメージを作成してDocker Hubにプッシュ
     1. コンテナを確認
      docker ps -a
     2. コンテナをイメージにコミットする
      docker commit 092723cefd67 iiwao/delusion_quiz:version1
     3. コミットしたイメージを確認
      docker image ls
     4. イメージをDocker Hubにプッシュ
      docker image push iiwao/delusion_quiz:version1

以上でDocker Hubにイメージがアップされる

本番環境

EC2のLinux上のdockerで以下を実行する

  1. Docker Hubからイメージを取得
    docker pull iiwao/delusion_quiz:version1
  2. イメージをコンテナにビルドする
    docker build -t iiwao/delusion_quiz .
  3. Docker実行環境の80ポート経由でHTTPリクエストを受けられるようにする
    docker run -dit -p 80:80 iiwao/delusion_quiz:version1

以上で簡単な開発環境も本番環境もDockerが完成
EC2にデプロイしたアプリケーション