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は起動できません。注意してください。

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側のエディタでソースいじれるようにフォルダ共有設定をしましょう。

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より人気なのも納得です。

備考

こんな記事も読まれています