TECHNICAL BLOG

2018/8/21 # 入門 # ツール 2018/8 Docker入門

概要

Dockerは軽量なLinuxコンテナ環境を提供してくれるツールです。 開発はWindowsマシンだけど、本番サーバはLinux。そこでWindows Linuxコンテナ環境でwebアプリ開発環境を整える。というような場合に便利です。

VagrantはOSとハードウェアまるごと仮想化します。
DockerはOSやハードウェアが仮想化せず、その上の軽量なLinuxコンテナだけを提供してくれます。
そのため、Vagrantに比べ起動が早くメモリも節約できます。

Docker準備

Hyper-V有効

DockerはHyper-Vを利用するため、Hyper-Vを利用できないWindows Home Editionでは使えません。
開発用途なのでPro Edition必須ですね。また、Hyper-Vを有効中はVirtualBoxは起動できません。注意してください。

  • Windows ボタンを右クリックし、[アプリと機能] を選択
  • 下の方にある[関連設定][プログラムと機能] を選択
  • [Windows の機能の有効化または無効化] を選択
  • [Hyper-V] を選択して、[OK] をクリック
  • 再起動を促されるので、再起動する

Docker for Windowsインストール

Docker Storeからダウンロードしてインストールしてください。

> docker --version
Docker version 18.03.1-ce, build 9ee9f40

といった感じで表示されれば成功です。

セキュリティソフトの解放

インストールしているセキュリティソフトによるかもしれませんが、Dockerがガードされてうまく動かない場合があります。
以下、ESETについて説明します。

ネットワークの保護タイプを確認

ESET > ネットワーク保護 > 接続されたネットワーク > ネットワークアダプタ
    DockerNAT アドレス 10.0.75.1の接続されたネットワーク名を確認(ex 仮想ネットワーク4)

ESET > ネットワーク保護 > 接続されたネットワーク
    確認したネットワークが「自宅/職場ネットワーク」になっているか確認(「パブリックネットワーク」なら歯車アイコンから設定を変更する)

ポート解放

こちらを参考にするとうまくいきました。

dockerは起動しているとタスクバーに常駐しているので、常駐アイコンを右クリックしてdockerを再起動してください。

フォルダ共有

Windows側のエディタでソースいじれるようにフォルダ共有設定をしましょう。

  • 常駐アイコンを右クリック
  • Setting
  • Shared Drives
  • Cドライブ(PC環境に準じる)のsharedをONにして「apply」する

Dockerfile準備

Dockerfileは、先日説明したVagrantfileとansible.ymlを合わせたようなものです。
ソフトのインストールや環境変数設定などを自動で行ってくれます。
今回はPostgreSQLを例に以下とします。これを任意のフォルダに用意します。(例:my_project/Dockerfile)

FROM postgres:9.5

# 基本
ARG base_timezone="Asia/Tokyo"
ARG work_dir="/usr/local/share"
# PostgreSQL
ARG dbuser="postgres"
ARG dbpass="postgres"
ARG dbname="sample_cvc"

# 基本 ###################################
# locale設定
RUN localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG="ja_JP.UTF-8" 
    LANGUAGE="ja_JP:ja" 
    LC_ALL="ja_JP.UTF-8"

# timezone設定
ENV TZ="${base_timezone}"

# postgres ###################################
ENV POSTGRES_USER="${dbuser}"
ENV POSTGRES_PASSWORD="${dbpass}"
RUN echo "create database ${dbname}_development;" >> /docker-entrypoint-initdb.d/createdb.sql
RUN echo "create database ${dbname}_test;" >> /docker-entrypoint-initdb.d/createdb.sql

公式提供のpostgres:9.5インストール済みイメージをベースに、localeやDBユーザ、DB作成を行っています。
Vagrantと違い、OSの設定やDBインストール設定が不要なので記述量が少なくてスッキリしています。

Dockerイメージの作成

Dockerでの構築にはイメージとコンテナの2段階があります。
まずは元となるイメージを作成します。

> cd my_project
> docker build ./ -t pg_image
> docker images

Dockerfileがあるディレクトリに移動して行ってください。
pg_image???いう名前のDockerイメージが作成されます。

Dockerコンテナ

コンテナ作成

作成したイメージを元にコンテナを作成します。

> docker run --name pg -p 15432:5432 -itd pg_image
> docker ps -a

Docker内PostgreSQL5432ポートをWindows側15432ポートに接続するpgという名のコンテナを作成しました。

コンテナ操作

コンテナ起動

# pgコンテナの起動
> docker start pg

Windows側からpgAdmin等でlocalhost:15432で接続できます。

コンテナSSH接続

# pgコンテナへSSH接続
> docker exec -it pg /bin/bash

コンテナ終了

# pgコンテナの終了
> docker stop pg

コンテナ一覧

# 起動中Docker一覧確認
> docker ps

# 起動&終了したDocker一覧確認
> docker ps -a

どれも簡単なコマンド操作です。

構築したDocker環境の配布

上記のように、基盤構築担当者がDockerfileを準備します。
そして、チームメンバにDockerfileを配布し

  • イメージの作成
  • コンテナの作成
  • コンテナの起動

してもらえば、あっというまに開発環境が整えられます。

最後に

Vagrantに似ている感じもしますが、
OS設定を省けたりインストール済みの公式イメージが配布されているので、
記述量が少なく楽なのがおわかりいただけると思います。
自分はウィルスソフトの設定に手間を取られましたが、
起動・終了も早いしVagrantより人気なのも納得です。

備考

  • docker v18.031-ce