26
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Windows10(pro)ではじめる git + Docker 開発環境

Last updated at Posted at 2016-09-01

概要

Windows10勢いあるなと感じてPCを購入したので
docker+gitの開発環境を構築した。

以下やってみた

  1. Windows端末でgitの操作
  2. Windows端末でDockerを立ち上げ
  3. Docker内でWebアプリケーション(sinatra)立ち上げ
  4. コード管理は以下のようにする
    インフラ環境はDockerfileに書いて、git管理
    コードはwindows上でのお気に入りのテキストエディタで編集してgit管理

環境

OS: Windows10 pro
cpu: corei-5
メモリ: 8GB

Windows開発環境のイメージ

  • Linuxでの開発が多いのでWindowsでも同じようにLinux環境がほしい
  • Windowsに直接ruby入れたりできるけどWindowsの環境自体は汚したくないな
  • virtualbox入れてディスク10GBぐらい確保して立ち上げ必要だろうな
    • 起動が重くて容量食う印象

最近Macばっか触っていたのでこんなイメージだったが、Dockerの高速、軽量な使い捨て環境が解決!

Dockerをインストール

Dockerについては
http://paiza.hatenablog.com/entry/docker_intro
がわかりやすかったです。

インストールについては
https://docs.docker.com/docker-for-windows/
を参照。

Windows10 proだとHyper-V上で動く。VitrualBox不要。
Docker for Windows requires 64bit Windows 10 Pro, Enterprise and Education (1511 November update, Build 10586 or later) and Microsoft Hyper-V
それ以外はDocker Toolboxを使う。Virtual Box上で動く。

チュートリアルどおりubuntuのbash環境は以下ですぐ立ち上がる、すごい。

$ winpty docker run -it ubuntu bash
Git Bashで実行の際は、winptyのprefixが必要だった

まだ立ち上げただけだがcpu, メモリほとんどかわらず高速、軽量。

余計なものを立ち上げない分VirtualBoxよりはかなり軽い印象。

ubuntuのイメージは126.4 MBで場所とらない。

Gitをインストール

https://git-for-windows.github.io/
を参照

一緒にGit BashというBashエミュレーターがインストールされる。
鍵作成とかdockerコマンドとかvimとか使えるので便利。
他にもエミュレーターあるみたいだけど、とりあえずこれを使っている。

Webアプリケーション立ち上げまで

コードは以下にまとめ
https://github.com/yoosato/docker-test

Dockerfileでinfrastructure as code

FROM ruby
MAINTAINER yoosato
RUN apt-get update && apt-get install -y curl lsof net-tools

RUN gem install bundler
EXPOSE 4567

COPY Gemfile* /tmp/
WORKDIR /tmp
RUN bundle install -j 5

ENV app /app
RUN mkdir $app
WORKDIR $app
ADD . $app

CMD ["bundle","exec","ruby","testapp.rb", "-o", "0.0.0.0"]

dockerイメージに対して変更していって手動コミットもできるが、
インフラ環境もコード管理できるDockerfileにまとめていく。

今回は、sinatraを入れてみるのでFrom rubyとして、Docker Hubのものを使う。

sinatraの用意

http://type.jp/s/itac/article5.html を参考に簡単に用意。

require 'sinatra'
require 'sinatra/reloader'

get '/' do
  "Hello World!"
end

GemはbundleでGemfile管理

Gemfileをgitに用意して、Dockerfile内でbundleインストールしましょう。

source 'https://rubygems.org'
gem 'sinatra'
gem 'sinatra-reloader'

bundle installのResolving dependenciesですごく時間かかる。。
ので以下を参考に書き換えたらキャッシュしてくれて2回目以降早くなった。
https://medium.com/@fbzga/how-to-cache-bundle-install-with-docker-7bed453a5800#.tbjpd1lw3

コードをDockerイメージへ受け渡す方法

  • DockerfileでCOPYする
  • DockerfileでRUN git cloneでコードを取得

この2つの方法か?
今回ローカルにgit cloneしている前提でCOPYを使って書いてみる。

ENV app /app
RUN mkdir $app
WORKDIR $app
ADD . $app

Docker実行時に-vで受け渡す方法もある。こっちのほうがいちいちbuild不要でいいかも。
参考: https://github.com/ongaeshi/docker-sinatra-dev

windows上でお気に入りのテキストエディタを使って、git commitして、  
dockerに渡す。

Dockerイメージをビルド

$ docker build -t testapp:01 .

-t <イメージ名前>:

Docker起動

$ docker run -p 4567:4567 -d testapp:01

コンテナの中に入って確認したい場合は、docker execを使う。
参考: https://unicorn.limited/jp/item/347

$  winpty docker exec -it <id> bash
# ps auxww | grep testapp
# lsof -p <pid>
# curl "http://localhost:4567"

(rubyイメージではパッケージが最初から入っていないのでapt-get install curl lsof net-toolsしておく)

Windows端末 Edgeブラウザから
http://localhost:4567/
アクセスできず。。
sinatraの外部アクセスの仕様変更の問題でした。
(Thanks Okayamasan&記事書いてくれた方)

http://qiita.com/u1_fukui/items/b86b21f6ed39f4c10d5d を参考に
DockerfileのCMDを以下のようにして再ビルド。

CMD ["bundle","exec","ruby","testapp.rb", "-o", "0.0.0.0"]

ブラウザから見れるようになった!!

26
33
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?