LoginSignup
38
46

More than 5 years have passed since last update.

Dockerにホームディレクトリをマウントしちゃおう

Last updated at Posted at 2016-06-11

.NET Core RC2が、Ubuntu 14.04には対応しているが、Ubuntu 16.04にはまだ対応しておらず、自分のノートPCはもう16.04にあげてしまったため、なんとかDockerの力を借りて動かせないかと試行錯誤したところ、動かすことに成功した。
このノウハウは他にも使えると思いました。

PATHの通ったところに、dotnetというファイル名で以下のファイルをおいた。

dotnet
#!/bin/bash
docker run -it --rm \
    -u $UID:`id -g` \
    -v $HOME:$HOME \
    -e "HOME=$HOME" \
    --workdir=`pwd` \
    --entrypoint=dotnet \
    microsoft/dotnet:1.0.0-preview1 \
    $*

ポイントは以下の通り。

  • このコンテナの中に動かしたいプログラムが入っている(今回はdotnet
  • docker run -it --rmにより、実行後すぐにコンテナを削除し、コンテナを残さないようにする
  • -u $UID:`id -g`により、コンテナ内でもホストのユーザID、グループIDで実行できる(しないとroot権限になる)
  • -v $HOME:$HOMEにより、コンテナ内にホストのホームディレクトリがそのままマウントされ、使える
  • -e "HOME=$HOME"により、ホームディレクトリを認識させる(コンテナ内でexport HOME=/home/74th/した効果)
  • --workdir=`pwd`により、カレントディレクトリで実行させる。ホームディレクトリをまるごとマウントしているため、そのディレクトリが存在している状態になる。
  • --entrypoint=dotnetにより、コンテナ実行時に動かしたいプログラムを指定する
  • 最後の$*により、このシェルスクリプトの引数をそのままdocker内のコマンドに渡す

これにより、.NET Coreのプロジェクトを以下のようにビルド、実行できる。

$ dotnet restore
$ dotnet build

前にも同じことをしていたが、以下の問題があった。

  • dockerコンテナ内はroot権限で実行されるため、docker内で作成したファイルなどの権限がrootになってしまう
  • ホームディレクトリ上の設定ファイルを参照するプログラム(dotnetでは$HOME/.nuget/を使う)では、そのユーザのホームディレクトリがないため、うまく動かない

こうやって小さく使っても、やっぱりdockerは便利っすね!

(追記)タイトルを、コマンドラインツールとしてのDockerから、今のタイトルに変えました。

38
46
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
38
46