THINK

初めてのDockerfile

9/13/2018

できるだけ長く続けて行きたいなーと思いつつ更新。

最近Dockerを使い始め、 ようやく自分でDockerfileを書けるようになりました。

Goの実行環境を作ったりしてみたのですが、 Dockerfileをbuildするときにソースファイルを読みこんでいました。 こんな感じに…

FROM golang

WORKDIR /go/src/hello
COPY . .

CMD go build && ./hello

ただ、このやり方だと、 ソースを書き直すたびに build をやり直す必要があるため、なんだか面倒だなーと。 探したところ、docker-compose の volumes を利用すると上手くいきそう… そういうわけで実装してみました。

FROM golang
MAINTAINER asuka

WORKDIR /go/src/github.com/19700101000000/system-sample/server

RUN go get -u github.com/golang/dep/...


CMD dep ensure && go build && ./server

こんなふうにDockerfileを書いて…

version: "3"

services: 
  server: 
    build: server
      volumes: 
        - ./server:/go/src/github.com/19700101000000/system-sample/server
  proxy:
    image: nginx
    volumes:
      - ./proxy/conf.d:/etc/nginx/conf.d
    ports:
      -  80:80
    links:
      - server

こんな感じに docker-compose を書く。

動かしてみたところ、Dockerfile を毎度 build し直さなくても上手く動きました。 めでたしめでたし。 ただ、dep init に関しては、事前にやっておく必要があるので、それを忘れると上手く動きません。 この辺の設定について、また何か良い案があれば載せたいと思います。

実際に作っているリポジトリがあるので、気になる方は こちら を参照してください。 ただし、アクティブはリポジトリなので、書き換わる可能性がありますが…