docker imageを作成して簡単にローカル開発環境を構築しよう


はじめに

色々な案件にアサインする機会が多く、その都度、案件に合わせたローカル開発環境を構築していました。
mysqlを停止して、mariadbを起動する、apacheを停止してnginxを起動するなど、面倒くさいことが発生していました。

上記の内容を解決するために、2年前くらいからdockerを導入しました。
その内容を記載して、私と同じ状況が打破できれば幸いです。

dockerを使用する利点について

  • ローカルPCの言語やミドルウェアの乱立を防ぐ

  • 開発チーム内でローカル開発環境を使いわますことができる

  • amazon EC2 Container Serviceなどを使用して、そのまま本番へデプロイできる。
    ※ 業務に使用できるレベルなのかは検証してください。

検証PC

  • macOS Mojave バージョン 10.14

Docker for Macをインストール

URLから「Download from Docker Store」を押下
右上の「Get Docker」を押下し、Dockerのインストーラーをダウンロード

Docker(公式サイト)

※最近、docker hubの会員登録が必要になったため、会員登録すること。

ダウンロードが完了した後にターミナルを開き、下記のコマンドを実行

$ docker version
Client: Docker Engine - Community
 Version:           18.09.2
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        6247962
 Built:             Sun Feb 10 04:12:39 2019
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.2
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.6
  Git commit:       6247962
  Built:            Sun Feb 10 04:13:06 2019
  OS/Arch:          linux/amd64
  Experimental:     true

docker-composeをダウンロード

「docker-compose」とは複数のコンテナを使うDockerアプリケーションを定義・実行するツールです。

docker-compose(公式サイト)

最新のdockerのドキュメントを読みましたが、最新の「Docker for Mac」には「docker-compose」がDockerアプリに梱包されいるそうです。

Follow these instructions if you are running the Docker daemon and client directly on Microsoft Windows Server with Docker Engine - Enterprise, and want to install Docker Compose.

下記のコマンドを実行してdocker-composeをダウンロード
curl -L https://github.com/docker/compose/releases/download/1.6.2/docker-compose-uname -s-uname -m> /usr/local/bin/docker-compose
下記のコマンドを実行
chmod +x /usr/local/bin/docker-compose`

下記のコマンドを実行して正常に表示されればOKです。

$ docker-compose version
docker-compose version 1.23.2, build 1110ad01
docker-py version: 3.6.0
CPython version: 3.6.6
OpenSSL version: OpenSSL 1.1.0h  27 Mar 2018

docker-composeファイルの作成

検証用のディレクトリを作成
mkdir docker-compose-test

「docker-compose-test」に移動
cd docker-compose-test

dockerの設定を記載するymlファイルを作成
touch docker-compose.yml

「docker-compose.yml」に下記の内容をコピー

version: '3'

services:
  amazonlinux2:
    container_name: amazonlinux2
    image: amazonlinux:2
    ports:
      - 80:80
    tty: true
    privileged: true
    restart: always

docker-composeでdocker containerを起動

下記、コマンドを実行し、コンテナを起動
docker-compose up -d --build

下記のように表示されていればOKです。

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
96cca54b9e91        amazonlinux:2       "/bin/bash"              44 seconds ago      Up 43 seconds       0.0.0.0:80->80/tcp                  amazonlinux2

docker container内にlogin

docker exec -it amazonlinux2 bash

docker imageを作成

docker containerを確認

kusunokBookpuro:docker-compose ry_kusunoki$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
96cca54b9e91        amazonlinux:2       "/bin/bash"              16 minutes ago      Up 16 minutes       0.0.0.0:80->80/tcp                  amazonlinux2

docker containerを停止
docker-compose stop

docker containerが停止されているのを確認

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                               NAMES
96cca54b9e91        amazonlinux:2       "/bin/bash"              17 minutes ago      Exited (137) 31 seconds ago                                       amazonlinux2

docker containerからimageを作成

$docker commit amazonlinux2 project_name:1
sha256:1d727fdd2987cfb95f33469648facd6e2b7c2a2d682c9267191346a6c185052e

「docker image」が作成されているのを確認

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
project_name        1                   1d727fdd2987        46 seconds ago      163MB

先ほどの「docker-compose.yml」を修正

version: '3'

services:
  amazonlinux2:
    container_name: project_name1
    image: project_name:1
    ports:
      - 80:80
    tty: true
    privileged: true
    restart: always

作成したdocker imageでdocker containerを起動

docker-compose up -d --build

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
3849b30ec5bd        project_name:1      "/bin/bash"              6 seconds ago       Up 6 seconds        0.0.0.0:80->80/tcp                  project_name1
$ docker exec -it project_name1 bash
bash-4.2#

最後に

どうでしたでしょうか?
defaultのコンテナを作成し、そこから案件に沿った環境を構築したdocker imageを作成することによって、ローカルPC内のミドルウェア乱立が防げるのではないのでしょうか?

また、検証用サーバとしても使用でるため、ツール類の動作確認などのテストも実施できます。

急ぎ足で記載したため、ご不明な点がありましたら、お手数ですが、コメントで質問をお願い致します。

最後まで、ご拝読有難う御座いました。