LoginSignup
11
10

More than 5 years have passed since last update.

Dockerfileをローカル環境に適用するシェルスクリプト

Posted at

Docker便利ですが,Dockerじゃない環境使うことも未だに極々稀にはあると思います.手っ取り早くサービスを動かす必要があるのに,環境がdockerじゃない,でもDockerfileは既に書いてあるという場合に少しだけ便利なシェルスクリプトです.

Dockerfile書いた後に,やっぱりVPS等に環境を作りたくなった場合などにも使ってます.

dock2local.sh

#!/bin/sh
# Apply a Dockerfile to local environment.
# usage: sudo ./dock2local.sh [PATH_TO_Dockerfile]

DOCKERFILE=${1:-Dockerfile}
DOCKERFILE=`dirname $DOCKERFILE`/`basename $DOCKERFILE`
LOCALDIR=$(cd `dirname $DOCKERFILE` && pwd)

D_WORKDIR=`pwd`
D_USER=`whoami`
D_CMD=""

FROM() {
  echo "# FROM: $@"
  uname -a
}
MAINTAINER() {
  echo "# MAINTAINER: $@"
}
RUN() {
  # TODO: sudo - $D_USER
  cd $D_WORKDIR; $@ || exit
}
ADD() {
  cd $D_WORKDIR; mkdir -p `dirname $2`
 cd $D_WORKDIR; cp $LOCALDIR/$1 $2 || exit
}
COPY() {
  cd $D_WORKDIR; mkdir -p `dirname $2`
  cd $D_WORKDIR; cp $1 $2 || exit
}
CMD() {
  D_CMD=$@
}
WORKDIR() {
  mkdir -p $1 || exit
  D_WORKDIR=$1
}
USER() {
  D_USER=$1
}
ENV() {
  # Key=Value only...
  echo export $@ >> /etc/profile
}
VOLUME() {
  # single volume only...
  mkdir -p $1
}
EXPOSE() {
  echo "EXPOSE: not supported."
}

echo "$DOCKERFILE start..."
source $DOCKERFILE
#if [ $D_CMD ] ; then
#  crontab -l | { cat; echo "@reboot $D_CMD"; } | crontab -
#  $D_CMD
#fi
echo "finished."

使い方

./dock2local.sh Dockerfile

説明

  • 必要なコマンドをシェル関数として定義した上で Dockerfle 自体を実行します
  • よく使うコマンドしか実装してないので,Dockerfileに合わせて良しなに書き換えてください
  • 途中で止まったら諦めて人間の手で温かみのある構築を
  • csh系のシェルではおそらく修正しないと動きません

License

Public Domain 扱いでOKです

11
10
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
11
10