Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

動機

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でコンテナに入ります。

techno-tanoC
Elixir, Haskell, Ruby, Rustが好き
mixi
全ての人に心地よいつながりを
http://mixi.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした