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です