这就是我最终做的,到目前为止似乎有效,但我仍在深入研究它:
# script located in bin/run
NS=mycompany
PROJECT=myproject
# kill and remove old container if it exists
docker kill $PROJECT
docker rm $PROJECT
# tag the previously built image
docker tag $NS/$PROJECT $NS/$PROJECT:old
# build the new image
docker build -t $NS/$PROJECT .
# remove the old image
docker rmi $NS/$PROJECT:old
docker run -dP --name=$PROJECT $NS/$PROJECT /sbin/my_init
在我的项目根目录中,我只需运行:
nodemon -x bin/run
归功于这个来源。
docker 1.3 和 fig 的更新
Fig很棒,它确实从我以前的脚本中消除了很多复杂性。此外,boot2docker 现在原生支持使用 Virtual Box 的共享文件夹在 Mac OS X 上挂载卷。这就是我发现现在对我来说非常有效的方法:
首先,Dockerfile
:
FROM ubuntu:14.04
# Replace shell with bash so we can source files
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
# Set debconf to run non-interactively
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
# Install base dependencies
RUN apt-get update && apt-get install -y -q --no-install-recommends \
build-essential \
ca-certificates \
curl \
git \
libssl-dev \
python \
rsync \
software-properties-common \
wget \
&& rm -rf /var/lib/apt/lists/*
ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 0.10.33
# Install nvm with node and npm
RUN curl https://raw.githubusercontent.com/creationix/nvm/v0.20.0/install.sh | bash \
&& source $NVM_DIR/nvm.sh \
&& nvm install $NODE_VERSION \
&& nvm alias default $NODE_VERSION \
&& nvm use default
ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH $NVM_DIR/v$NODE_VERSION/bin:$PATH
CMD ["npm", "start"]
fig.yml
: _
app:
image: myNodeImage
working_dir: /home/myProject
volumes_from:
- myvols
这是新的bin/run
:
#!/usr/bin/env bash
# This is the the bin/run script
docker run --rm --volumes-from myvols myNodeImage \
rsync \
--delete \
--recursive \
--safe-links \
--exclude .git --exclude node_modules \
/data/myProject/ /home/myProject
fig up
我还有一个执行依赖项安装的bin/install
脚本。node_modules
这假设我已经在我的主机上完成了 npm 安装,以便任何私有包都可以工作。此外,这适用于 npm 链接,您只需要在您的容器中创建一个符号/home/linkedProject
链接$NODE_PATH/linkedProject
。
#!/usr/bin/env bash
# This is the the bin/install script
docker run --rm --volumes-from myvols myNodeImage \
rm -rf /home/myProject && \
rsync \
--delete \
--recursive \
--safe-links \
--exclude .git \
/data/myProject/ /home/myProject && \
cd /home/myProject && \
npm rebuild
所以,把这一切放在一起,这里是按顺序排列的步骤:
创建我的数据卷容器:
docker run -v $HOME/data:/data:ro \
-v /home \
-v /path/to/NODE_PATH \
--name myvols myNodeImage echo Creating my volumes
运行我的安装脚本:cd ~/data/myProject && ./bin/install
运行我的运行脚本:nodemon -x bin/run