LoginSignup
32
30

More than 5 years have passed since last update.

Dockerで作った開発環境で開発する

Last updated at Posted at 2015-04-30

動機

ghcmod-vimが普通にインストールするとなぜかエラーが出て動かなかった。
Dockerできれいな環境を用意してあげると動いたので、Dockerで作った環境の中で開発してる。
cabalで間違えてグローバルにインストールしてもすぐに戻せるし、可搬性も上がるので良いかもしれない。

GUIなエディタを使っている場合はコンテナ内で使えない(?)ので、外でコード書いて中で動かすことになる。

以下、Haskellについて知らなくても問題ないです。

準備

docker execを使うのでdocker1.3以上を使ってください。
「apt-getで入れたいけど、バージョンが古い」という方はUbuntu 14.04 へ Docker のインストール - 作業ノートを見てください。

Dockerfile

ベースとなるUbuntuのイメージと、それに載せる言語のイメージを作る。

FROM ubuntu:14.04

RUN \
  sed -i 's/# \(.*multiverse$\)/\1/g' /etc/apt/sources.list && \
  apt-get update && \
  apt-get -y upgrade && \
  apt-get install -y build-essential && \
  apt-get install -y software-properties-common && \
#使うものを入れる
  apt-get install -y byobu curl git tig htop man unzip vim wget && \
  rm -rf /var/lib/apt/lists/* && \
# 今回はpiyoというユーザにする
  useradd -m piyo

WORKDIR /home/piyo

ENV HOME /home/piyo
ENV LANG C.UTF-8

USER piyo

CMD ["bash"]

やっていることは

  • apt-getで普段使うようなもののインストール
  • ユーザの作成
  • WORKDIRとHOMEの指定
  • USERの指定

USERを指定しないとrootでログインすることになるため、書いたコードの所有者がrootになってしまいホストから触るのが面倒になります。

LANGを指定しているのはvimのNERDTree文字化けが起きたため。

ubuntuの上に載せる言語用のDockerfile

FROM your_ubuntu

USER root

#RUN \
#  echo 'deb http://ppa.launchpad.net/hvr/ghc/ubuntu trusty main' > /etc/apt/sources.list.d/ghc.list && \
#  apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F6F88286 && \
#  apt-get update && \
#  apt-get install -y --no-install-recommends cabal-install-1.20 ghc-7.8.4 happy-1.19.4 alex-3.1.3 \
#          zlib1g-dev libtinfo-dev libsqlite3-0 libsqlite3-dev && \
#  rm -rf /var/lib/apt/lists/*

USER piyo

#ENV PATH $HOME/.cabal/bin:/opt/cabal/1.20/bin:/opt/ghc/7.8.4/bin:/opt/happy/1.19.4/bin:/opt/alex/3.1.3/bin:$PATH

#RUN \
#  cabal update && \
#  cabal install ghc-mod

Haskell用のコマンドはコメントアウトしています。代わりに使う言語のインストールなどを行ってください。

要するにUSERを変えてapt-getしてその後USERを戻してるだけ。

使う

長ったらしいコマンドを打って開発環境に入るのはいやなのでbashのfunctionを書いた。
変数は自分の環境に合わせてください。VIMとかVIMRCとかBASHとかBASHRCとかGITとか

function内のHASKELLが書いたソースの置場。

HOME="/home/piyo"
DOCKER_HOME="/home/piyo"
VIM="-v ${HOME}/.vim:${DOCKER_HOME}/.vim"
VIMRC="-v ${HOME}/.vimrc:${DOCKER_HOME}/.vimrc"
BASH="-v ${HOME}/.bash:${DOCKER_HOME}/.bash"
BASHRC="-v ${HOME}/.bash_profile:${DOCKER_HOME}/.bashrc"
GIT="-v ${HOME}/.gitconfig:${DOCKER_HOME}/.gitconfig"
SET="$VIM $VIMRC $BASH $BASHRC $GIT"

DOCKER="docker run -it --rm"
DOCKER_BACK="docker run -itd"
DOCKER_EXEC="docker exec -it"

function haskell() {
  NAME="piyo/haskell"
  CONTAINER="haskell"
  HASKELL="-v ${HOME}/haskell:${DOCKER_HOME}/haskell"
  if [ $# -eq 0 ]; then
    $DOCKER_EXEC $CONTAINER bash
  elif [ $# -eq 1 ]; then
    case $1 in
      "run" ) $DOCKER $SET $HASKELL --name $CONTAINER $NAME ;;
      "back" ) $DOCKER_BACK $SET $HASKELL --name $CONTAINER $NAME ;;
      "exec" ) $DOCKER_EXEC $CONTAINER bash ;;
    esac
  fi
}

haskell backでバックグラウンドでコンテナを動かしてhaskell execでコンテナに入ります。

32
30
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
32
30