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